最近进行的是一个opencv的人脸识别项目,使用了咱们的泰山派,可是泰山派必经比较小众,资料不多,这里也是给大家提供一些经验。
如果大家需要后续会分享这个项目的代码部分,这个文档主要是要环境部分!!
想要在泰山派中使用opencv编程最简单的办法当然是使用Buildroot构建一个拥有opencv库的Linux系统,这样移植也非常方便,在其他文档中都有呈现,笔者在编译时发现Buildroot是不支持人脸识别的重要库"opencv_contrib"。网上有说法是版权问题,如果缺少这个库未来的很多开发都非常困难,所以我们只好用别的办法了。
编译opencv
实现是下载需要的opencv版本和对应的“opencv_contrib”module模块。
这个是我使用的版本
如果大家没办法科学上网,我这里有一个小工具😊
steamcommunity
本身是加载游戏平台的,但是也可以加载github,如果不是想看外网,还是挺推荐的。
之后的编译最好在虚拟机中进行,我使用的是ubuntu18.04,需要下载cmake-gui
下载
sudo apt install cmake-gui
查看 cmake-gui --version
gui界面好用的多,没必要非要使用代码的方式。找到这个程序
两个路径是源码和二进制文件(也是Makefile)的位置,
1. Add Entry
NAME=CMAKE_AR;
Type=FILEPATH;
Value= /home/book/Release/buildroot/output/rockchip_rk3566/host/bin/aarch64-buildroot-linux-gnu-ar
注意
Value的值要自己去找,我是使用了泰山派的Buildroot来构建系统,所以是在buildroot目录下,这里的host目录要注意一下是存放主机工具和编译器的目录。这些工具和编译器用于在主机上编译目标系统的二进制文件。通常情况下,当你配置和编译 Buildroot 时,它会在其构建目录中创建一个 host 子目录。
!!! 如果你是其他系统就找一下自己的编译器在哪,必须是对应的交叉编译器,这样才能在咱们的泰山派上运行。
2. configure
这里要感谢opencv在各个平台的广泛用户,所以opencv提供了方便我们编译的toolchain配置。
他放在我们的opencv源码中的platform/Linux中,选择自己的工具链,我是aarch64
之后我们就可以具体的配置我们要的内容了,
3. CMAKE_INSTALL_PREFIX
编译后的opencv库的位置。可以自己选,记住就好
4. WITH_GTK_2_X
需要选择
5. BUILD_SHARED_LIBS
选了就是动态库,不选就是静态库
6. BUILD_opencv_world
这个是opencv的万能库,其实就是把所有库帮你编译到一起,看你需不需要,选上会方便一点
7. WITH_V4L
人脸识别肯定要摄像头
8. MODULES_PATH
这个就是我们额外需要的库,因为是人脸识别项目我选择了opencv_contrib/module/face 需要其他库就自己网上查一下,我们这个项目基本上就用到这些
9. make
选择完了就开始generate
完成后会在我们选好的目录下生成Makefile,在我们Makefile的文件夹中make一下
时间会比较长,条件允许就给多一点线程,make -j8大概也要半个小时
最后
make install
完成编译.
使用
我的项目是使用QT编写的,想要用QT可以看看其他文档,其实很简单,实现是添加QT的配置(使用Buildroot会方便一些),编译器还是在那个路径下
/home/book/Release/buildroot/output/rockchip_rk3566/host/bin/qmake
- 使用 生成makefile
sudo {qmake_path} ./*.pro QT的pro中添加配置 LIBS += -L/home/book/for_arm/opencv4-arm/lib -lopencv_world \
INCLUDEPATH += />home/book/for_arm/opencv4-arm/include/opencv4
INCLUDEPATH += /home/book/for_arm/opencv4-arm/include/opencv4/opencv2
根究自己的路径修改,如果没有使用world库,会比较麻烦,要自己找链接哪些库。
测试
项目的运行需要依赖我们的
libopencv_world.so libopencv_world.so.405 libopencv_world.so.4.5.5三个库,
所以一定要把他们移植到板子的/lib目录下,才能运行。
wifi问题
因为我的项目需要网络所以贴一个遇到的网络问题
我使用的是Buildroot,如果不是可以跳过了。
Buildroot使用wifi是通过脚本wifi_start.sh,
先要修改 /buildroot/output/rockchip_rk3566/target/etc/wpa_supplicant.con的wifi名称和密码再编译
测试时我发现了一个比较简单的办法,可以灵活修改使用的wifi
/usr/bin/wifi_start.sh
#!/bin/sh
WIFISSID=$1
WIFIPWD=$2
CONF=/tmp/wpa_supplicant.conf
cp /etc/wpa_supplicant.conf /tmp/
echo "connect to WiFi ssid: $WIFISSID, Passwd: $WIFIPWD"
sed -i "s/SSID/$WIFISSID/g" $CONF
sed -i "s/PASSWORD/$WIFIPWD/g" $CONF
killall wpa_supplicant
sleep 1
wpa_supplicant -B -i wlan0 -c $CONF
2
3
4
5
6
7
8
9
10
11
12
可以看到
cp /etc/wpa_supplicant.conf /tmp/
这一行,所以直接去修改我们的/etc/wpa_supplicant.conf就好了, 改成自己要使用的wif
这样我们就可以灵活调整我们的wifi了