• 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

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

  • 相关阅读:
    Opencascade常用函数 更新中...
    redis过期事件监听
    PT_随机变量函数的分布_随机变量线性函数的正态分布
    SwiftUI找回丢失的列表视图(List)动画
    数据结构之查找(分块查找)
    网站安全防护措施有哪些
    目前的网络情况与特点
    前端监控系列2 |聊聊 JS 错误监控那些事儿
    ros(30):while(ros::ok()){}理解与使用示例
    HTML网页大作业代码【免费代码已上传】
  • 原文地址:https://blog.csdn.net/qq_30155503/article/details/133916624