嵌入式Linux下使用OpenCV

时间:2021-06-13 21:05:02

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

----------------------------

嵌入式Linux下使用OpenCV

 

4). 总结

本文基于NXP iMX6嵌入式平台测试了OpenCV的基本部署和运行,另外虽然OpenCV用C++编写,也支持很多其他语言的接口甚至使用CUDA的GPU接口。