当前位置: 首页 > news >正文

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

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

相关文章:

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

本文将介绍Linux人脸识别项目的开发流程, 只作简略介绍所需知识点及大致流程。 注:若需详细教程请联系作者(见文末)。 一、基本开发环境搭建 1.1 安装虚拟机Ubuntu 虚拟机采用的是VMware,需要下载VMware安装包、ubuntu系统镜像…...

spring 源码阅读之@Configuration解析

Configuration解析 Configuration注解用于标识一个类是配置类,用于声明和组织Bean定义,首先Configuration本身也是一个Component,在其注解定义上标有Component Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Co…...

Java Web 33道面试题汇总

更多面试合集在:https://javaxiaobear.cn 1、http 的长连接和短连接? HTTP 协议有 HTTP/1.0 版本和 HTTP/1.1 版本。HTTP1.1 默认保持长连接(HTTP persistent connection,也翻译为持久连接),数据传输完成了保持 TCP 连接不断开(不发 RST 包、不四次握手),等待在同域名…...

设计模式记录

设计模式 抽象工厂模式单例模式要实现一个单例,需要关注的点有下面几个: 抽象工厂模式 PHP工厂模式是一种可扩展、可维护和可重复使用的方法,旨在提供通用接口,用于创建对象。工厂模式的主要组成部分包括抽象工厂、具体工厂、抽象产品和具体产…...

Java设计模式之亨元模式(Flyweight Pattern)

亨元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来最大限度地减少内存使用和提高性能。该模式适用于需要创建大量相似对象的情况,其中许多对象具有相同的状态。通过共享相同的状态,亨元模式可以减少…...

正点原子嵌入式linux驱动开发——Linux中断

不管是单片机裸机实验还是Linux下的驱动实验,中断都是频繁使用的功能,在裸机中使用中断需要做一大堆的工作,比如配置寄存器,使能IRQ等等。但是Linux内核提供了完善的中断框架,只需要申请中断,然后注册中断处…...

基于Jaya优化算法的电力系统最优潮流研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Write-Ahead Log(PostgreSQL 14 Internals翻译版)

日志 如果发生停电、操作系统错误或数据库服务器崩溃等故障,RAM中的所有内容都将丢失;只有写入磁盘的数据才会被保留。要在故障后启动服务器,必须恢复数据一致性。如果磁盘本身已损坏,则必须通过备份恢复来解决相同的问题。 理论…...

CUDA 学习记录

1.关于volatile: 对于文章中这个函数, __global__ void reduceUnrollWarps8 (int *g_idata, int *g_odata, unsigned int n) {// set thread IDunsigned int tid threadIdx.x;unsigned int idx blockIdx.x * blockDim.x * 8 threadIdx.x;// convert…...

【Java 进阶篇】深入了解 Bootstrap 按钮和图标

按钮和图标在网页设计中扮演着重要的角色,它们是用户与网站或应用程序交互的关键元素之一。Bootstrap 是一个流行的前端框架,提供了丰富的按钮样式和图标库,使开发者能够轻松创建吸引人的界面。在本文中,我们将深入探讨 Bootstrap…...

基于Java的人事管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

代码随想录算法训练营第五十九天| 647. 回文子串 516.最长回文子序列

今日学习的文章链接和视频链接 回文子串 https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.html 516.最长回文子序列 https://programmercarl.com/0516.%E6%9C%80%E9%95%BF%E5%9B%9E%E6%96%87%E5%AD%90%E5%BA%8F%E5%88%97.html 动态规划总结篇 https:…...

uniapp 小程序优惠劵样式

先看效果图 上代码 <view class"coupon"><view class"tickets" v-for"(item,index) in 10" :key"item"><view class"l-tickets"><view class"name">10元优惠劵</view><view cl…...

元梦之星内测上线,如何在B站打响声量?

元梦之星是腾讯天美工作室群研发的超开星乐园派对手游&#xff0c;于2023年1月17日通过审批。该游戏风格可爱软萌&#xff0c;带有社交属性&#xff0c;又是一款开黑聚会的手游&#xff0c;备受年轻人关注。 飞瓜数据&#xff08;B站版&#xff09;显示&#xff0c;元梦之星在…...

Python---循环---while循环

Python中的循环 包括 while循环与for循环&#xff0c;本文以while循环为主。 Python中所有的知识点&#xff0c;都是为了解决某个问题诞生的&#xff0c;就好比中文的汉字&#xff0c;每个汉字都是为了解决某种意思表达而诞生的。 1、什么是循环 现实生活中&#xff0c;也有…...

面试知识点--基础篇

文章目录 前言一、排序1. 冒泡排序2. 选择排序3. 插入排序4. 快速单边循环排序5. 快速双边循环排序6. 二分查找 二、集合1.List2.Map 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、排序 1. 冒泡排序 冒泡排序就是把小的元素往前调或者把大…...

FIFO设计16*8,verilog,源码和视频

名称&#xff1a;FIFO设计16*8&#xff0c;数据显示在数码管 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 使用verilog语言设计一个16*8的FIFO&#xff0c;深度16&#xff0c;宽度为8。可对FIFO进行写和读&#xff0c;并将FIFO读出的数据显示到…...

#力扣:2769. 找出最大的可达成数字@FDDLC

2769. 找出最大的可达成数字 - 力扣&#xff08;LeetCode&#xff09; 一、Java class Solution {public int theMaximumAchievableX(int num, int t) {return num 2*t;} }...

Juniper防火墙SSG-140 session 过高问题

1.SSG-140性能参数 2.问题截图 3.解决方法 &#xff08;1&#xff09;通过telnet 或 consol的方法登录到防火墙&#xff1b; &#xff08;2&#xff09;使用get session 查看总的session会话数&#xff0c;如果大于300 一般属于不正常情况 &#xff08;3&#xff09;使用get…...

Spring Boot 3.2四个新特点提升运行性能

随着 Spring Framework 6.1 和 Spring Boot 3.2 普遍可用性的临近&#xff0c;我们想分享一下 Spring 团队为让开发人员优化其应用程序的运行时效率而做出的几项努力的概述。 我们将介绍以下技术和用例&#xff1a; Spring MVC 将使用 基于JDK 21 虚拟线程 Web 堆栈使用 Spri…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...