嵌入式Linux:ARM驱动+QT应用+OpenCV人脸识别项目实现

一、前言:

        这个项目主要分为两部分,客户端(ARM板端)负责利用OpenCV采集人脸数据,利用TCP将人脸数据发送给服务器,然后服务器根据人脸数据进行人脸识别,将识别后的结果返还给客户端,客户端对人脸数据进行解析,得到正确的人脸数据后,打开门锁。门锁涉及硬件操作,这一部分进行驱动的编写、注册与调用等。

项目分为以下几部分内容:

1、项目环境搭建

       1) OpenCV利用Cmake进行编译并导入QT,保证OpenCV可以在服务器端调用;

       2)OpenCV利用Cmake进行交叉编译,移植到ARM端,同时修改相关动态链接库lib,保证OpenCV可以在ARM端进行调用,完成环境图像信息采集工作;

       3)ARM端配置相关的QT运行环境;

       4)在Ubuntu虚拟机中配置QT交叉编译环境,利用QT对客户端程序进行交叉编译,然后移植到ARM端。

2、客户端实现功能

        1)TCP连接。首先建立TCP连接,保证能够和服务器进行通信

        2)数据采集与转换发送。利用Open CV采集Mat图像数据,将图像数据进行两次格式转换,第一次转换是为了将图像在ARM端的LCD屏幕显示,这里将图像转成JPG格式,第二次转换是为了进行数据发送,需要将图像处理为2进制文件,图像发送,利用TCP建立连接,将转换后的二进制数据通过数据流发送

        3)数据接收。客户端同时完成数据接收功能,对JSON数据进行解析,JSON数据由服务器发送过来,数据内容为人脸识别后的人员信息结果。

        4)门禁驱动程序。人脸识别成功,门锁打开的驱动程序编写。这里主要是使用Linux字符设备驱动,通过fileoperation结果体进行响应的open、read函数等进行编写,考虑到分层思想,将程序和硬件进行分层设计,通过Platform总线等进行编写,编写完成后,修改设备树,定义硬件连接端口。

3、服务器端实现功能

        1)建立数据库。一个用来存储人脸注册信息,一个用来存储人脸识别信息,一个用来存储人员进出大门信息。

        2)注册信息。注册界面QT设计,完成注册信息的数据库上传

        3)人脸识别引擎构造。主要用来识别人脸信息,查询人脸信息

        4)识别信息发送至客户端。主要是根据识别的人脸id进行数据库信息查询,将查询的数据打包程JSON数据,利用socket进行发送

        5)细节阐述。服务器程序相对复杂,里面也涉及到图像数据转换、多线程检测与识别等等,后续展开详细分析。

        下面是项目实现图片的一些展示:

服务器端人脸完成注册:

 数据库完成信息录入:

 客户端接收人脸识别数据:

二、ARM板硬件信息:

        STM32MP157板,Linux系统版本为5.4,OpenCV版本为4.5.2,usb摄像头一个,电磁开关一个(门锁)。 

三、项目环境搭建:

1、各种需求包下载

1)cmake安装

下载链接:https://github.com/Kitware/CMake/releases/download/v3.24.1/cmake-3.24.1-windows-x86_64.msi2)QT下载安装,大家可以去QT官网下载

        Window-qt5.14.2下载安装安装

https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-windows-x86-5.14.2.exe

        linux- qt5.14.2下载安装安装

https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-linux-x64-5.14.2.run

        mac-qt5.14.2下载安装

https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg

3)OpenCV下载

        Opencv官网下载opencv4.5.2源码, 和opencv_contrib-4.5.2源码

http:// https://opencv.org/releases/    下载Sources压缩文件即可。(opencv4.5.2)

        然后下载opencv_contrib-4.5.2

https://github.com/opencv/opencv_contrib.git

2、Windows端QT中配置OpenCV

 1)将上述包进行解压

 2)QT进行OpenCV编译

         配置编译器

       在QT中打开opencv4.5.2目录下CMakeList.txt

 

等待一段时间,显示配置完成,如下图中的红框所示

 

 此时不要直接去编译,建议先修改安装路径,并且进行第三方模块选择,点击项目继续进行配置。

 添加face模块

 

 选择OpenCV编译后的安装路径

 选择安装

 点击配置后编译

编译时,选择release版本,qt新手可能会不知道如何配置release版本?点击下图中绿色箭头上边的小电脑进行配置。

 

 3)人脸识别算法库下载

GitHub - SeetaFace6Open/index

3、Ubuntu中配置QT交叉编译环境

        

先写这些,后边有空再给大家更新,大家评论区扣1 或者私信我,获取更多项目信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/205473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】环境变量

文章目录 1. 环境变量的概念2. 常见的环境变量3. 查看环境变量的方法4. 测试PATH5. 和环境变量有关的命令6. 环境变量的组织方式7. 通过代码获取环境变量7.1 通过命令行的第三个参数7.2 通过第三方变量environ 8. 通过系统调用获取9. 环境变量的全局属性 1. 环境变量的概念 **…

函数指针数组指针数组传参的本质字符指针(进阶篇)

🚀 作者:阿辉不一般 🚀 你说呢:不服输的你,他们拿什么赢 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞…

【带头学C++】----- 八、C++面向对象编程 ---- 8.5 struct结构体类型增强使用说明

目录 8.5 struct结构体类型增强使用说明 8.5.1 C结构体可以定义成员函数 8.5.2 c中定义结构体变量可以不加struct关键字 8.6 bool布尔类型关键字 8.5 struct结构体类型增强使用说明 第六章对结构体的使用、内存对齐以及数组、深拷贝和浅拷贝进行了一个详细的说明&#xff0c…

带键扫的LED专用驱动方案

一、基本概述 TM1650 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路。内部集成有MCU输入输出控制数字接口、数据锁存器、LED 驱动、键盘扫描、辉度调节等电路。TM1650 性能稳定、质量可靠、抗干扰能力强,可适用于24 小时长期…

对抗产品团队中的认知偏误:给产品经理的专家建议

今天的产品经理面临着独特的挑战。他们不仅需要设计和构建创新功能,还必须了解这些功能将如何为客户带来价值并推进关键业务目标。如果不加以控制,认知偏差可能会导致您构建的内容与客户想要的内容或业务需求之间不一致。本文将详细阐述产品经理可以避免…

【EI会议征稿】第四届应用数学、建模与智能计算国际学术会议(CAMMIC 2024)

第四届应用数学、建模与智能计算国际学术会议(CAMMIC 2024) 2024 4th International Conference on Applied Mathematics, Modelling and Intelligent Computing 第四届应用数学、建模与智能计算国际学术会议(CAMMIC 2024)将于…

超详细!Opencv人脸识别!附源码!

一、新建环境 注意!!确定后需要关闭项目,重新打开,终端的环境才会变化!! 二、下载安装包(只需要3个即可) 1. 下载dlib包 pip install dlib-19.19.0-cp38-cp38-win_amd64.whl.whl …

XTU OJ 1339 Interprime 学习笔记

链接 传送门 代码 #include<bits/stdc.h> using namespace std;const int N1e610; //78498 我计算了一下&#xff0c;6个0的范围内有这么多个素数&#xff0c;所以开这么大的数组存素数 //计算的代码是一个循环 int prime[80000]; int a[N],s[N];//s数组是前缀和数组b…

力扣 --- 删除有序数组中的重复项 II

题目描述&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…

时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测

时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测 目录 时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 使用先进的机器学习技术和优化算法…

Ubuntu systemd-analyze命令(系统启动性能分析工具:分析系统启动时间,找出可能导致启动缓慢的原因)

文章目录 Ubuntu systemd-analyze命令剖析目录简介systemd与systemd-analyze工作原理 安装和使用命令参数详解用例与示例显示启动时间&#xff08;systemd-analyze time&#xff09;列出启动过程中各个服务的启动时间&#xff08;systemd-analyze blame&#xff09;显示系统启动…

没想法、没经验做不了BI?求你,别再自我pua了

“我没想法&#xff0c;没经验&#xff0c;做不了BI报表&#xff0c;是不是不适合现代职场啊&#xff01;”在网上看到不少姐妹有这种迷惘发言&#xff0c;真的就&#xff0c;恨铁不成钢。求你了&#xff0c;别再自我pua了。你没想法没经验多正常啊&#xff0c;因为你没用过BI报…

Django 模板引擎 (四)

一、Django模板引擎 一个强大的工具&#xff0c;用于在HTML页面中嵌入动态内容。它使用一种被称为Django模板语言&#xff08;Django Template Language&#xff09;的简单而强大的语法来处理模板。该模板语言使用”{% %}”进行标记&#xff0c;用于执行各种操作。 二、Django…

指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)

文章目录 &#x1f680;前言&#x1f680;两段有趣的代码✈️typedef关键字 &#x1f680;指针数组&#x1f680;简易计算器的实现 &#x1f680;前言 基于阿辉前两篇博客指针的基础篇和进阶篇对于指针的了解&#xff0c;那么今天阿辉将为大家介绍C语言的指针剩下的部分&#…

计算机组成原理期中题库

计算机组成原理题目集 2.1 下面是关于计算机中存储器容量单位的叙述&#xff0c;其中错误的是 A. 最基本的计量单位是字节&#xff08;Byte&#xff09;&#xff0c;一个字节等于8bit B. 一台计算机的编址单位、指令字长和数据字长都一样&#xff0c;且是字节的整数倍 C. 最小…

零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例

零基础编程入门视频教程&#xff0c;零基础编程从哪学起&#xff0c;分享中文编程工具构件实例 1、零基础编程入门视频教程&#xff0c;系统化编程教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 2、零基础编程从哪学起 建议初学…

多多跨境跑出高质量发展“加速度”,解锁拼多多Q3财报背后的王牌

互联网红利渐趋消退&#xff0c;用户拉新难度加大&#xff0c;这些现象也在表明过去电子商务依靠资本、流量快速增长的发展模式已经成为过去式。由高速发展转为高质量发展&#xff0c;在今天每一个经济体与宏观经济发展态势一般&#xff0c;发展的“质量”价值正在被放大开来。…

Zabbix“专家坐诊”第213期问答汇总

问题一 Q&#xff1a;Zabbix报错&#xff1a;Zabbix server is not running :the information displayed may not be current&#xff0c;是什么问题呢&#xff1f; A&#xff1a; 1、数据库软件问题导致导入的zabbix数据库不完整2、zabbix Server配置问题3、zabbix-server没…

超赞!让vue开发效率翻倍的工具分享

分享一个很实用的工具库 VueUse&#xff0c;它是基于 Vue Composition Api&#xff0c;也就是组合式API。支持在Vue2和Vue3项目中进行使用&#xff0c;据说是目前世界上Star最高的同类型库之一。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 它的初衷就…

2023.11.29 深度学习框架理解

2023.11.29 深度学习框架理解 对深度学习框架进行复习&#xff0c;选最简单的“三好学生”问题的四个变化&#xff0c;简要总结其具体思路。 深度学习一开始就是为分类问题研究的&#xff0c;因此其框架的设计都是基于分类的问题&#xff0c;虽然现在也已经演变为可以执行多种…