前言
最近做了个opencv的人脸识别项目,就是调用opencv和contrib模块的api,使用Haar级联分类器检测人脸,LPBH算法提取检测人脸特征,然后通过sqlite3数据库保存数据,还可以导出打卡记录CSV格式表格。想要实现人脸识别分为以下步骤:
WARNING
📌 1. ubuntu安装QT5.12.12,opencv和contrib模块,导入代码在Ubuntu端也可使用2. 编译linux系统,配置mipi屏幕,烧录系统到泰山派3. 交叉编译QT5.12.12,opencv和contrib模块,得到3566的底层运行库4. 使用交叉编译出来的库配置QT应用,交叉编译人脸识别应用为arm应用,再将库与应用使用U盘NFS之类的东西拷贝到泰山派上面5. 启动应用,配置环境
这个人脸识别只是简单的调用opencv自带功能实现,本人能力不够没用上GPU和NPU,CPU尝试过太卡了,希望有大佬出一期mtcnn检测mobilefacenet识别这种深度学习人脸识别的搭配GPU和NPU实现。
有人可能有疑问为什么视频里是对图片进行处理,其实这种识别本质上都是对图片进行处理,视频中的图片也是在视频中截取一帧图片去做处理,只不过我这里没有活体检测,可以用红外摄像头、深度相机来实现,不用加算法了就。
开发环境:ubuntu22.04,gcc9,QT5.12.12,opencv4.6,交叉编译器Linaro GCC 7.5
硬件:泰山派2+16G、UVC摄像头、1280×800屏幕、U盘
本文所用文件可在gitee下载:https://gitee.com/LJ96324/rk3566.git
应用效果见最后的视频
注:face-test的应用我提供了优化完成版本,但是代码我只提供了未优化的代码,大家优化一下就行,我最终的优化版本代码不方便放出来。
1、ubuntu安装QT5.12.12,编译opencv和contrib模块,导入代码在Ubuntu端也可使用
我的代码是在ubuntu上面写的,编译修改什么的需要安一个QT,安装教程参考:https://blog.csdn.net/dengjin20104042056/article/details/131705766
如果不修改可以跳过,直接用我提供的可执行bin应用文件就可以。
qt我就不讲了,点点安装就可以,opencv部分简单说一下
WARNING
📌 首先就是安装依赖,可以参考下方链接,也可以按我的简要教程来
opencv和contrib模块参考链接进行安装(源码下载里面有链接)
https://blog.csdn.net/qq_19449259/article/details/127701812
https://blog.csdn.net/qq_26943851/article/details/104434130
简要教程:
sudo apt install cmake-qt-gui
sudo apt install mingw-w64
sudo apt install cmake
sudo apt install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
sudo apt install git
安装完成之后,mkdir bulid 创建build目录,在build目录内打开终端输入 cmake-gui,进入cmake的配置界面,默认选择makefile的配置
搜索opencv_extra_modules_path,选择contrib模块的modlue目录
默认安装目录在usr里面,修改搜install就可以,不修改可以直接点configure、generate后生成makefile编译文件
输入sudo make -j12
即开始编译opencv和contrib模块,编译完成sudo make install
将安装
注意此时时默认安装到usr下面的,这是给虚拟机使用的,安在这里也可以,默认目录好找,如果有同学想安在其他目录,更改就可以,但是QT pro文件的opencv头文件和库路径也要对应修改
2、编译linux系统,配置mipi屏幕,烧录系统到泰山派
我使用的是buildroot系统
3、交叉编译QT,opencv和contrib模块,得到3566的底层运行库(可以直接下载,跳过此步)
QT交叉编译,泰山派教程是有的:Qt5移植
OPENCV交叉编译:
删除opencv的build目录内容,重新使用camke-gui命令,此次因为是交叉编译选择自定义编译器
如下图所示选择好已安装的交叉编译器(见上面的QT教程有)
依旧是选择选择contrib模块的modlue目录
这里要更改安装目录,必须改,因为不改的话会覆盖之前安装的x86库,导致在ubuntu上无法运行
点configure、generate后生成makefile编译文件
随后开始编译make -j12,编译完成make install将安装,不涉及根目录下文件可以不用sudo
编译完成可以看下文件的类型,确实是arm aarch64的
WARNING
📌 交叉编译器编译opencv会有 #define _FILE_OFFSET_BITS 64 定义问题报错和../../lib/libopencv_imgcodecs.so: undefined reference to `png_do_expand_palette_rgb8_neon'报错,可以按照下方链接解决
5、使用交叉编译出来的库配置QT应用,交叉编译人脸识别应用为arm应用,再将库与应用使用U盘NFS之类的东西拷贝到泰山派上面
下载opencv的交叉编译文件,然后解压放在/opt/arm-opencv目录下
首先配置QT,如果不想交叉编译QT源码,可以用我提供的编译完压缩包,解压放在/opt/arm-qt5.12.12目录下,没有就创建一个目录,因为QT的交叉编译文件是带有路径编码的,放在其他路径无法使用,为了避免每个人的用户名不一样我就把目录选择在/opt下了
然后打开qt creator软件,配置QT的交叉编译应用工具链,这样你们以后想写其他QT软件直接用这个就可以
配置qmake和编译器
配置完qmake和编译器就可以添加工具链
添加完成即可导入代码编译应用
拷贝qt和opencv到泰山派的opt上面
拷贝font压缩包到usr/share下解压
6、启动应用,配置环境
配置环境这里是本教程最麻烦的地方,无数次试错才试出来的,但是总结起来又很简单
WARNING
📌 第一个问题是无法打开摄像头,需要把泰山派自带的video节点全部删除,插入UVC以后,会显示video9/10,把他们链接到video0,1就可以了。
rm -rf /dev/video\*
ln -s /dev/video9 /dev/video0
ln -s /dev/video10 /dev/video1
2
3
4
5
WARNING
📌 第二个问题是字体和opencv库
vi /etc/profile
在末尾添加以下后source
或重启
export QT_DIR=/opt/arm-qt5.12.12
export PATH=$QT_DIR/bin:$PATH
export LD_LIBRARY_PATH=$QT_DIR/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM=linuxfb
export QT_PLUGIN_PATH=$QT_DIR/plugins
export QT_QPA_FONTDIR=/usr/share/fonts/truetype/arphic/
2
3
4
5
6
至此基本完成,输入./face-test
即可运行
7、效果视频
8、极速使用版(直接用看这里)
1、刷buildroot或ubuntu(闪屏需要把系统桌面程序杀死),debian的问题我还未解决
2、https://gitee.com/LJ96324/rk3566
下载这四个文件,将 arm-qt5.tar.gz 与 arm-opencv.tar.gz 解压在/opt/目录下。
fonts.tar.gz 解压在 usr/share/ 目录下。
解压命令:gzip -d xxx.tar.gz tar -xavf xxx.tar
再按照6、启动应用,配置环境 步骤配置环境,执行即可