嵌入式Linux下使用OpenCV

2019-07-12 15:04发布

By Toradex 秦海 1). 简介 OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序,以解决人机交互,人脸识别以及动作跟踪等领域的问题。   本文所采用的测试平台为来自Toradex的ARM 计算机模块平台Colibri iMX6DL搭配其对应的开发载板Colibri Eva Board.   2. 准备 a). Colibri iMX6DL系统通过载板X18连接LVDS LCD显示屏。 b). USB camera 用于后续OpenCV演示程序测试。 c). Colibri iMX6DL 系统使用Toradex Linux Release V2.6.1,不过原生没有包含OpenCV支持,可以通过下面两种方式集成OpenCV。 ./ 在Colibri iMX6DL官方Linux release系统上面,通过opkg软件管理器在线安装 ------------------------------ root@colibri-imx6# opkg update root@colibri-imx6# opkg install opencv root@colibri-imx6# opkg install opencv-apps ------------------------------ ./ 基于Toradex Openembedded环境添加OpenCV相关并重新编译,好处可以更方便的定制所需安装的包,如添加ffmpeg/libav支持。建立环境和编译相关请参考这里,涉及到添加OpenCV支持的修改请参考下面两个patch文件,然后根据这里说明将重新编译好的image文件更新到Colibri iMX6DL模块上面去。 ------------------------------ //local.conf文件添加OpenCV支持 https://github.com/simonqin09/opencv_patch/blob/master/local.conf.opencv.patch // 修改OpenCV recipte添加FFMPEG/libav和multicore(TBB)支持,不过请注意libav是商业授权,这里只作为测试使用,不能直接用于商业发布。 https://github.com/simonqin09/opencv_patch/blob/master/opencv_2.4.bb.patch //修改OpenCV bitbake recipt添加gstreamer支持 https://github.com/simonqin09/opencv_patch/blob/master/opencv_2.4.bbappend.patch   // bitbake image Toradex-ubuntu$ bitbake angstrom-lxde-image   //bitbake toolchain Toradex-ubuntu$ bitbake -c populate_sdk angstrom-lxde-image ------------------------------   d). 在开发主机安装上面生成的toolchain,可以放到任意位置,本文为了后续操作方便,将安装好的SDK目录下的”sysroots”目录链接到”/home/username/sysroots”下面。 ------------------------------ Toradex-ubuntu$ ./angstrom-glibc-x86_64-armv7at2hf-vfp-neon-v2015.12-toolchain.sh Toradex-ubuntu$ ln –s SDK folder/sysroots /home/username/sysroots ------------------------------   3). OpenCV Demo演示 a). 本文使用的演示程序是修改于openCV 文档中的基于Haar Cascades 级联分类器的人脸识别demo,源代码如下 ------------------------------ https://github.com/simonqin09/opencv/blob/master/facedetect.cpp   // 源代码中需要对应修改“haarcascade_frontalface_alt2.xml”文件在Colibri iMX6的放置路径,这里使用的是”/home/root” // 源代码中需要对应修改USB 摄像头对应的设备名字,本文是”/dev/video0”, 在你的环境可以通过”v4l2-ctl –list-devices”命令来确定 ------------------------------   b). 对应的Makefile如下,如果你的toolchain安装在不同目录,要对应修改sysroots目录路径 https://github.com/simonqin09/opencv/blob/master/Makefile c). 将编译好的可执行文件以及下面地址的“haarcascade_frontalface_alt2.xml”文件都复制到Colibri iMX6DL同一目录下面,文本使用目录”/home/root” d). 执行程序,当有人脸正面出现在摄像头内就会显示识别出的人脸数目 ---------------------------- root@colibri-imx6# ./facedetect ----------------------------
  4). 总结 本文基于NXP iMX6嵌入式平台测试了OpenCV的基本部署和运行,另外虽然OpenCV用C++编写,也支持很多其他语言的接口甚至使用CUDA的GPU接口。