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

正文內(nèi)容

樓層智能視頻監(jiān)控系統(tǒng)-閱讀頁

2024-12-23 20:08本頁面
  

【正文】 的方法給驅(qū)動(dòng)程序的開發(fā)提供了清晰的模型和一致的就接口。 V4L 在給編寫者帶來方便的同時(shí),還使用分層的方法給驅(qū)動(dòng)程序的開發(fā)提 第 25 頁 西華大學(xué)畢業(yè)設(shè)計(jì)說明書 供了清晰的模型和 一致的接口,而在驅(qū)動(dòng)程序下,這些接口都能很好的實(shí)現(xiàn) ,因此 在把 視頻設(shè)備驅(qū)動(dòng) 應(yīng)用在上層時(shí),應(yīng)具備透明性 , 這樣就要求在組織代碼時(shí)必學(xué) 按照 V4L 的標(biāo)準(zhǔn) 來進(jìn)行 ,簡(jiǎn)而言之,必須符合 V4L 標(biāo)準(zhǔn) 下進(jìn)行視頻設(shè)備驅(qū)動(dòng)的編寫 。在 /dev 目錄下,名字為 video0—— video63 的被認(rèn)為是視頻設(shè)備。其次, V4L 規(guī)定了查詢和設(shè)置設(shè)備參數(shù)的標(biāo)準(zhǔn)接口,其實(shí)是一些常量以及對(duì)應(yīng)的結(jié)構(gòu)體。本文主要針對(duì) USB 攝像頭設(shè)備文件 /dev/video0,進(jìn)行視頻圖像采集方面的程序設(shè)計(jì)。 VIDIOCGWIN struct video_window 獲取當(dāng)前設(shè)備圖像大小信 息,如當(dāng)前分辨率等。 VIDIOCSCHAN struct video_channel 設(shè)置當(dāng)前信道號(hào) VIDIOCGPICT struct video_picture 獲取當(dāng)前圖片信息,如圖片 亮度,圖片格式等。 第 26 頁 西華大學(xué)畢業(yè)設(shè)計(jì)說明書 要實(shí)現(xiàn)視頻采集,首先完成 v41_struct 數(shù)據(jù)結(jié)構(gòu)的定義,如設(shè)備基本信息,圖像屬性,各個(gè)信號(hào)源屬性等。 ( 1) video_ capability:包含設(shè)備的基本信息,如設(shè)備名稱、支持的最大最小分辨率、信號(hào)源信息、信道數(shù)等。 brightness 0~65535 //亮度 hue //灰度 colour //顏色 contrast //對(duì)比度 whiteness //白平衡 depth // 8 16 24 32 palette // VIDEO_PALETTE_YUV420P ( 3) video_channel:各個(gè)信號(hào)源的屬性,如信號(hào)源編號(hào),類型等。 x // X windows 中的坐標(biāo) y // Y windows 中的坐標(biāo) width //捕獲圖像的寬度 height //捕獲圖像的高度 flags //附加的捕獲標(biāo)志 clips // A list of clipping rectangles ( 5) video_mbuf:利用 mmap 進(jìn)行映射的幀的信息 size //每幀大小 frames //最多支持的幀數(shù),這個(gè)值是可以采用多緩沖的依據(jù)。 基于 V4L 的視頻數(shù)據(jù)采集的流程如下: 打開視頻設(shè)備; 讀取設(shè)備信息;更改設(shè)備當(dāng)前設(shè)置; 進(jìn)行視頻采集,有兩種方法:內(nèi)存映射和直接從設(shè)備讀取。 采集流程圖如圖 程 序 開 始打 開 視 頻 設(shè) 備是 否 打 開 成 功獲 取 設(shè) 備 相 關(guān)信 息是 否 獲 取 成 功輸 出 顯 示 修 改信 息是 否 修 改 成 功設(shè) 置 成 功采 集 圖 像是 否 抓 取 成 功幀 計(jì) 數(shù) 器 數(shù) > 0等 待 采 集 完 成抓 取 下 一 幀 圖像是 否 抓 取 成 功H . 2 6 4 壓 縮 編 碼處 理關(guān) 閉 視 頻 設(shè) 備程 序 結(jié) 束NYNYNYNNYYNY 圖 程序流程圖 USB 攝像頭在 Linux 中的設(shè)備文件名為“ /dev/video0”,視頻采集程序的編 第 28 頁 西華大學(xué)畢業(yè)設(shè)計(jì)說明書 寫便是針對(duì)此設(shè)備名進(jìn)行。如果調(diào)用成功,返回設(shè)備文件描述符 dev_fp;若打開失敗則返回 1。 ( 2)讀取設(shè)備的基本信息 調(diào)用 ioctl(cam_fp,VIDIOCGCAP,amp。 ( 3)讀取并設(shè)定圖像信息 調(diào)用 ioctl(cam_fp,VIDIOCGPICT,amp。如亮度 brightness,對(duì)比度 contrast,景深 depth 及調(diào)色板 palette 等。在具體情況下,可以根據(jù)實(shí)際要求對(duì)圖像信息進(jìn)行必要的重新設(shè)置。vdpict)函數(shù)進(jìn)行參數(shù)的重新設(shè)置,這里需要注意的是重新設(shè)置后切不可再次調(diào)用ioctl(cam_fp,VIDIOCGPICT,amp。 ( 4)讀取并設(shè)定 channel 信息 調(diào)用 ioctl(cam_fp,VIDIOCGCHAN,amp。如果是多通道的視頻采集卡(這可以通過讀取 vd 看出),就必須設(shè)定是通過哪個(gè)信道來采集視頻。(vdchannel))函數(shù)來實(shí)現(xiàn)。 read()通過內(nèi)核緩沖區(qū)來讀取數(shù)據(jù)。下面對(duì)比介紹這兩種方法。直接讀取視頻數(shù)據(jù)就是通過系統(tǒng)調(diào)用 read()函數(shù)來實(shí)現(xiàn)。函數(shù)原型為 read(fd,(void*) pFramebuffer, (size t)framesizeIn)。對(duì)于攝像頭設(shè)備的讀取,需要先分配內(nèi)存空間,用來存儲(chǔ)從攝像頭 讀取過來的視頻數(shù)據(jù),然后直接調(diào)用 read()函數(shù)讀取視頻數(shù)據(jù),返回值為實(shí)際讀取的視頻幀的大小。 mmap 系統(tǒng)調(diào)用使得進(jìn)程之間通過映射同一個(gè)普通文件實(shí)現(xiàn)共享內(nèi)存。 首先,使用 ioctl 系統(tǒng)調(diào)用的 VIDIOCSFBUF 命令獲得攝像頭存儲(chǔ)緩沖區(qū)的幀信息,之后初始化 video_mbuf,并修改 video_mmap 中的設(shè)置,重新設(shè)置圖像信息,如幀的垂直及水平分辨率、調(diào)色板等。(vdvideo_mbuf),0, sizeof (vdvideo_mbuf)來清零緩沖區(qū)。 mmap()成功調(diào)用后返回系統(tǒng)實(shí)際分配的起始地址。vdv_mmap)),若函數(shù)成功調(diào)用,返回 0。vd)來判斷圖像截取是否己經(jīng)完畢,若該函數(shù)調(diào)用成功,則表明一幀圖像的截取已完成,便開始下一幀圖像數(shù)據(jù)的截取,并調(diào)整截取的幀號(hào)和幀的地址。但對(duì)于視頻,它屬于連續(xù)幀的采集,由讀取的 vd = 2可以知道內(nèi)存映射時(shí)最多支持兩幀,因此定義 int framestat[2],表示幀的狀態(tài),用 frame=0 或者 1 表示當(dāng)前為哪一幀,通過改變framestat[frame]和 frame 的值來進(jìn)行雙緩沖,即采集一幀時(shí)處理另一幀,同時(shí) 第 30 頁 西華大學(xué)畢業(yè)設(shè)計(jì)說明書 加一個(gè)外循環(huán)達(dá)到連續(xù)多幀的采集,每幀的地址都是通過 cam_mmap 加上偏移地址 vd[frame]得到。 抓取圖像的子函數(shù)為: if ((ret =ioctl(cam_fp,VIDIOCMCAPTURE,amp。 goto err。 //截取成功,設(shè)置幀的狀 態(tài) 進(jìn)行同步處理,即等待一幀圖像采集完成的子函數(shù): if(ioctl(cam_fp, VIDIOCSYNC, amp。 goto err } framestate[frame]=0。 frame=frame^ 1; //幀號(hào)的調(diào)整,因?yàn)樽疃嘀С謨蓭? address=cam_mmap + vd[frame]); //幀的地址 時(shí)間檢測(cè)函數(shù)的返回值就是程序執(zhí)行到該函數(shù)時(shí)的時(shí)刻點(diǎn),在要檢測(cè)函數(shù)的開始和結(jié)束處分別放上時(shí)間函數(shù),通過做差值即可得出待測(cè)程序的執(zhí)行時(shí)間。 gettimeofday (amp。 //gettimeofday()會(huì)把當(dāng)前的時(shí)間由tod所指 //的結(jié)構(gòu)回,時(shí)區(qū)的信息則放到 NULL所指的結(jié)構(gòu)體 return ((double) * + (double) / )。 printf(%f\n,ms_time1)。以在 PC 機(jī)上的實(shí)驗(yàn)為例,本人在視頻采集程序中加入時(shí)間監(jiān)測(cè)函數(shù),發(fā)現(xiàn)采集一幀圖像要花75ms 左右的時(shí)間,但執(zhí)行同步等待的函數(shù)就要花費(fèi) 65ms~70ms 的時(shí)間,因此想到采用雙緩沖進(jìn)行視頻采集,即在循環(huán)外就先采集一幀,進(jìn)入循環(huán)采集過程中時(shí)先同步等待該幀采集完,然后采集下一幀,在等待當(dāng)前這一幀采集完的同時(shí)來處理上一幀。最后實(shí)驗(yàn)發(fā)現(xiàn)該雙緩沖能大大減少程序運(yùn)行時(shí)間,為壓縮模塊提供了恒定了視頻流。本文采用模塊化的測(cè)試方法,把采集的視頻數(shù)據(jù)存在文件“ ”中,這個(gè)視頻流原始數(shù)據(jù)可用軟件 Yuv viewer 播放。這里可用開源的 vidcat 程序來判斷硬件是否搭建好,即用命令 vidcat – d /dev/video0 – p y 。一秒鐘傳輸?shù)臄?shù)據(jù)量就是 460800 15=,可見數(shù)據(jù)量非常大。這就需要在 數(shù)據(jù)傳輸之前進(jìn)行壓縮編碼以減少數(shù)據(jù)量。 MFC 模塊具有高性能的視頻編解碼功能,支持 MPEG 、 的編解 碼 ,并支持 VC1 解碼,性能可以達(dá)到全雙工 30fps640 480 同時(shí)編解碼和半雙工 30fps720 480或 25fps720 576 編解碼。 第 33 頁 西華大學(xué)畢業(yè)設(shè)計(jì)說明書 MFC 應(yīng)用程序的流程圖見圖 所示: 程 序 開 始打 開 M F C 設(shè) 備是 否 打 開 成 功設(shè) 定 編 碼 參 數(shù)接 收 編 碼 數(shù) 據(jù)編 碼錯(cuò) 誤 處 理Y程 序 結(jié) 束NM F C 編 碼 信 息 初 始 化是 否 成 功后 續(xù) 處 理 ( 傳 輸 )是 否 打 開 成 功重 設(shè) 配 置 參 數(shù)NYNY 圖 MFC 應(yīng)用程序流程圖 MFC 應(yīng)用程序中用到的主要結(jié)構(gòu)體有以下幾個(gè): typedef struct { int ret_code。 // [IN] width of YUV420 frame to be encoded int in_height。 // [IN] Encoding parameter: Bitrate (kbps) int in_gopNum。 // [IN] Encoding parameter: Frame rate 第 34 頁 西華大學(xué)畢業(yè)設(shè)計(jì)說明書 (Res) int in_frameRateDiv。 typedef struct { int ret_code。 // [OUT] Length of Encoded video stream int out_header_size。 typedef struct { int ret_code。 // [IN] User data for translating Kernelmode address to Usermode address int in_usr_data2。 // [OUT] Buffer address int out_buf_size。 MFC 應(yīng)用程序中包括以下幾個(gè)主要步驟: 設(shè)備初始化 handle = SsbSipH264EncodeInit(width, height, frame_rate, bitrate, gop_num);該初始化函數(shù)完成了以下任務(wù): ① 打開 MFC設(shè)備 hOpen = open(MFC_DEV_NAME, O_RDWR|O_NDELAY); ② Mapping the MFC Input/Output Buffer,即采用內(nèi)存映射的方式進(jìn)行視頻流的輸入輸出。 frame_rate = atoi(argv[3]); bitrate = atoi(argv[4]); gop_num = atoi(argv[5])。 slices[0] = 1。 // count of slices SsbSipH264EncodeSetConfig(handle, 第 35 頁 西華大學(xué)畢業(yè)設(shè)計(jì)說明書 264_ENC_SETCONF_NUM_SLICES, slices)。 ioctl(pCTXhOpen, IOCTL_MFC_H264_ENC_INIT, amp。首先要得到輸入緩沖區(qū)的地址,然后把原始的 YUV 數(shù)據(jù)復(fù)制到 MFC 輸入緩沖區(qū)內(nèi)。mfc_args)得到幀緩沖區(qū)的地址,然后進(jìn)行數(shù)據(jù)復(fù)制 memcpy(p_inbuf, cam_mmap + [!frame], frame_size); ③ 編碼幀緩沖區(qū)中的視頻流。mfc_args); 得到編碼輸出緩沖區(qū)的地址,為后續(xù)研究提供已編碼好的 視頻流。size);里面主要通過命令 ioctl(pCTXhOpen, IOCTL_MFC_GET_LINE_BUF_ADDR, amp。 第 31 頁 西華大學(xué)畢業(yè)設(shè)計(jì) 說明書 7 總結(jié)與體會(huì) 伴隨 著計(jì)算機(jī)技術(shù)、多媒體技術(shù)及網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,基于嵌入式的視頻監(jiān)控技術(shù)必然走向數(shù)字化、網(wǎng)絡(luò)化 、智能化 ,并且視頻監(jiān)控將逐步走入每一個(gè)人的生活,發(fā)揮比以往更重要的作用。眾所周知,視頻數(shù)據(jù)的壓縮永遠(yuǎn)是無線視頻監(jiān)控領(lǐng)域的核心問題之一。而直到 的問世,視頻編碼技術(shù)才終顯成熟。采用本系統(tǒng)進(jìn)行視頻數(shù)據(jù)采集壓縮,圖像連續(xù)性好。 在經(jīng)過對(duì)整個(gè)系統(tǒng)的方案論證后, 本 課題 主要完成了以下工作: ( 1) 熟悉 Linux 系統(tǒng)下內(nèi)核源碼以及視頻編碼驅(qū)動(dòng),這些雖然都是 Linux 自帶,但由于在以前從沒有接觸過,在了解起來還是有一定的難度。 ( 2) 根據(jù) Linux 自帶的 V4L 完成了嵌入式的視頻采
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1