張修軍,劉惠東,李 杰
(成都大學(xué) 信息科學(xué)與工程學(xué)院,四川 成都 610106)
基于Intel Edison的嵌入式實(shí)時(shí)圖像采集傳輸與錄制系統(tǒng)設(shè)計(jì)
張修軍,劉惠東,李 杰
(成都大學(xué) 信息科學(xué)與工程學(xué)院,四川 成都 610106)
基于Yocto Linux的Intel Edison嵌入式開發(fā)工具,設(shè)計(jì)并開發(fā)了一套實(shí)時(shí)圖像采集傳輸及錄制系統(tǒng).通過(guò)USB攝像頭對(duì)圖像進(jìn)行采集,并將圖像數(shù)據(jù)通過(guò)視頻服務(wù)器MJPG-Streamer傳輸?shù)酵獠恳苿?dòng)設(shè)備上,同時(shí)通過(guò)Intel Edison開發(fā)工具調(diào)用OpenCV圖像庫(kù)對(duì)圖像數(shù)據(jù)進(jìn)行處理及保存.測(cè)試結(jié)果表明,系統(tǒng)具有良好的實(shí)時(shí)性、高分辨率、低成本及易于拓展升級(jí)等優(yōu)點(diǎn).
嵌入式;實(shí)時(shí);圖像采集;傳輸;錄制;Intel Edison;OpenCV;MJPG-Streamer;Video4Linux
目前,傳統(tǒng)的視覺(jué)圖像采集大多是基于“攝像頭—圖像采集卡—通用PC機(jī)"三者為一體的系統(tǒng),但這種視覺(jué)系統(tǒng)不能滿足實(shí)際應(yīng)用對(duì)圖像實(shí)時(shí)處理的需求,而基于單片機(jī)的數(shù)據(jù)采集系統(tǒng),雖然具有高可靠性及集成化等優(yōu)點(diǎn),但是在實(shí)時(shí)性、遠(yuǎn)程監(jiān)控及人機(jī)接口等方面存在一些不足[1].鑒于嵌入式系統(tǒng)具有成本低、高靈活性及功耗低等諸多優(yōu)點(diǎn)[2],本研究采用Yocto Linux的Intel Edison嵌入式開發(fā)板作為開發(fā)環(huán)境,同時(shí)集成使用TBB線程構(gòu)建模塊以最大限度地利用CPU并行運(yùn)行能力,其具備的快速原型能力可加快開發(fā)過(guò)程.通過(guò)USB攝像頭對(duì)圖像進(jìn)行采集,將圖像數(shù)據(jù)通過(guò)視頻服務(wù)器MJPG-Streamer傳輸?shù)酵庥迷O(shè)備,并調(diào)用OpenCV圖像庫(kù)實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的保存以及后期處理.測(cè)試結(jié)果表明,本系統(tǒng)具有良好的實(shí)時(shí)性、高分辨率及易于拓展升級(jí)的優(yōu)點(diǎn),可用于遠(yuǎn)程監(jiān)控、公共場(chǎng)所安全管理及智能家居等相關(guān)領(lǐng)域.
本研究的系統(tǒng)硬件平臺(tái)采用Intel公司研發(fā)的AtomZ34XX系列處理器,并整合了100 MHz Quark處理器,其自帶1 GB LPDDR3 POP內(nèi)存且使用4 GB eMMC作為FLASH存儲(chǔ),提供40個(gè)GPIO接口,可適應(yīng)3.3~4.5 V輸入電壓,輸出則支持3.3 V/100 mA、1.8 V/100 mA.系統(tǒng)平臺(tái)硬件的功能框圖如圖1所示.本系統(tǒng)硬件平臺(tái)在一般情況下電流消耗不超過(guò)200 mA,而在利用Wi-Fi傳輸數(shù)據(jù)時(shí),峰值電流僅達(dá)600 mA,具有低功耗的特點(diǎn).同時(shí),平臺(tái)還配置了Broadcom BCM43340 Wi-Fi支持,外接u.FL射頻同軸天線以增強(qiáng)無(wú)線信號(hào)的接收發(fā)送能力,引出1個(gè)USB HOST接口用于連接USB攝像頭,采用1 080 P高清USB攝像頭,板載64 GB MicroSD卡.
圖1系統(tǒng)硬件平臺(tái)功能框圖
本系統(tǒng)通過(guò)USB高清攝像頭獲取圖像數(shù)據(jù)并傳送至Edison處理器,利用MJPG-Streamer實(shí)現(xiàn)遠(yuǎn)程視頻監(jiān)控,并通過(guò)OpenCV錄制為AVI格式的視頻文件.系統(tǒng)的圖像采集傳輸與錄制整體結(jié)構(gòu)框圖如圖2所示.
圖2圖像采集錄制系統(tǒng)結(jié)構(gòu)框圖
Yocto Project是一個(gè)開源的協(xié)作軟件,提供模板、工具和方法幫助創(chuàng)建定制的 Linux 系統(tǒng)和嵌入式產(chǎn)品,而無(wú)需關(guān)心硬件體系.在通過(guò)常用方式將Linux裝載在芯片eMMC上并成功啟動(dòng)后,為了能給圖像數(shù)據(jù)提供大量的存儲(chǔ)空間,本研究利用64 GB的SD卡作為系統(tǒng)文件存放媒介.首先使用“mkfs.ext4”命令將SD卡分區(qū)格式化為ext4格式的文件系統(tǒng),并將Yocto Linux系統(tǒng)鏡像目錄中的Roofts內(nèi)容復(fù)制到SD中,將SD卡與測(cè)試系統(tǒng)連接,通過(guò)調(diào)試串口登錄嵌入式Linux系統(tǒng)且執(zhí)行如下2條命令,
“fw-setenvmmc-bootarges'setenvbootargsroot=${myrootfs}rootdelay=3 rootfstype=ext4${bootarges-console}${bootargs-debug} system.unit=${bootargs-target}.targethardware-id={hardware-id} g-multi.iSerialNumber=${serial#} g-multi.dev-addr=${usb0addr}'”
“fwsetenvmyrootfs '/dev/mmcblk1p1”
則可以通過(guò)U-boot設(shè)置從SD卡的第1個(gè)分區(qū)加載Linux中的roofts系統(tǒng).在Yocto Project中,內(nèi)核配置操作與常見Linux配置稍有不同,通過(guò)“bitbake virtual/kernel-c menuconfig”調(diào)用內(nèi)核配置菜單,配置Media USB Adapters目錄下的攝像頭驅(qū)動(dòng)支持,并通過(guò)“bitbakeedison-image”重新編譯整個(gè)系統(tǒng).將攝像頭連接至Yocto系統(tǒng)中,如果/dev目錄下出現(xiàn)video等設(shè)備文件,則代表攝像頭已被內(nèi)核所識(shí)別.
Linux系統(tǒng)中的視頻子系統(tǒng)Video4Linux為視頻應(yīng)用程序提供了統(tǒng)一的API函數(shù).視頻應(yīng)用程序通過(guò)標(biāo)準(zhǔn)的系統(tǒng)調(diào)用即可操縱各種不同的視頻捕獲設(shè)備[3],通過(guò)這些API函數(shù)讀取攝像頭數(shù)據(jù),并利用mmap()內(nèi)存映射方式進(jìn)行單幀圖像采集,具體過(guò)程如下:
1)通過(guò)v4l-open()函數(shù)打開視頻.
int v4l-open(char *dev,v4l-device *vd)
{
if(!dev)
dev=″dev/video0″
if((vd->fd=open(dev,O-RDWR))<0)
{
perror(″camera open:″);
return -1;
}
if(v4l-get-capability(vd))
return -1;
if(v41-get-picture(vd))
return -1;
return 0;
}
2)開啟設(shè)備并成功取得設(shè)備信息后,利用v4l-get-capability()函數(shù)調(diào)用ioctl()取得設(shè)備文件相關(guān)信息,并且將信息放入video-capability結(jié)構(gòu)體中,通過(guò)v4l-get-capability()函數(shù)讀取這些信息.
int v4l-get-capability(v4l-device *vd)
{
if(ioctl(vd->fd,VIDEOCGCAP,&(vd->capability))<0)
{
perror(″camera-get-capability:″);
return -1;
}
return 0;
}
3)通過(guò)v4l-get-picture()獲取并改變分量值,利用ioctl()函數(shù)獲取圖像緩沖區(qū)的幀數(shù)據(jù)并將其USB攝像頭對(duì)應(yīng)的設(shè)備文件映射至內(nèi)存,實(shí)現(xiàn)數(shù)據(jù)共享.
MJPG-Streamer是一種輕量級(jí)的視頻服務(wù)器軟件,可以從單一輸入組件獲取圖像并傳輸?shù)蕉鄠€(gè)輸出組件的命令行應(yīng)用程序[4],其是基于V4L2框架所設(shè)計(jì),能夠?qū)⒆x取攝像頭圖像數(shù)據(jù)并壓縮為JPEG格式通過(guò)TCP/IP網(wǎng)絡(luò)傳輸并顯示,并且能夠利用Webcams的硬件壓縮功能來(lái)分擔(dān)本屬于CPU的視頻幀壓縮任務(wù)[4].該軟件采用了模塊化的設(shè)計(jì)方法,各功能模塊都放在plugins文件夾下[5].用戶可以根據(jù)自己的設(shè)計(jì)需求,自由選擇需要的模塊.這種模塊化的設(shè)計(jì)簡(jiǎn)化了視頻服務(wù)器軟件的移植.
本研究主要應(yīng)用其input-uvc及output-http組件獲取并輸出攝像頭數(shù)據(jù),通過(guò)在Shell程序中添加如下語(yǔ)句啟動(dòng)MJPG-Streamer.
“cd /home/mjpg-streamer”
“./mjpg-streamer -i ″./input-uvc.so -d /dev/video0 -r1280x720 -f 25″ -o″./output-http.so -p 8888 -w ./www″”
并將SH文件添加至系統(tǒng)啟動(dòng)文件目錄即可實(shí)現(xiàn)MJPG-Streamer的開機(jī)自啟動(dòng).
OpenCV是由Intel公司開發(fā)且在近年來(lái)迅速普及的計(jì)算機(jī)視覺(jué)研究工具,為一種跨平臺(tái)的計(jì)算機(jī)視覺(jué)庫(kù).在其基礎(chǔ)上編寫圖像處理代碼,效率可得到有效提高[6-7].為了充分利用本平臺(tái)多核處理器的并行運(yùn)算能力,本研究利用Intel的TBB庫(kù)將OpenCV交叉編譯成動(dòng)態(tài)鏈接庫(kù)并將其部署到Edison系統(tǒng)當(dāng)中使用.通過(guò)在開機(jī)目錄中創(chuàng)建deploy文件目錄并將TBB軟件包文件中相關(guān)的所有頭文件及二進(jìn)制庫(kù)文件復(fù)制到此目錄,并將SDK安裝目錄下的環(huán)境變量配置腳本的第10行修改為,
“export CC=” i589-poky-linux-gcc””
第11行修改為,
“export CXX=” i586-poky-linux-g++"”
獲取OpenCV源代碼并解壓后,在當(dāng)前目錄中創(chuàng)建build目錄并進(jìn)入,通過(guò)執(zhí)行cmake命令開始進(jìn)行編譯前的配置準(zhǔn)備,
“cmake -D WITH-TBB=ON -DWITH-IPP=OFF -D WITH-CUDA=OFF -D OPENCL=OFF -D BUILD-JPEG=ON -D BUILD-SHARED-LIBS=ON -D BUILD-ZLIB=ON -D CMAKE-INSTALL-PREFIX=~/src/deploy -D TBB-INCLUDE-DIRS=/src/edison/include -D TBB-LIB-DIR=/src/deploy/lib…”
命令cmake完成編譯配置后,通過(guò)make命令進(jìn)行編譯,并通過(guò)使用make install命令將其復(fù)制到之前建立的deploy目錄中,最后通過(guò)“scp”命令將所有的OpenCV動(dòng)態(tài)鏈接庫(kù)文件部署到Edison系統(tǒng)中.在系統(tǒng)調(diào)試過(guò)程中可通過(guò)在PC機(jī)上調(diào)用cvCaptureFromFile函數(shù)來(lái)獲取MJPG-Streamer傳輸?shù)囊曨l流數(shù)據(jù),充分利用了交叉編譯的優(yōu)勢(shì).
程序示例如下:
#include
#include
#include ″OpenCV2/OpenCV.hpp″
#include ″highgui.h″
using namespace std;
int main()
{
CvCapture* capture = cvCaptureFromFile(″http://192.168.1.
101:8080/?action=stream?dummy=param.mjpg″);
//此處IP地址可通過(guò)ifconfig命令獲得
IplImage*Image;
cvNamedWindow(″Image″);
while(Image=cvQueryFrame(capture))
{
cvShowImage(″Image″,Image);
cvWaitKey(33);
}
cvReleaseCapture(&capture);
cvDestroyAllWindows();
return 0;
}
本系統(tǒng)在上電啟動(dòng)后,將自動(dòng)通過(guò)Wi-Fi連接到無(wú)線路由器.同時(shí),通過(guò)將USB攝像頭插入系統(tǒng)板(見圖3),系統(tǒng)將檢測(cè)到攝像頭的接入并自動(dòng)啟動(dòng)MJPG-Streamer客戶端程序,并通過(guò)配置的路由器將服務(wù)器映射到外網(wǎng)端口.此時(shí)可通過(guò)智能設(shè)備瀏覽器輸入192.168.0.101:8080進(jìn)行訪問(wèn),視頻展示效果如圖4所示.同時(shí),使用者還可以通過(guò)Winscp、filezilla等軟件查看錄制保存在SD卡上的AVI文件.測(cè)試結(jié)果表明,本系統(tǒng)各項(xiàng)功能運(yùn)行流暢.
圖3 USB攝像頭連接圖
圖4智能設(shè)備訪問(wèn)視頻示意圖
本研究基于Intel Edison利用MJPG-Streamer獲取并傳輸攝像頭數(shù)據(jù),同時(shí)通過(guò)由TBB并行開發(fā)庫(kù)編譯的OpenCV庫(kù)保存為AVI格式視頻.Edison配備的Atom+Quark的性能遠(yuǎn)遠(yuǎn)超過(guò)常見的MCU,其強(qiáng)大的運(yùn)算能力保證了本系統(tǒng)的穩(wěn)定性與高分辨率.相比常見的基于ARM系列的圖像傳輸系統(tǒng),本系統(tǒng)的功能更加強(qiáng)大.盡管本系統(tǒng)的成本有所增加,但卻可以快速驗(yàn)證系統(tǒng)原型,極大縮短了開發(fā)時(shí)間.同時(shí),本系統(tǒng)的設(shè)計(jì)思路也適用于一些與實(shí)時(shí)圖像處理相關(guān)的高性能產(chǎn)品的開發(fā).
[1]鄭凱華,章旭東,俞立,等.基于S3C2440的圖像采集與顯示系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(8):225-228.
[2]彭侃.基于ARM9的嵌入式軟件平臺(tái)的研究與實(shí)現(xiàn)[D].上海:東華大學(xué),2008.
[3]張永強(qiáng),趙永勇,李崇德.嵌入式遠(yuǎn)程視頻采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2006,29(4):75-77.
[4]陳書益,黃永慧.開源視頻服務(wù)器軟件MJPG-Streamer的研究和應(yīng)用[J].電子設(shè)計(jì)工程,2012,20(5):172-176.
[5]陳恒鑫,林威,張欽宇.基于MJPG-Streamer的移動(dòng)視頻監(jiān)控系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2014,22(11):3597-3599.
[6]梁艷.基于OpenCV的ARM嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)[J].微型機(jī)與應(yīng)用,2013,32(9):29-31.
[7]蘇慧娟,于正林,張桂林.基于OpenCV的圖像處理[J].科技資訊,2014,12(8):18-19.
DesignofEmbeddedReal-timeImageCollectionTransmissionandRecordingSystemBasedonIntelEdison
ZHANGXiujun,LIUHuidong,LIJie
(School of Information Science and Engineering, Chengdu University, Chengdu 610106, China)
The embedded real-time image collection transmission and recording system based on Intel Edison and Yocto Linux is designed and implemented in this paper.The image data is collected by USB camera and transmitted through the video server MJPG-Streamer to the external mobile device.Through the OpenCV image library called by Intel Edison development board,the image data is processed and saved.The testing results show that this system has the advantages of being real-time,high-resolution,low cost,and being easy to expand and upgrade.
embedded technology;real-time;image collection;transmission;recording;Intel Edison;OpenCV;MJPG-Streamer;Video4Linux
TP391.41;TP274.2
A
1004-5422(2017)04-0390-04
2017-09-25.
張修軍(1973 — ),男,碩士,副教授,從事計(jì)算機(jī)軟件工程研究.