嵌入式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 或者私信我,获取更多项目信息

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请大数据把奥威BI分析工具推给每一个财务!

这个财务指标怎么算?那些数据什么时候能拿到?看完报表,发现某部门上个月的支出涨幅过大,想了解原因怎么办?……财务人,你是不是每个月都把时间消耗在这些事情上了?那你可得快接住这个BI大数据分…

网站文章采集软件大盘点

在信息时代,随着互联网的不断发展和普及,获取、整理和利用海量信息成为各行业的共同挑战。在这个背景下,网站文章采集技术应运而生,成为满足信息需求的重要工具。本文将对网站文章采集及其相关软件进行深入探讨,为读者…

Golang语言基础之切片

概述 数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性 func arraySum(x [3]int) int{sum : 0for _, v : range x{sum sum v}return sum } 这个求和函数只能接受 [3]int 类型,其他的都不支持。 切片 切片(Slic…

virustotal的使用

www.virustotal.com是一个恶意代码扫描网站,提交时需要验证码。 该网站有近百个病毒引擎的支持。 该网站最有用的地方在于,这是一个交互式的恶意代码检测网站,这样的模式有一个隐形的福利,那就是为病毒木马爱好者提供了攻防一体…

市面上这么多SD-WAN服务商,究竟有何不同?

随着数字化浪潮的不断发展,企业网络已经成为了现代企业中不可缺少的一部分。而提供企业组网服务的SD-WAN服务商也呈现出快速增长的趋势。但是,市场上有这么多SD-WAN服务商,各个服务商技术实现方案非常相似,那么这些服务商之间到底…

人工智能驱动的医疗辅助:陪诊系统的技术原理与应用

随着人工智能技术的不断发展,医疗领域也迎来了新的可能性。本文将深入探讨陪诊系统的技术原理及其在医疗领域中的应用。我们将重点关注人工智能的核心概念,如自然语言处理、机器学习和语音识别,以解释陪诊系统是如何在医疗环境中发挥作用的。…

html5各行各业官网模板源码下载(1)

文章目录 1.来源2.源码模板2.1 HTML5白色简洁设计师网站模板 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134682321 html5各行各业官网模板源码下载,这个主题覆盖各行业的html官网模板,效果模…

图解Redis适用场景

Redis以其速度而闻名。 1 业务数据缓存 1.1 通用数据缓存 string,int,list,map。Redis 最常见的用例是缓存对象以加速 Web 应用程序。 此用例中,Redis 将频繁请求的数据存储在内存。允许 Web 服务器快速返回频繁访问的数据。这…

Make sure bypassing Vue built-in sanitization is safe here.

一、问题描述 二、问题分析 XSS(跨站脚本攻击) XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括J…

【注册表】Sublime Text添加到右键菜单

官网下载 windows下地地址: http://www.sublimetext.com/download_thanks?targetwin-x64设置右键菜单和菜单小图标 win R打开运行,并输入regedit打开注册表编辑器依次找到HKEY_CLASSESS_ROOT -> * -> Shell,下面新建项, 这个项的名…

【TinyALSA全解析(三)】tinyplay、tincap、pcm_open源码解析

tinyplay、tincap、pcm_open源码解析 一、本文的目的二、tinyplay.c源码分析三、tinycap.c源码分析四、pcm.c如何调度到Linux Kernel4.1 pcm_open解析4.1.1 pcm_open的主要流程4.1.2 流程说明4.1.3 调用方法 4.2 pcm_write解析 /*********************************************…

图解系列--HTTPS,认证

确保 Web 安全的HTTPS 1.HTTP 的缺点 1.1.通信使用明文可能会被窃听 加密处理防止被窃听 加密的对象可以有这么几个。 (1).通信的加密 HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或TLS&#xff…

猜-MISC-bugku-解题步骤

——CTF解题专栏—— 题目信息: 题目:猜 作者:harry 提示: 解题附件:flag格式key{图中人物名字全拼} 解题思路: 这......头都没有,让我guess???详细信息看…

NASM安装和结合nodepad++进行编译的过程

mov ax,0x30 mov bx,0xc0 add ax,bx times 502 db 0 db 0x55 db 0xAA nasm安装地址: https://www.nasm.us/ 下载exe安装 在命令行提示符输入nasm编译命令 nasm exam.asm -f bin -o exam.bin 此时输入回车将会执行编译过程。 1,启动NotePad,在菜单上选…

web前端tips:js继承——寄生组合式继承

上篇文章给大家分享了 js继承中的 寄生式继承 web前端tips:js继承——寄生式继承 今天给大家分享一下 js 继承中的 寄生组合式继承 寄生组合式继承 寄生组合式继承是一种结合了寄生式继承和组合式继承的方式,它的目标是减少组合式继承中多余的调用父…

【Java 并发编程】进程线程、lock、设计模式、线程池...

博主:_LJaXi Or 東方幻想郷 专栏: Java | 从入门到入坟 Java 并发编程 并发编程多线程的入门类和接口线程组和线程优先级线程的状态及主要转化方法线程间的通信重排序和 happens-beforevolatilesynchronized 与锁CAS 与原子操作AQS计划任务Stream 并行计…

开放式耳机哪个品牌好用?超好用的耳机推荐,新手小白必看

在当今数不胜数的音频品牌中,寻找一款优秀的开放式耳机成为了许多音乐爱好者和新手小白的共同关注点,开放式耳机以其通透的音质和舒适的佩戴感受受到了广泛好评,但市场上的选择却让人眼花缭乱, 为了帮助新手小白在这个耳机的海洋…

从零开始:打造自己的抖音核销工具小程序

对于商家而言,如何高效核销活动中的抖音优惠券成为一项挑战。在这篇文章中,我们将探讨如何从零开始,打造一个个性化、高效的抖音核销工具小程序。 第一步:明确需求和目标 在动手之前,我们需要明确自己的需求和目标。…

ICC2:使用analyze_lib_cell_placement检查lib cell的pass rate

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 在place之前需要使analyze_lib_cell_placement命令去检查lib cell在当前的site row/power plan/legalize设置的环境下能够正常place和legalize。 下面分享一个脚本去报告pass rate低于2%的lib cell…

【Amazon】安装Cloudwatch代理监控EC2

文章目录 一、实验概要二、实验操作步骤2.1 创建 CloudWatch 代理运行角色2.2 安装 CloudWatch 代理软件包2.3 使用 CloudWatch代理收集指标2.4 CloudWatch指标收集确认 三、参考链接 一、实验概要 使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器中收集指标、日志和跟踪信…