一、前言:
这个项目主要分为两部分,客户端(ARM板端)负责利用OpenCV采集人脸数据,利用TCP将人脸数据发送给服务器,然后服务器根据人脸数据进行人脸识别,将识别后的结果返还给客户端,客户端对人脸数据进行解析,得到正确的人脸数据后,打开门锁。门锁涉及硬件操作,这一部分进行驱动的编写、注册与调用等。
项目分为以下几部分内容:
1、项目环境搭建
1) OpenCV利用Cmake进行编译并导入QT,保证OpenCV可以在服务器端调用;
2)OpenCV利用Cmake进行交叉编译,移植到ARM端,同时修改相关动态链接库lib,保证OpenCV可以在ARM端进行调用,完成环境图像信息采集工作;
3)ARM端配置相关的QT运行环境;
4)在Ubuntu虚拟机中配置QT交叉编译环境,利用QT对客户端程序进行交叉编译,然后移植到ARM端。
2、客户端实现功能
1)TCP连接。首先建立TCP连接,保证能够和服务器进行通信
2)数据采集与转换发送。利用Open CV采集Mat图像数据,将图像数据进行两次格式转换,第一次转换是为了将图像在ARM端的LCD屏幕显示,这里将图像转成JPG格式,第二次转换是为了进行数据发送,需要将图像处理为2进制文件,图像发送,利用TCP建立连接,将转换后的二进制数据通过数据流发送
3)数据接收。客户端同时完成数据接收功能,对JSON数据进行解析,JSON数据由服务器发送过来,数据内容为人脸识别后的人员信息结果。
4)门禁驱动程序。人脸识别成功,门锁打开的驱动程序编写。这里主要是使用Linux字符设备驱动,通过fileoperation结果体进行响应的open、read函数等进行编写,考虑到分层思想,将程序和硬件进行分层设计,通过Platform总线等进行编写,编写完成后,修改设备树,定义硬件连接端口。
3、服务器端实现功能
1)建立数据库。一个用来存储人脸注册信息,一个用来存储人脸识别信息,一个用来存储人员进出大门信息。
2)注册信息。注册界面QT设计,完成注册信息的数据库上传
3)人脸识别引擎构造。主要用来识别人脸信息,查询人脸信息
4)识别信息发送至客户端。主要是根据识别的人脸id进行数据库信息查询,将查询的数据打包程JSON数据,利用socket进行发送
5)细节阐述。服务器程序相对复杂,里面也涉及到图像数据转换、多线程检测与识别等等,后续展开详细分析。
下面是项目实现图片的一些展示:
服务器端人脸完成注册:
数据库完成信息录入:
客户端接收人脸识别数据:
二、ARM板硬件信息:
STM32MP157板,Linux系统版本为5.4,OpenCV版本为4.5.2,usb摄像头一个,电磁开关一个(门锁)。
三、项目环境搭建:
1、各种需求包下载
1)cmake安装
下载链接:https://github.com/Kitware/CMake/releases/download/v3.24.1/cmake-3.24.1-windows-x86_64.msi2)QT下载安装,大家可以去QT官网下载
Window-qt5.14.2下载安装安装
https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-windows-x86-5.14.2.exe
linux- qt5.14.2下载安装安装
https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-linux-x64-5.14.2.run
mac-qt5.14.2下载安装
https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg
3)OpenCV下载
Opencv官网下载opencv4.5.2源码, 和opencv_contrib-4.5.2源码
http:// https://opencv.org/releases/ 下载Sources压缩文件即可。(opencv4.5.2)
然后下载opencv_contrib-4.5.2
https://github.com/opencv/opencv_contrib.git
2、Windows端QT中配置OpenCV
1)将上述包进行解压
2)QT进行OpenCV编译
配置编译器
在QT中打开opencv4.5.2目录下CMakeList.txt
等待一段时间,显示配置完成,如下图中的红框所示
此时不要直接去编译,建议先修改安装路径,并且进行第三方模块选择,点击项目继续进行配置。
添加face模块
选择OpenCV编译后的安装路径
选择安装
点击配置后编译
编译时,选择release版本,qt新手可能会不知道如何配置release版本?点击下图中绿色箭头上边的小电脑进行配置。
3)人脸识别算法库下载
GitHub - SeetaFace6Open/index
3、Ubuntu中配置QT交叉编译环境
先写这些,后边有空再给大家更新,大家评论区扣1 或者私信我,获取更多项目信息。