测试背景简介
极术社区的小伙伴们大家好,我叫徐珂靖,是一个骨灰级工科男,很荣幸地成为本期试用活动的第一批用户。
今天的工作是一个小小的插曲,不小心又写了个《一天精通OpenCV安装和卸载》,但是对于云芯一号的默认固件,这个教程还是有必要的,所以发出来给大家看,也帮助大家少走点弯路。
云芯一号的默认固件里并没有OpenCV开发环境。在上一篇文章里,《实时捕获并存储网络IP摄像头图像》中,本人用apt安装了OpenCV,版本是3.2。按理说3.2已经集成DNN模块了,但是实际编程使用发现并没有,这对后续测试物体检测会带来一些不方便。我直接抓重点汇报吧,简短说就是翻车了。
当然,这个问题并不大,我也知道你们都想看云芯一号跑AI目标检测算法,dnn模块是必须有的,所以今天一定要把确定已经带了dnn模块的OpenCV4.2给装上。
问题的解决思路
遇到这种需求,我们这种老司机的方案A一般就是自己源码编译OpenCV的,先用git下载源码
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
接着就是建build文件夹,进去cmake再make然后make install,这就完事了。
根据我过去编译的经验,半天时间就能编译完了。我觉得这个任务很简单,make开始以后,就去干别的了。
然后,晚上回来瞅了一眼,发现OpenCV还没编译完,且用来存编译文件的U盘还被占满了。这条路看来是不太好走。
FriendlyARM(友善之臂)的代码小哥跟我说他做了个Friendly RK3399系列开发板一键安装OpenCV的脚本,地址https://github.com/friendlyarm/install-opencv-on-friendlycore。只是,这个安装脚本不能直接用在其他厂家上。主要是系统环境变量的问题,会导致报错。
但这已经是帮了我大忙了,真是雪中送炭啊。于是,我悲喜交加地启用了方案B,也就是白嫖别人编译好的链接库。
安装方法/步骤
首先,致敬一下FriendlyARM做的编译工作。如果自己编译的话,至少需要花费半天时间,占用30GB的硬盘空间。
我已经把今天的安装过程中用到的命令和代码整理并开源在gitee上,方便大家复制黏贴,地址:https://gitee.com/xukejing/aijishu/tree/master/install-opencv-on-yunxin1
注意:做这些前,如果您用apt安装过OpenCV3.2,记得先删掉
1、安装curl用于下载安装包,安装libQT5,再次感谢FriendlyARM提供的那么好的编译环境apt-get -y install curl
apt-get install qt5-default
2、找个方便的目录用来存安装包,这句的目录随意cd ~
3、下载安装包,再次感谢FriendlyARM,这句命令其实是由它们的一键安装脚本修改而来。curl -o OpenCV4.2.sh http://112.124.9.243/opencv/OpenCV-4.2.0-For-FriendlyELEC-RK3399.sh
这个包里面主要是编译完的二进制可执行文件、链接库和头文件,所以文件包与OpenCV源码包相比已经缩小很多了,所以很快就能下载完毕:
4、安装包赋予执行权限chmod 755 OpenCV4.2.sh
5、激动人心的安装./OpenCV4.2.sh --skip-license --prefix=/usr/local
6、把我提供的opencv4.pc文件放到/lib/pkgconfig,这个文件在gitee里提供了。这个文件是我写的,应该不会有错。放心用吧,里面只是写入了编译时候需要的头文件和库文件的路径,以及需要链接的库,没有病毒的。
7、测试一下pkgconfig,观察一下include和lib是否都有了pkg-config --cflags --libs opencv4
正常情况下,应该会正确输出-I和-L参数
例子编译测试
查看一下OpenCV版本,命令:
opencv_version
输出如下
接下来,可以把我在gitee里提供的测试代码mycvtest.cpp编译并运行一下试试。这个代码很眼熟对不对?没错,它就是上一篇里的测试代码。它测试了网络rtsp视频流的捕获,其中mycvtest.cpp文件里面给出了摄像头ip、用户名、密码、端口的设置方法g++ -ggdb mycvtest.cpp -o aaaaa pkg-config --cflags --libs opencv4
./aaaaa
注意pkg-config --cflags --libs opencv4要用`符号括起来
下面是运行的截图,libEGL有警告,但不影响使用,至此就没问题了
虽然有警告,但是实际libEGL库是存在的,命令
ls /usr/lib/aarch64-linux-gnu | grep -i libegl
输出如下
小结
安装完OpenCV4.2,后续工作又能继续开展了。
云芯一号相关测评贴
更多云芯一号的技术教程及评测报告请关注Arm微服务器专栏。