Linux上Qt和Opencv人脸识别项目学习路线(嵌入式/C++)

本文将介绍Linux人脸识别项目的开发流程, 只作简略介绍所需知识点及大致流程。

注:若需详细教程请联系作者(见文末)。

一、基本开发环境搭建

1.1 安装虚拟机Ubuntu

虚拟机采用的是VMware,需要下载VMware安装包、ubuntu系统镜像,再进行安装。

1.1.1 安装虚拟机VMware

1.1.2 在VMware上安装Ubuntu

1.2 Linux开发环境搭建

安装好虚拟机并成功运行Ubuntu系统后,就开始准备一些基本环境的搭建,方便以后开发。

主要有以下几点内容:

  1. 虚拟机工具VMware Tools:windows与虚拟机间能相互拷贝
  2. 共享文件夹:虚拟机ubuntu能访问windows共享的文件
  3. 网络配置:能联网访问互联网
  4. 安装vim编辑器:学会用vim编辑文本

2. Linux基础学习

2.1 Linux常用命令

学习linux常用的命令,掌握linux系统的使用。

2.2 Linux上开发程序

学会在linux上编辑代码、编译、运行程序,掌握编译方法(gcc和g++),能开发简单的C/C++程序。

3. QT安装及学习

需要准备QT的安装包,根据自己项目所运行的系统需要选择一个版本。

Linux:qt-opensource-linux-x64-5.12.8.run

3.1 安装QT

安装qt creator,能创建工程,并编译运行。

3.2 QT开发学习

主要学习以下控件的使用:

  1. QLabel控件:能显示文本、图片;
  2. QPushButton控件:能点击按钮再作相关处理(调用到处理函数);
  3. QLineEdit控件:能获取输入的内容;
  4. QTimer控件:显示一个时间,精确到秒来更新;
  5. QComboBox控件:能添加多项内容,并在下拉菜单中查看或选中。

3.3 设计并实现项目QT界面

根据项目的功能,对项目的界面进行设计及布局,并用QT实现布局,形成初步界面效果。

4. Opencv的安装及学习

需要先准备Opencv库的源码包。

4.1 安装Opencv

利用源码包,配置、编译、安装,以及编译 运行demo程序。

4.2 Opencv开发学习

主要学习以下内容:

4.2.1 创建和编译OPENCV工程;

学会编写一个简单的opencv工程,并编译运行。

4.2.2 显示图片

利用opencv来显示图片

4.2.3 打开摄像头

利用opencv打开摄像头并显示画面

4.2.4 人脸检测

利用opencv自带的人脸特征模型来检测人脸

4.2.5 采集人脸

通过人脸检测来采集人脸图片并保存

4.2.6 人脸模型训练

利用采集到的人脸图片来进行人脸库模型训练

4.2.7 人脸识别

利用训练好的人脸库模型进行人脸识别

5. 数据库的学习及使用

        数据库的种类有很多,在此项目中推荐使用SQLite,使用SQLite的方式又有2种:单独编译安装一个SQLite库、使用QT自带的SQLite数据库。

         简便快捷起见,直接使用QT自带的SQLite数据库

         学习目标:设计一个存储用户数据的数据表,并实现增删改查等功能。

6. Linux系统编程

6.1 Linux系统编程简介

了解什么是Linux系统编程,有个大概的认知。

6.2 多线程编程

6.2.1 创建多线程:创建多条线程并执行不同任务

6.2.2 线程互斥:多条线程间访问同一个变量,如何互斥

6.3 Socket网络编程

主要学习TCP协议,客户端与服务器间的连接及通信收发数据。

6.4 V4L2驱动摄像头

学习Linux的V4L2视频子系统,并驱动摄像头获取图像数据。

7. 项目功能整合

        前面章节主要学习了项目要用到的功能,本章节开始对其进行整合,从而形成一个整体,即一个完整项目工程。

7.1 实现TCP通信

若项目采用两个独立应用即:客户端+服务器的架构,则需要实现TCP连接进行通信。

客户端功能:采集图像、显示界面及人脸框和识别结果的显示;

服务器功能:图像处理(人脸检测、人脸识别)、用户管理及数据存储等。

7.1.1 建立TCP服务器和客户端

创建一个两个程序/工程,两者建立TCP连接进行通信,一个客户端,一个服务器,相互间能收发数据。

7.1.2 通信协议定义

建立TCP连接,只是建立了一条相互收发数据的通路,若无规范来协定,两端收发的数据根本不知道是什么,因此,需要双方协议数据的格式,这就是协议。

协议的定义,参考文档:《附件A:通信协议-人脸识别》

当然,也可自行定义另一套。

7.1.3 实现视频传输

根据协议格式,客户端将摄像头获取到的图像数据,打包到协议数据包里面,再发送给服务器,服务器收到协议数据包,将图像数据解析出来,即实现了视频图像的传输。

由于使用的是MJPEG格式,每一帧都是一张完整的图片数据,因此,视频图像也就是由一帧帧的图片组成。

PS: 可以先实现一张图片的完整传输。

7.2 Qt显示摄像头画面

        将前面章节学习的V4L2运动摄像头、项目QT界面整合起来,实现V4L2获取到的摄像头图像在QT界面上显示出来。实际上,QT显示的还是图片,只是以一秒二三十帧的速率还快速刷新图片,从而形成视频的效果。

      

7.3 实现人脸检测

利用opencv自带的人脸特征模型,来实现人脸检测

7.4实现人脸录入及模型训练

实现人脸检测功能后,就可以采集人脸图像及保存了,如每个人录入10张人脸图并保存下来,每录入一个人脸,就要对人脸库重新训练一次。

录入人脸的同时,还要将人脸信息保存到数据库。

7.5 实现人脸识别

经人脸检测得到具有人脸的图像后,再对其进行识别,识别出是哪一个人。

7.6 完善其他功能

一些其他功能,如:删除人脸、保存人脸识别记录、查询人脸列表…等。

写在最后,希望对大家有帮忙,欢迎提出修改意见或建议。

相关资料/指导答疑/技术交流/帮助:

linux_face.txt · zengzr/share_contact - Gitee.com

如有疑问,上述方式联系作者,谢谢!

你可能感兴趣的:(毕业设计,opencv,qt,opencv,linux,qt)