本文将介绍Linux人脸识别项目的开发流程, 只作简略介绍所需知识点及大致流程。
注:若需详细教程请联系作者(见文末)。
虚拟机采用的是VMware,需要下载VMware安装包、ubuntu系统镜像,再进行安装。
1.1.1 安装虚拟机VMware
1.1.2 在VMware上安装Ubuntu
安装好虚拟机并成功运行Ubuntu系统后,就开始准备一些基本环境的搭建,方便以后开发。
主要有以下几点内容:
学习linux常用的命令,掌握linux系统的使用。
学会在linux上编辑代码、编译、运行程序,掌握编译方法(gcc和g++),能开发简单的C/C++程序。
需要准备QT的安装包,根据自己项目所运行的系统需要选择一个版本。
Linux:qt-opensource-linux-x64-5.12.8.run
安装qt creator,能创建工程,并编译运行。
主要学习以下控件的使用:
根据项目的功能,对项目的界面进行设计及布局,并用QT实现布局,形成初步界面效果。
需要先准备Opencv库的源码包。
利用源码包,配置、编译、安装,以及编译 运行demo程序。
主要学习以下内容:
学会编写一个简单的opencv工程,并编译运行。
利用opencv来显示图片
利用opencv打开摄像头并显示画面
利用opencv自带的人脸特征模型来检测人脸
通过人脸检测来采集人脸图片并保存
利用采集到的人脸图片来进行人脸库模型训练
利用训练好的人脸库模型进行人脸识别
数据库的种类有很多,在此项目中推荐使用SQLite,使用SQLite的方式又有2种:单独编译安装一个SQLite库、使用QT自带的SQLite数据库。
简便快捷起见,直接使用QT自带的SQLite数据库。
学习目标:设计一个存储用户数据的数据表,并实现增删改查等功能。
了解什么是Linux系统编程,有个大概的认知。
6.2.1 创建多线程:创建多条线程并执行不同任务
6.2.2 线程互斥:多条线程间访问同一个变量,如何互斥
主要学习TCP协议,客户端与服务器间的连接及通信收发数据。
学习Linux的V4L2视频子系统,并驱动摄像头获取图像数据。
前面章节主要学习了项目要用到的功能,本章节开始对其进行整合,从而形成一个整体,即一个完整项目工程。
若项目采用两个独立应用即:客户端+服务器的架构,则需要实现TCP连接进行通信。
客户端功能:采集图像、显示界面及人脸框和识别结果的显示;
服务器功能:图像处理(人脸检测、人脸识别)、用户管理及数据存储等。
7.1.1 建立TCP服务器和客户端
创建一个两个程序/工程,两者建立TCP连接进行通信,一个客户端,一个服务器,相互间能收发数据。
7.1.2 通信协议定义
建立TCP连接,只是建立了一条相互收发数据的通路,若无规范来协定,两端收发的数据根本不知道是什么,因此,需要双方协议数据的格式,这就是协议。
协议的定义,参考文档:《附件A:通信协议-人脸识别》
当然,也可自行定义另一套。
7.1.3 实现视频传输
根据协议格式,客户端将摄像头获取到的图像数据,打包到协议数据包里面,再发送给服务器,服务器收到协议数据包,将图像数据解析出来,即实现了视频图像的传输。
由于使用的是MJPEG格式,每一帧都是一张完整的图片数据,因此,视频图像也就是由一帧帧的图片组成。
PS: 可以先实现一张图片的完整传输。
将前面章节学习的V4L2运动摄像头、项目QT界面整合起来,实现V4L2获取到的摄像头图像在QT界面上显示出来。实际上,QT显示的还是图片,只是以一秒二三十帧的速率还快速刷新图片,从而形成视频的效果。
利用opencv自带的人脸特征模型,来实现人脸检测
实现人脸检测功能后,就可以采集人脸图像及保存了,如每个人录入10张人脸图并保存下来,每录入一个人脸,就要对人脸库重新训练一次。
录入人脸的同时,还要将人脸信息保存到数据库。
经人脸检测得到具有人脸的图像后,再对其进行识别,识别出是哪一个人。
一些其他功能,如:删除人脸、保存人脸识别记录、查询人脸列表…等。
写在最后,希望对大家有帮忙,欢迎提出修改意见或建议。
相关资料/指导答疑/技术交流/帮助:
linux_face.txt · zengzr/share_contact - Gitee.com
如有疑问,上述方式联系作者,谢谢!