当前位置: 首页 > 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…...

Focus架构:多模态视频处理的流式压缩技术

1. Focus架构设计背景与核心挑战视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;作为多模态AI领域的重要突破&#xff0c;正在彻底改变人机交互的方式。这类模型能够同时理解图像/视频内容和自然语言指令&#xff0c;完成从视频描述生成到复杂视觉问答等一系…...

提示工程:优化AI交互的核心技术与实践

1. 提示工程入门指南在人工智能交互领域&#xff0c;提示工程&#xff08;Prompt Engineering&#xff09;已经成为连接人类意图与AI理解的关键桥梁。就像教孩子解数学题需要清晰的题干描述一样&#xff0c;与AI模型有效沟通同样需要特定的表达技巧。我最初接触GPT-3时&#xf…...

DemoGPT:从自然语言描述到完整Web应用的AI智能体编程实践

1. 项目概述&#xff1a;当大模型学会自己写代码最近在GitHub上看到一个项目&#xff0c;叫DemoGPT。初看标题&#xff0c;你可能会觉得这又是一个基于GPT的代码生成工具&#xff0c;没什么新意。但当我深入使用和拆解后&#xff0c;发现它的设计理念和实现方式&#xff0c;完全…...

「一文搞懂 Material Design:Toolbar 到 CollapsingToolbar 全攻略」

「一文搞懂 Material Design&#xff1a;Toolbar 到 CollapsingToolbar 全攻略」 前言 Material Design 是 Google 推出的设计语言&#xff0c;提供了一套统一的 UI 组件和规范。本教程涵盖 Android 中最常用的 Material Design 组件。 ┌──────────────────…...

OpenCV中SVM算法原理与图像分类实战

1. 支持向量机与OpenCV的深度整合支持向量机&#xff08;SVM&#xff09;作为机器学习领域的经典算法&#xff0c;在OpenCV计算机视觉库中有着成熟的实现。我在实际图像分类项目中多次采用这种组合方案&#xff0c;特别是在处理小样本、高维度数据时&#xff0c;SVM的决策边界优…...

笔记软件换了一个又一个,Tolaria让知识库真正属于你

知识管理这件事&#xff0c;说起来容易&#xff0c;做起来却总让人觉得哪里不对劲。笔记软件换了一茬又一茬&#xff0c;从Evernote到Notion&#xff0c;从Obsidian到Logseq&#xff0c;每换一次就要折腾一次迁移&#xff0c;每换一次就要重新适应一套逻辑&#xff0c;到头来真…...

打卡第十四天 | 18.四数之和

题目链接&#xff1a;https://leetcode.cn/problems/4sum/ 视频讲解&#xff1a;https://www.bilibili.com/video/BV1DS4y147US题目描述&#xff1a;解题思路和三数之和类似…...

阿里云服务器利用宝塔搭建个人博客网站

① 云服务器环境准备与安全组配置 在开始搭建之前&#xff0c;我们需要先准备好“地基”。如果你已经拥有一台阿里云 ECS 实例&#xff0c;这一步主要是检查系统状态和网络策略。推荐使用 Ubuntu 20.04/22.04 或 CentOS 7/8 等主流 Linux 发行版&#xff0c;这些系统对宝塔面板…...

肝了三天三夜!最详尽的漏洞扫描工具实战笔记

GobyAWVS 漏洞扫描 提示提示&#xff1a; 本文里面很多工具都是网址&#xff0c;还有站长之家之类的&#xff0c;csdn一直判断成暗链&#xff0c;可以去我自己博客查看完整全文&#xff1a; 多说一句&#xff1a;csdn对网安真的不友好&#xff0c;全文链接都不让放。。。》[好淘…...

UE5新手教程:给你的游戏加个“道具栏”,实现鼠标拖拽放置物品功能

UE5道具栏系统开发指南&#xff1a;从拖拽交互到场景放置全流程 在独立游戏开发中&#xff0c;道具栏系统是连接玩家与游戏世界的核心交互界面。无论是《我的世界》式的物品建造&#xff0c;还是RTS游戏的单位部署&#xff0c;流畅的拖拽放置体验直接影响游戏品质。本文将完整演…...