freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式linux系統(tǒng)下開發(fā)usb攝像頭圖像采集系統(tǒng)論文(編輯修改稿)

2024-07-25 13:28 本頁面
 

【文章內(nèi)容簡介】 如圖所示:圖5 PC機(jī)與硬件系統(tǒng)連接第四章 系統(tǒng)軟件設(shè)計 軟件系統(tǒng)概述Liunx系統(tǒng)中對USB設(shè)備的支持是通過如圖6所示的結(jié)構(gòu)實(shí)現(xiàn)的。Linux內(nèi)核中的USB Core為設(shè)備和主控制器提供API接口。USB Core包含所有的USB設(shè)備和主控制器的一些通用操作,為向上和向下操作提供一個接口。在Linux系統(tǒng)中,設(shè)備驅(qū)動可分為字符設(shè)備、塊設(shè)備以及網(wǎng)絡(luò)設(shè)備。其中,字符設(shè)備面向字符I/O操作,沒有緩沖,順序讀??;而塊設(shè)備面向數(shù)據(jù)塊,所有操作都通過內(nèi)核地址空間的I/O緩沖區(qū)完成,支持隨機(jī)存取操作。USB設(shè)備通過快速串行通信的方式工作,應(yīng)作為字符設(shè)備來處理。系統(tǒng)加載設(shè)備驅(qū)動的方式有模塊加載和內(nèi)核初始化加載兩種:前者通過用戶使用insmod命令動態(tài)加載到內(nèi)核中,通過rmmod命令卸載驅(qū)動模塊;后者是把驅(qū)動編進(jìn)內(nèi)核,在內(nèi)核初始化時自動加載。USB主口程序由HCD(主機(jī)控制器驅(qū)動)、USBD (USB驅(qū)動程序)以及客戶程序組成。其中USBD負(fù)責(zé)管理所有HCD、設(shè)備驅(qū)動和所有連接到USB總線上的設(shè)備,是USB主機(jī)軟件的核心。如圖2所示,Linux系統(tǒng)中USB子系統(tǒng)采用分層結(jié)構(gòu),其中USBD和HCD提供了支持設(shè)備驅(qū)動程序開發(fā)的API。USB設(shè)備驅(qū)動程序不是通過I/O操作訪問設(shè)備,而是通過USB Core提供的標(biāo)準(zhǔn)接口與設(shè)備交互,它采用由管道組成的通道與設(shè)備進(jìn)行通信。設(shè)備驅(qū)動程序根據(jù)USBD創(chuàng)建所需的管道,并為其分配傳輸所需的緩沖空間。USB主控制器驅(qū)動USB主控制器驅(qū)動USB COREUSB設(shè)備驅(qū)動USB設(shè)備驅(qū)動圖6 Linux下USB系統(tǒng)軟件結(jié)構(gòu) USB的傳輸分為控制傳輸、中斷傳輸、批量傳輸以及等時傳輸四種模式。對于時間性極強(qiáng)但是準(zhǔn)確性不高的視頻捕捉應(yīng)用來說,攝像頭應(yīng)采用等時傳輸模式。Linux系統(tǒng)中,任何USB傳輸都需要通過URB(USB請求塊)來實(shí)現(xiàn)。為了盡可能快地得到圖像數(shù)據(jù),需要加大URB的緩沖,這樣可以降低每個USB事務(wù)中握手信息所占的比例,提高有效數(shù)據(jù)傳輸比例。由于每次USB傳輸都要包括URB的建立、發(fā)送、回收、數(shù)據(jù)整理,而在這些階段中不產(chǎn)生有效數(shù)據(jù),因此可建立兩個URB交替工作,一個URB在等待回收時初始化另一個URB。獲得圖像的過程如圖所示。圖7 獲得圖像過程攝像頭視頻捕獲程序的編寫 攝像頭屬于視頻類設(shè)備,遵循的標(biāo)準(zhǔn)為Video for Linux (V4L)標(biāo)準(zhǔn)。這個標(biāo)準(zhǔn)定義了一套API接口,內(nèi)核、驅(qū)動、應(yīng)用程序都以這個接口為標(biāo)準(zhǔn)進(jìn)行交流。目前的V4L涵蓋了音視頻捕捉及處理等內(nèi)容,也包括USB攝像頭。 Linux系統(tǒng)中一般的文件操作是通過read、write等系統(tǒng)調(diào)用完成,但這些系統(tǒng)調(diào)用是通過內(nèi)核態(tài)與用戶態(tài)之間相互進(jìn)行數(shù)據(jù)拷貝實(shí)現(xiàn)的。對于圖像數(shù)據(jù)來說,進(jìn)行拷貝必然會增加時間開銷,因此需要使用內(nèi)存映射的辦法來加以解決。 首先應(yīng)申請足夠大的內(nèi)核態(tài)內(nèi)存作為圖像數(shù)據(jù)緩存,將URB帶來的數(shù)據(jù)暫存;然后將其用remap_page_range函數(shù)映射到用戶態(tài)空間。這樣,用戶態(tài)空間的圖像處理程序就可以使用mmap()函數(shù),直接讀寫內(nèi)核態(tài)幀緩沖區(qū),減少了額外開銷。要進(jìn)行視頻捕捉必須用到VIDIOCMCAPTURE 和VIDIOCSYNC這兩個ioctl函數(shù)。VIDIOCGMBUF包含有所用緩沖器的設(shè)置與地址。VIDIOCMCAPTURE用于開始捕捉;VIDIOCSYNC用于等待捕捉完成。為加快數(shù)據(jù)處理速度,一般使用雙緩沖設(shè)置,即buffer0捕捉數(shù)據(jù)時,buffer1傳輸數(shù)據(jù);buffer1捕捉數(shù)據(jù)時,buffer0傳輸數(shù)據(jù)。 整個圖像采集程序的流程圖如圖4所示。將采集到的圖像保存為JPEG格式,然后調(diào)用Mplayer中的Mencoder編碼器,即可將多幅JPEG文件合成一段視頻流,實(shí)現(xiàn)視頻回放。圖8 圖像采集程序的流程圖圖9 全屏視頻圖像顯示圖10 四分屏視頻圖像顯示整個系統(tǒng)軟件是在嵌入式Linux基礎(chǔ)之上構(gòu)建的。Sitsang板使用的文件系統(tǒng)是針對Flash的無緩沖機(jī)制的jffs2文件系統(tǒng),文件系統(tǒng)中包含應(yīng)用程序、模塊、配置文件、圖形界面和庫等。Sitsang板使用的是基于Qt/Embedded的圖形界面系統(tǒng)。視頻信號的采集、壓縮和傳輸是建立在圖形界面和嵌入式Linux內(nèi)核之上的。整個軟件系統(tǒng)如圖2所示。系統(tǒng)的設(shè)計可以被分為以下幾個大部分:嵌入式Linux內(nèi)核的移植和編譯,文件系統(tǒng)和圖形界面系統(tǒng)的安裝基于嵌入式Linux視頻采集模塊的設(shè)計視頻圖像壓縮模塊的設(shè)計基于嵌入式Linux的網(wǎng)絡(luò)視頻流服務(wù)模塊的設(shè)計 開發(fā)環(huán)境及開發(fā)工具系統(tǒng)在軟件程序設(shè)計過程中使用了Linux開發(fā)環(huán)境,其是集項(xiàng)目管理編譯程序、工具配置、編輯器、高效的調(diào)試器的IDE,本系統(tǒng)在軟件編寫時使用了高效的MCS51匯編語言。 Linux仿真器是德國Linux公司出品的一款兼容單片機(jī)C語言和匯編語言的軟件開發(fā)系統(tǒng),它集編輯,編譯,仿真等于一體,它是一款具有靈活、直觀、可視化的開發(fā)軟件,完全的Windows界面,界面友好,易學(xué)易用,是使用者更直觀、更清晰的了解每一句程序所對應(yīng)的單片機(jī)內(nèi)部操作,這對開發(fā)者在開發(fā)過程中考慮內(nèi)存和線路的分配很有幫助,同時在錯的查找、執(zhí)行過程中的數(shù)據(jù)查找等方面都變的簡化了。同時Linux仿真器還提供了豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)用工具。Linux它還支持眾多不同公司的MCS51架構(gòu)的芯片,在開發(fā)過程中可以給開發(fā)者更多的選擇空間,多時在選擇不同型號芯片的時候,他還會提供該芯片的相關(guān)信息介紹,這也是多開發(fā)者很有幫助的一個方面,因此很多開發(fā)51應(yīng)用的工程師或普通的單片機(jī)愛好者,都對它十分喜歡Linux在安裝運(yùn)行后,可以首先要建立工程,在這一過程中最關(guān)鍵的是選擇單片機(jī)的型號,在初學(xué)的時候經(jīng)常會疏忽這一工作了造成不必要的麻煩。,保存之后工程里就可以直接調(diào)入進(jìn)來,并構(gòu)造目標(biāo)文件了。它會自動完成編譯的過程,這為我們省去了很多時間,如果通過了編譯沒有錯誤的話,我們就可以查看程序的仿真運(yùn)行情況了。它為我們提供了更方便的查看模式,我們可以把原程序在匯編和機(jī)器語言間切換,而且我們還可以單步執(zhí)行程序,能夠清晰的看出在程序運(yùn)行過程中,單片機(jī)每一個接口和存儲器的工作情況,這也是對開發(fā)者最有利的方面。視頻采集模塊的設(shè)計在嵌入式Linux的內(nèi)核定制和編譯階段,已經(jīng)加入了對Video4Linux模塊以及OV511設(shè)備的支持,所以運(yùn)行在Linux下的視頻圖像采集程序,可以通過Video4Linux模塊提供的編譯接口(API)從OV511設(shè)備中獲取圖像幀。 加載USB及OV511設(shè)備驅(qū)動模塊,同時加載Video4Linux模塊。分別使用命令:modprobeusbcor、modprobeusbuhci、modprobevodeodev和modprobeov511。加載后將生成視頻設(shè)備文件/dev/video0,為了和Video4Linux模塊相協(xié)調(diào),使用lns/dev/video0/dev/video為Video4Linux模塊的默認(rèn)視頻設(shè)備voideo與物理視頻設(shè)備video0建立連接。 使用Video4Linux模塊提供的API進(jìn)行視頻采集程序的設(shè)計。Video4Linux模塊的視頻采集接口設(shè)備為/dev/video,采集程序打開此接口設(shè)備并掃描它以尋找自己所需要的數(shù)據(jù)。這里將簡要介紹一下Video4Linux模塊提供的主要API函數(shù):VIDICGCAP函數(shù)以數(shù)據(jù)結(jié)構(gòu)video_capability返回視頻采集設(shè)備的性能參數(shù);VIDIOCSFBUF函數(shù)使用數(shù)據(jù)結(jié)構(gòu)video_buffer設(shè)備采集設(shè)備的幀緩存參數(shù),如果設(shè)備不支持幀緩存則此調(diào)用無效;VIDIOCGWIN函數(shù)使用數(shù)據(jù)結(jié)構(gòu)video_window來設(shè)備采集窗口參數(shù),使用參數(shù)1調(diào)用VIDIOCCAPTURE則開始視頻信號采集,使用參數(shù)0則結(jié)束采集;VDIOCGCHAN函數(shù)用來查詢不同的采集通道(包括音頻信道),使用數(shù)據(jù)結(jié)構(gòu)video_channel返回通道屬性;VIDIOCSPICT函數(shù)使用數(shù)據(jù)結(jié)構(gòu)video_picture來獲取和設(shè)置采集圖像幀的屬性,比較重要的是圖像幀的調(diào)色板參數(shù);read函數(shù)讀取采集通道中效的下一幀圖像,所讀取的圖像格式和尺寸由前面介紹的VIDIOCSPICT函數(shù)和VIDIOCGWIN函數(shù)決定,這些API函數(shù)以及數(shù)據(jù)結(jié)構(gòu)定義在頭文件linux/中。VideoLinux的圖像采集 Video4Linux是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動,他為針對視頻設(shè)備的應(yīng)用程序編程提供一系列接口函數(shù),在Linux下,視頻采集設(shè)備的正常使用依賴于對Video4 Linux標(biāo)準(zhǔn)的支持。如果使用Video4Linux,在編譯內(nèi)核時,一定要選中Multimedia Devices下的Video for Linux選項(xiàng),本文針對的設(shè)備文件是 / dev / video,使用的器件是基于OV511的USB攝像頭。在運(yùn)行程序前,一定要先加載USB及OV511設(shè)備驅(qū)動模塊,同時加載Video4Linux模塊,分別使用命令:modprobe usbcore,modprobe usbohci,modprobe videodev和modprobe ov511,以確保生成設(shè)備文件/dev/video,若使用的Linux操作系統(tǒng)不支持modprobe命令,也可使用insmod命令。一般來講,基于Video4Linux的圖像采集的程序流程如下圖所示。 圖11 基于Video4Linux圖像采集程序的流程程序的編寫,在這里只給出關(guān)鍵部分的實(shí)現(xiàn)代碼。首先,必須聲明包含2個頭文件: includesys/ includelinux/ 第一部分,設(shè)備的初始化: Int fd=open(“/dev/video”,()_RDWR)。 /*打開設(shè)備文件*/ Struct video_capability grab_capability。 Ioctl(fd,VIDIOCGCAP,amp。grab_capability)。 /*獲得struct video_capability中攝像頭的信息*/ Struct video_picture grab_picture。 Ioctl(fd,VIDIOCGPICT,amp。grab_picture)。 /*獲得圖像的信息*/在獲取圖像信息后,還可根據(jù)需要改變這些信息,例如對比度、亮度、調(diào)色板等,具體做法是先給video_picture中相應(yīng)變量賦新值,再利用VIDIOCSPICT ioct1函數(shù)。 第2部分,使用mmap方式的單幀圖象采集: struct video_mmap grab_buf。 /*以下為設(shè)置圖像幀緩沖區(qū)信息*/=0。 /*一次只采集一幀*/=240。 /*圖像高度*/=320。 /*圖像寬度*/=VIDEO_PALETTE_RGB24。/*圖像的調(diào)色板格式,24位真彩色*/UNSIGNED CHAR * DATA=MMAP(*320*|) /*內(nèi)存映射*/ioctl(.amp。grab_buf) /*采集圖像*/然后調(diào)用ioct1(grab_fd,VIDIOCSYNC,&frame)函數(shù),該函數(shù)成功返回則表示采集完畢,采集到的圖像數(shù)據(jù)放到以data為起始地址,長度為2403203的內(nèi)存區(qū)域中,讀取該內(nèi)存中的數(shù)據(jù)便可得到圖像數(shù)據(jù)。 在此基礎(chǔ)上同樣可實(shí)現(xiàn)連續(xù)幀的采集,即一次采集連續(xù)多幀圖像的數(shù)據(jù),Video4Linux最多支持一次采集32幀,而每一幀的數(shù)據(jù)在內(nèi)存中的位置為data+[frame],其中g(shù)rab_vm為video_mbuf結(jié)構(gòu)體變量的一個聲明,利用ioct1(fd,VIDIOCGMBUF,&grab_vm)便可獲得grab_vm的信息。 FrameBuffer的圖象顯示 當(dāng)Video4Linux使用mmap方式采集圖像時,他總是盡最大努力將圖像直接顯示在屏幕上,但并不一定能夠完成,因此一個完整的設(shè)備應(yīng)該具有圖像顯示的功能,一般來講,嵌入式Linux下顯示一幅圖像總共有以下幾種方法: (1)在利用Video4Linux采集圖像時,將采集到的圖象數(shù)據(jù)直接放到FrameBuffer的內(nèi)存映射區(qū)中,而Video4Linux也支持這種功能,利用VIDIOCSFBUF和VIDIOCGFBUF這兩個ioct1函數(shù),可設(shè)置和獲得struct video_buffer。但該方法并不是每個圖像采集設(shè)備都支持。 (2)進(jìn)圖像數(shù)據(jù)存成各種格式(例如bmp),在各種GUI軟件中,均會直接顯示不同格式的圖像的函數(shù),如MiniGui中的FillBoxWithBitmap函數(shù)。 (3)直接將圖像數(shù)據(jù)寫入FrameBuffer中。 在這里主要介紹第3種。FrameBuffer設(shè)備是運(yùn)行在Linux控制臺上的一個優(yōu)秀的圖形接口,他幾乎支持所有的硬件,提供了統(tǒng)一的API接口,很好地實(shí)現(xiàn)了硬件無關(guān)性,他可以直接操作顯存,而且還留有提供圖形加速功能的接口,運(yùn)行時不需要root權(quán)限;FrameBuffer的設(shè)備節(jié)點(diǎn)是/dev/fb*,用戶若要使用他,需要在編譯內(nèi)核時選中FrameBuffer,其簡單的使用程序如下: struct fb_var_screeninfo vinfo。struct fb
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1