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

正文內(nèi)容

視頻監(jiān)控系統(tǒng)研究與畢業(yè)設(shè)計(編輯修改稿)

2025-07-19 17:05 本頁面
 

【文章內(nèi)容簡介】 和視頻傳輸?shù)幕A(chǔ)。本監(jiān)控系統(tǒng)由多個功能模塊構(gòu)成,視頻服務(wù)器主要涉及到三部分功能,一部分是基于V4L2的圖像采集,一部分是建立嵌入式Web服務(wù)器,設(shè)計CGI程序,實(shí)現(xiàn)用戶遠(yuǎn)程通過Web頁面控制視頻采集傳輸?shù)墓δ?,另外部分是建立視頻數(shù)據(jù)庫。本章主要對Linux下采用V4L2標(biāo)準(zhǔn)的USB攝像頭驅(qū)動程序的圖像采集過程進(jìn)行介紹,同時建立視頻數(shù)據(jù)庫,以便瀏覽器端對圖像數(shù)據(jù)操作。3.1 基于V4L2的視頻采集模塊設(shè)計V4L(Video for Linux)是在linux內(nèi)核中關(guān)于視頻設(shè)備的API接口,涉及開關(guān)視頻設(shè)備、采集并處理視頻圖像信息。V4L2(Video for Linux Two)是V4L接口標(biāo)準(zhǔn)的改進(jìn)版本,修復(fù)了第一代的部分設(shè)計bug。,V4L2就被集成到了內(nèi)核里。V4L2是音頻、視頻和其他輸出設(shè)備的內(nèi)核接口。與V4L相比,它的擴(kuò)展性和靈活性都得到了極大的提高,并且支持的硬件設(shè)備也更多,但由于它對V4L做了徹底的改造,使得它與V4L并不兼容.USB攝像頭在Linux中屬于字符設(shè)備,成功加載了USB攝像頭驅(qū)動程序后,插入攝像頭就會生成設(shè)備文件“/dev/video()”。因此,在應(yīng)用程序中通過讀寫該文件取得攝像頭采集的圖像數(shù)據(jù)。對于USB口攝像頭,其驅(qū)動程序中需要提供基本的I/O操作接口函數(shù)open()、read()、write()、close()的實(shí)現(xiàn),對中斷的處理實(shí)現(xiàn),內(nèi)存映射功能以及對I/O通道的控制接口函數(shù)ioctl()的實(shí)現(xiàn)等,并把它們定義在struct file_operations中。這樣當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行諸如open()等系統(tǒng)調(diào)用操作時,Linux內(nèi)核將通過file operations結(jié)構(gòu)訪問驅(qū)動程序提供的函數(shù)。 V4L2視頻采集的數(shù)據(jù)結(jié)構(gòu)在Linux系統(tǒng)的/usr/include/linux/videodev2.h中定義了v412常用的數(shù)據(jù)結(jié)構(gòu):struct v4l2_requestbuffers reqbufs。 //向驅(qū)動申請幀緩沖的請求,里面包含申請的個數(shù)struct v4l2capability cap。 //這個設(shè)備的功能,比如是否是視頻輸入設(shè)備struct v4l2_input input; //視頻輸入struct v4l2_standard; //視頻的制式,比如PAL,NTSCstruct v4l2_format fmt: //幀的格式,比如寬度,高度等struct v412_buffer buf。 //代表驅(qū)動中的一幀v4l2_std_id stdid。 //視頻制式,例如:V4L2_STD_PAI_Bstruct v4l2_querytrl。 //查詢的控制struct v4l2_control control。 //具體控制的值 V4L2視頻采集的流程Linux下基于V4L2 :初始化攝像頭打開視頻設(shè)備開始讀設(shè)備信息讀取映射buffer信息建立內(nèi)存映開始一幀的圖像截取處理一幀圖像 編碼,拷貝到其他緩沖區(qū)等操作等待一幀結(jié)束是否結(jié)束視頻結(jié)束具體的視頻采集主要步驟為:1)打開視頻設(shè)備在Linux中,把視頻設(shè)備看作設(shè)備文件,即/dev,video0。通過調(diào)用open()函數(shù)來實(shí)現(xiàn),open()函數(shù)帶有三個參數(shù),第一個為設(shè)備文件名,第二個則是打開的類型。用非阻塞模式打開攝像頭設(shè)備:int cameraFd;cameraFd=open(“/dev/video0”,O_RDWR |O_NONBLOCK,O);如果用阻塞模式打開攝像頭設(shè)備,則:cameraFd=open(“/dev/video0”,O_RDWR,0);應(yīng)用程序能夠使用阻塞模式或非阻塞模式打開視頻設(shè)備,如果使用非阻塞模式調(diào)用視頻設(shè)備,即使尚未捕獲到信息,驅(qū)動依舊會把緩存(DQBUFF)里的東西返回給應(yīng)用程序。2)設(shè)定屬性及采集方式打開視頻設(shè)備后,可以設(shè)置該視頻設(shè)備的屬性,例如裁剪、縮放等。這一步是可選的。在Linux編程中,一般使用ioctl函數(shù)來對設(shè)備的I/O通道進(jìn)行管理:Extem int ioctl(int_fd,unsigned long int_requst,...)_THROW。_fd:設(shè)備的ID,例如剛才用open函數(shù)打開視頻通道后返回的camer Fd。 _request:具體的命令標(biāo)志符。在進(jìn)行V4L2開發(fā)中,一般會用到以下的命令標(biāo)志符:VIDIOC_REQBUFS:分配內(nèi)存VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的數(shù)據(jù)緩存轉(zhuǎn)換成物理地址VIDIOC_QUERYCAP:查詢驅(qū)動功能VIDIOC_ENUM_FMT:獲取當(dāng)前驅(qū)動支持的視頻格式VIDIOC_S_FMT:設(shè)置當(dāng)前驅(qū)動的頻捕獲格式VIDIOC_DQBUF:把數(shù)據(jù)放回緩存隊列VIDIOC_STREAMON:開始視頻顯示函數(shù)VIDIOC_STREAMOFF:結(jié)束視頻顯示函數(shù)VIDIOC_QUERYSTD:檢查當(dāng)前視頻設(shè)備支持的標(biāo)準(zhǔn),例如PAL或NTSC。這些IO調(diào)用,有些是必須的,有些是可選擇的。①查當(dāng)前視頻設(shè)備支持的標(biāo)準(zhǔn)在亞洲,一般使用PAL(720x576)制式的攝像頭,而歐洲一般使用NTSC(720x480),使用VIDIOC_QUERYSTD來檢測:v412_std_id std;do{ret=ioctl(fd,VIDl0C_QUERYSTD,amp。std);}wllile(ret==1amp。amp。errno==EAGAIN)。switch(std){case V4L2_STD_NYSC:case V4L2_STD_PAL:}②捕獲格式當(dāng)檢測完視頻設(shè)備支持的標(biāo)準(zhǔn)后,還需要設(shè)定視頻捕獲格式:struct v4l2_format fmt;memset(amp。fmt,0,sizeof(fmt));=V4L2_BUF_TYPE_VIDEO_CAPTURE;=720;=576;=V4L2_PIX_FMT_YUYV。=V4L2_FIELD_INTERLACED。if(ioctl(fd,VIDIOC_S_FMT,amp。fmt)==1){returnl;}v4l2_format結(jié)構(gòu)體定義如下:struct v4l2_format {enum v412_buf_type ; ∥數(shù)據(jù)流類型,必須永遠(yuǎn)是∥v4L2_BUF_VIDEO_CAPTURE union{struct V412_pix_format pix;struct V412_window win;struct V412_vbi_format vbi;_u8 raw_data[200]; }fmt。};struct v412_pix_format{_u32 width; //寬,必須是16的倍數(shù)_u32 height; //高,必須是16的倍數(shù)_u322 pixelformat;//視頻數(shù)據(jù)存儲類型,例如是YUV4:2:2還是I沁Benum v412_field field;_u32 bytesperline;_u32 sizeimage;enum v4l2_colorspace colorspace;_u32 priv;};③分配內(nèi)存視頻捕獲分配內(nèi)存:struct v412_requestbuffers req;if(ioctl(fd,VIDIOC_REQBUFS,amp。req)== 1){return 1。}v412_requestbuffers定義如下:struct V412_requestbuffers{_u32 count。 //緩存數(shù)量,也就是說在緩存隊列里保持多少張照片enum v412_buf_type type; //數(shù)據(jù)流類型,必須永遠(yuǎn)是//V4L2_BUF_TYPE_VIDEO_CAPTUREenum v412_memory memory; //V4L2_MEMORY_MMAP或//V4L2 MEMORY_USERPTR_u32 reserved[2];};④獲取并記錄緩存的物理空間使用VIDIOC_REQBUFS,下一步通過調(diào)用VIDIOC_QUERYBUF命令來獲取這些緩存的地址,然后使用mmap函數(shù)轉(zhuǎn)換成應(yīng)用程序中的絕對地址,最后把這段緩存放入緩存隊列:080000005080000000080000001080000002080000003080000004010000004010000003010000002010000001010000000010000005VIDIOC_QUERYBUFmmap內(nèi)核地址用戶地址⑤視頻采集方式操作系統(tǒng)一般把系統(tǒng)使用的內(nèi)存劃分成用戶空間和內(nèi)核空間,分別由應(yīng)用程序管理和操作系統(tǒng)管理。應(yīng)用程序可以直接訪問內(nèi)存的地址,而內(nèi)核空間存放的是供內(nèi)核訪問的代碼和數(shù)據(jù),用戶不能直接訪問。v412捕獲的數(shù)據(jù),最初是存放在內(nèi)核空間的,這意味著用戶不能直接訪問該段內(nèi)存,必須通過某些手段來轉(zhuǎn)換地址。Linux系統(tǒng)下有三種視頻采集方式:使用read、write方式,mmap內(nèi)存映射方式和用戶指針模式。read、write方式: 通過內(nèi)核緩沖區(qū)來讀取數(shù)據(jù),在用戶空間和內(nèi)核空間不斷拷貝數(shù)據(jù),占用了大量用戶內(nèi)存空間,效率不高。mmap內(nèi)存映射方式:mmap系統(tǒng)調(diào)用使得進(jìn)程之間通過映射同一文件實(shí)現(xiàn)內(nèi)存共享,訪問時只需要指針而不用調(diào)用文件操作函數(shù)。通過把設(shè)備文件映射到內(nèi)存中,加速了I/o訪問。這是一種有效的方式。上面的mmap函數(shù)就是使用這種方式。用戶指針模式:內(nèi)存片段由應(yīng)用程序自己分配。這點(diǎn)需要在v412_ requestbuffers里將memory字段設(shè)置成V4L2_MEMORY_USERPTR.因此,本文在程序?qū)崿F(xiàn)中采用了內(nèi)存映射方式截取視頻圖像樣,捕獲到的視頻數(shù)據(jù)被映射到內(nèi)存區(qū)域,該映射內(nèi)容區(qū)可讀寫并且可供不同進(jìn)程共享。要對視頻數(shù)據(jù)進(jìn)行壓縮等處理工作則可通過訪問內(nèi)存映射區(qū)域進(jìn)行。3)處理采集數(shù)據(jù)V4L2有一個數(shù)據(jù)緩存。數(shù)據(jù)緩存采用FIFO的方式,當(dāng)應(yīng)用程序調(diào)用緩存數(shù)據(jù)時,緩存隊列將最先采集到的視頻數(shù)據(jù)緩存送出,并重新采集一張視頻數(shù)據(jù)。這個過程需要用到兩個ioctl命令,VIDIOC_DQBUF和VIDIOC_QBUF:struct v412_buffer buf。memset(amp。buf,O,sizeof(buf));=V4L2_BUF_TYPE_VIDEO_CAPATURE;=V4L2_MEMORY_MMAP;=0://讀取緩存 if(ioctl(cameraFd,VIDIOC_dqbuf, amp。buf)== 1){return1;}//????視頻處理算法//重新放入緩存隊列if(ioctl(cameraFd,VIDIOC_QBUF,amp。buf)==1){returnl;}4)關(guān)閉視頻設(shè)備使用close函數(shù)關(guān)閉一個視頻設(shè)備:close(cameraFd);本課題的視頻采集圖像效果。3.1.3視頻數(shù)據(jù)的存儲由于保存文件是保存在USB硬盤上,也就是需要不停的讀寫I/O設(shè)備,這樣的操作需要耗費(fèi)大量的時間和資源,因此保存視頻文件模塊也是利用一個單獨(dú)線程來實(shí)現(xiàn)以提高程序的執(zhí)行效率。對于用戶而言,存儲的圖像能達(dá)到記錄的目的即可,對連續(xù)性的要求并不高,所以本系統(tǒng)以約10幀/秒的速度進(jìn)行存儲,以此達(dá)到節(jié)省存儲空間的目的。存儲速率的控制是通過定時器來完成的。同樣,此功能模塊也有自己的循環(huán)緩沖區(qū)存放壓縮后的視頻數(shù)據(jù),該線程不斷從該緩沖區(qū)讀取JPEG數(shù)據(jù),通過調(diào)用avilib庫的相關(guān)函數(shù)把這些視頻數(shù)據(jù)保存為avi格式的文件。對于“avi格式文件,目前大多數(shù)播放器都能播放該格式的視頻文件。3.2視頻編碼通過USB攝像頭獲取的視頻圖像數(shù)據(jù)量較大,而網(wǎng)絡(luò)帶寬有限,不適合網(wǎng)絡(luò)實(shí)時傳輸,為了使視頻圖像在現(xiàn)有的網(wǎng)絡(luò)上有較高的傳輸速率和較好的視頻質(zhì)量和有效的存儲視頻數(shù)據(jù),需要將原始的視頻圖像進(jìn)行壓縮編碼。3.2.1視頻編碼技術(shù)的選擇傳統(tǒng)的視頻壓縮編碼都是以香農(nóng)信息論為基礎(chǔ),用統(tǒng)計概率模型來描述信源,編碼實(shí)體是像素或像素塊。這種基于數(shù)理統(tǒng)計、旨在消除視頻數(shù)據(jù)相關(guān)冗余的編碼技術(shù)被稱為第一代視頻編碼技術(shù),JPEG、MPEG。第一代視頻編碼技術(shù)沒有考慮接受者特性、視頻信息的重要程度和具體含義,只是以去除數(shù)據(jù)的冗余為出發(fā)點(diǎn),是一種較低層次的編碼技術(shù)。由此,出現(xiàn)了基于內(nèi)容的第二代視頻編碼技術(shù),它是以去除視頻內(nèi)容的冗余為出發(fā)點(diǎn),在視頻編碼時充分考慮了人眼的視覺特性影像。目前監(jiān)控中主要采用MJPEG、MPEG1/MPEG4(SP/ASP)、。用戶關(guān)心的主要要素有:清晰度、存儲量(帶寬)、穩(wěn)定性和價格。1)MJPEGMJPEG(Motion JPEG)壓縮技術(shù),主要是基于靜態(tài)視頻壓縮發(fā)展起來的技術(shù),它的主要特點(diǎn)是基本不考慮視頻流中不同幀之間的變化,只單獨(dú)對某一幀進(jìn)行壓縮。MJPEG壓縮技術(shù)可以獲取清晰度很高的視頻圖像,可以動態(tài)調(diào)整幀率、分辨率。但由于沒有考慮到幀間變化,造成大量冗余信息被重復(fù)存儲,因此單幀視頻的占用空間較大,目前流行的MJPEG技術(shù)最好的也只能做到3K字節(jié)/幀,通常要8~20K。2)MPEG1/2MPEGl標(biāo)準(zhǔn)主要針對SIF標(biāo)準(zhǔn)分辨率(NTSC制為352x240;PAL制為352x288)的圖像進(jìn)行壓縮.壓縮位率主要目標(biāo)為1.5Mb/S.較MJPEG技術(shù),MPEGI在實(shí)時壓縮、每幀數(shù)據(jù)量、處理速度上有顯著的提高。但MPEGl也有較多不利地方:存儲容量還是過大、清晰度不夠高和網(wǎng)絡(luò)傳輸困難。MPEG2在MPEG.1基礎(chǔ)上進(jìn)行了擴(kuò)充和提升,和MPEG.1向下兼容,主要針
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1