基于Intel Edison的嵌入式实时图像采集传输与录制系统设计

2018-01-05 00:29张修军刘惠东
关键词:嵌入式摄像头传输

张修军,刘惠东,李 杰

(成都大学 信息科学与工程学院,四川 成都 610106)

基于Intel Edison的嵌入式实时图像采集传输与录制系统设计

张修军,刘惠东,李 杰

(成都大学 信息科学与工程学院,四川 成都 610106)

基于Yocto Linux的Intel Edison嵌入式开发工具,设计并开发了一套实时图像采集传输及录制系统.通过USB摄像头对图像进行采集,并将图像数据通过视频服务器MJPG-Streamer传输到外部移动设备上,同时通过Intel Edison开发工具调用OpenCV图像库对图像数据进行处理及保存.测试结果表明,系统具有良好的实时性、高分辨率、低成本及易于拓展升级等优点.

嵌入式;实时;图像采集;传输;录制;Intel Edison;OpenCV;MJPG-Streamer;Video4Linux

0 引 言

目前,传统的视觉图像采集大多是基于“摄像头—图像采集卡—通用PC机"三者为一体的系统,但这种视觉系统不能满足实际应用对图像实时处理的需求,而基于单片机的数据采集系统,虽然具有高可靠性及集成化等优点,但是在实时性、远程监控及人机接口等方面存在一些不足[1].鉴于嵌入式系统具有成本低、高灵活性及功耗低等诸多优点[2],本研究采用Yocto Linux的Intel Edison嵌入式开发板作为开发环境,同时集成使用TBB线程构建模块以最大限度地利用CPU并行运行能力,其具备的快速原型能力可加快开发过程.通过USB摄像头对图像进行采集,将图像数据通过视频服务器MJPG-Streamer传输到外用设备,并调用OpenCV图像库实现对图像数据的保存以及后期处理.测试结果表明,本系统具有良好的实时性、高分辨率及易于拓展升级的优点,可用于远程监控、公共场所安全管理及智能家居等相关领域.

1 系统结构设计

1.1 系统硬件平台结构

本研究的系统硬件平台采用Intel公司研发的AtomZ34XX系列处理器,并整合了100 MHz Quark处理器,其自带1 GB LPDDR3 POP内存且使用4 GB eMMC作为FLASH存储,提供40个GPIO接口,可适应3.3~4.5 V输入电压,输出则支持3.3 V/100 mA、1.8 V/100 mA.系统平台硬件的功能框图如图1所示.本系统硬件平台在一般情况下电流消耗不超过200 mA,而在利用Wi-Fi传输数据时,峰值电流仅达600 mA,具有低功耗的特点.同时,平台还配置了Broadcom BCM43340 Wi-Fi支持,外接u.FL射频同轴天线以增强无线信号的接收发送能力,引出1个USB HOST接口用于连接USB摄像头,采用1 080 P高清USB摄像头,板载64 GB MicroSD卡.

图1系统硬件平台功能框图

1.2 图像采集传输与录制设计

本系统通过USB高清摄像头获取图像数据并传送至Edison处理器,利用MJPG-Streamer实现远程视频监控,并通过OpenCV录制为AVI格式的视频文件.系统的图像采集传输与录制整体结构框图如图2所示.

图2图像采集录制系统结构框图

2 开发环境与配置

2.1 Yocto Project Linux内核配置与SD卡启动方式

Yocto Project是一个开源的协作软件,提供模板、工具和方法帮助创建定制的 Linux 系统和嵌入式产品,而无需关心硬件体系.在通过常用方式将Linux装载在芯片eMMC上并成功启动后,为了能给图像数据提供大量的存储空间,本研究利用64 GB的SD卡作为系统文件存放媒介.首先使用“mkfs.ext4”命令将SD卡分区格式化为ext4格式的文件系统,并将Yocto Linux系统镜像目录中的Roofts内容复制到SD中,将SD卡与测试系统连接,通过调试串口登录嵌入式Linux系统且执行如下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”

则可以通过U-boot设置从SD卡的第1个分区加载Linux中的roofts系统.在Yocto Project中,内核配置操作与常见Linux配置稍有不同,通过“bitbake virtual/kernel-c menuconfig”调用内核配置菜单,配置Media USB Adapters目录下的摄像头驱动支持,并通过“bitbakeedison-image”重新编译整个系统.将摄像头连接至Yocto系统中,如果/dev目录下出现video等设备文件,则代表摄像头已被内核所识别.

2.2 图像采集设计

Linux系统中的视频子系统Video4Linux为视频应用程序提供了统一的API函数.视频应用程序通过标准的系统调用即可操纵各种不同的视频捕获设备[3],通过这些API函数读取摄像头数据,并利用mmap()内存映射方式进行单帧图像采集,具体过程如下:

1)通过v4l-open()函数打开视频.

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)开启设备并成功取得设备信息后,利用v4l-get-capability()函数调用ioctl()取得设备文件相关信息,并且将信息放入video-capability结构体中,通过v4l-get-capability()函数读取这些信息.

int v4l-get-capability(v4l-device *vd)

{

if(ioctl(vd->fd,VIDEOCGCAP,&(vd->capability))<0)

{

perror(″camera-get-capability:″);

return -1;

}

return 0;

}

3)通过v4l-get-picture()获取并改变分量值,利用ioctl()函数获取图像缓冲区的帧数据并将其USB摄像头对应的设备文件映射至内存,实现数据共享.

2.3 MJPG-Streamer移植

MJPG-Streamer是一种轻量级的视频服务器软件,可以从单一输入组件获取图像并传输到多个输出组件的命令行应用程序[4],其是基于V4L2框架所设计,能够将读取摄像头图像数据并压缩为JPEG格式通过TCP/IP网络传输并显示,并且能够利用Webcams的硬件压缩功能来分担本属于CPU的视频帧压缩任务[4].该软件采用了模块化的设计方法,各功能模块都放在plugins文件夹下[5].用户可以根据自己的设计需求,自由选择需要的模块.这种模块化的设计简化了视频服务器软件的移植.

本研究主要应用其input-uvc及output-http组件获取并输出摄像头数据,通过在Shell程序中添加如下语句启动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文件添加至系统启动文件目录即可实现MJPG-Streamer的开机自启动.

2.4 OpenCV函数库移植

OpenCV是由Intel公司开发且在近年来迅速普及的计算机视觉研究工具,为一种跨平台的计算机视觉库.在其基础上编写图像处理代码,效率可得到有效提高[6-7].为了充分利用本平台多核处理器的并行运算能力,本研究利用Intel的TBB库将OpenCV交叉编译成动态链接库并将其部署到Edison系统当中使用.通过在开机目录中创建deploy文件目录并将TBB软件包文件中相关的所有头文件及二进制库文件复制到此目录,并将SDK安装目录下的环境变量配置脚本的第10行修改为,

“export CC=” i589-poky-linux-gcc””

第11行修改为,

“export CXX=” i586-poky-linux-g++"”

获取OpenCV源代码并解压后,在当前目录中创建build目录并进入,通过执行cmake命令开始进行编译前的配置准备,

“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完成编译配置后,通过make命令进行编译,并通过使用make install命令将其复制到之前建立的deploy目录中,最后通过“scp”命令将所有的OpenCV动态链接库文件部署到Edison系统中.在系统调试过程中可通过在PC机上调用cvCaptureFromFile函数来获取MJPG-Streamer传输的视频流数据,充分利用了交叉编译的优势.

程序示例如下:

#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地址可通过ifconfig命令获得

IplImage*Image;

cvNamedWindow(″Image″);

while(Image=cvQueryFrame(capture))

{

cvShowImage(″Image″,Image);

cvWaitKey(33);

}

cvReleaseCapture(&capture);

cvDestroyAllWindows();

return 0;

}

3 系统测试

本系统在上电启动后,将自动通过Wi-Fi连接到无线路由器.同时,通过将USB摄像头插入系统板(见图3),系统将检测到摄像头的接入并自动启动MJPG-Streamer客户端程序,并通过配置的路由器将服务器映射到外网端口.此时可通过智能设备浏览器输入192.168.0.101:8080进行访问,视频展示效果如图4所示.同时,使用者还可以通过Winscp、filezilla等软件查看录制保存在SD卡上的AVI文件.测试结果表明,本系统各项功能运行流畅.

图3 USB摄像头连接图

图4智能设备访问视频示意图

4 结 语

本研究基于Intel Edison利用MJPG-Streamer获取并传输摄像头数据,同时通过由TBB并行开发库编译的OpenCV库保存为AVI格式视频.Edison配备的Atom+Quark的性能远远超过常见的MCU,其强大的运算能力保证了本系统的稳定性与高分辨率.相比常见的基于ARM系列的图像传输系统,本系统的功能更加强大.尽管本系统的成本有所增加,但却可以快速验证系统原型,极大缩短了开发时间.同时,本系统的设计思路也适用于一些与实时图像处理相关的高性能产品的开发.

[1]郑凯华,章旭东,俞立,等.基于S3C2440的图像采集与显示系统[J].计算机系统应用,2011,20(8):225-228.

[2]彭侃.基于ARM9的嵌入式软件平台的研究与实现[D].上海:东华大学,2008.

[3]张永强,赵永勇,李崇德.嵌入式远程视频采集系统的设计与实现[J].现代电子技术,2006,29(4):75-77.

[4]陈书益,黄永慧.开源视频服务器软件MJPG-Streamer的研究和应用[J].电子设计工程,2012,20(5):172-176.

[5]陈恒鑫,林威,张钦宇.基于MJPG-Streamer的移动视频监控系统设计[J].计算机测量与控制,2014,22(11):3597-3599.

[6]梁艳.基于OpenCV的ARM嵌入式网络视频监控系统[J].微型机与应用,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 — ),男,硕士,副教授,从事计算机软件工程研究.

猜你喜欢
嵌入式摄像头传输
浙江首试公路非现场执法新型摄像头
摄像头连接器可提供360°视角图像
混合型随机微分方程的传输不等式
牵引8K超高清传输时代 FIBBR Pure38K
TS系列红外传感器在嵌入式控制系统中的应用
关于无线电力传输的探究
搭建基于Qt的嵌入式开发平台
支持长距离4K HDR传输 AudioQuest Pearl、 Forest、 Cinnamon HDMI线
嵌入式软PLC在电镀生产流程控制系统中的应用
奔驰360°摄像头系统介绍