嵌入式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大数据分…

[个人笔记] Apache2.4配置TLS1.3安装openssl1.1.1

Linux - 运维篇 第二章 Apache2.4配置TLS1.3&安装openssl1.1.1 Linux - 运维篇系列文章回顾Apache2.4配置TLS1.3&安装openssl1.1.1参考来源 系列文章回顾 第一章 php-fpm编译和使用openssl扩展 Apache2.4配置TLS1.3&安装openssl1.1.1 [rootlocalhost ~]# yum ins…

网站文章采集软件大盘点

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

@Openssh【7.x升级9.0版(Centos7.9,rpm)】

文章目录 1.版本查看2.配置备份3.软件包openssh9.0下载4.升级openssh9.0版本5.配置备份恢复6.服务器启动验证及问题排查 1.版本查看 #系统版本 [rootHZLOPENSSHTEST ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)#openssh版本 [rootHZLOPENSSHTEST ~]# r…

Linux文件截断命令(truncate head tail dd)

目录 一、truncate功能概述实例(可用于删除文件末尾指定大小的内容) 二、head功能概述实例(可用于删除文件末尾指定大小的内容) 三、tail功能概述:实例(可用于删除文件开头指定大小的内容) 四、…

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服务商,各个服务商技术实现方案非常相似,那么这些服务商之间到底…

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

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

配置spring boot3后redis NOAUTH Authentication required

升级到spring boot3之后,redis报错 redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required检查完密码之后都没有问题,后来发现是配置的原因。 在application.properties配置文件里 加上.data 原来是spring.redis.passwor…

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,下面新建项, 这个项的名…

PAT乙级(CPP基础STL)

万能头&#xff0c;库 #include<bits/stdc.h> string数组 //string的初始化 string s"abc"; string(6,A); //string取子串&#xff08;起始位置&#xff0c;长度&#xff09; string s"Hello World!"; cout << s.substr(6) << endl…

【新手解答7】深入探索 C 语言:代码缩进 + 变量作用域、静态变量 + 变量名和函数名重名

C语言的相关问题解答 写在最前面问题一&#xff1a;代码缩进问题二&#xff1a;C语言中的变量作用域变量作用域静态变量总结 问题三&#xff1a;变量名和函数名重名相关解析变量 sumC 语言中&#xff0c;sum 并不是一个内置的函数名或保留字变量名和函数名重名&#xff1f;总结…

Oracle中mybatis批量更新报错ORA-00933:SQL命令未正确结束

项目场景&#xff1a; 最近在开发项目的过程中遇见了这个问题&#xff1a;Oracle中批量更新的时候报错 ORA-00933&#xff1a;SQL命令未正确结束 问题描述 mybatis批量更新报错ORA-00933&#xff1a;SQL命令未正确结束 <foreach item"item" index"index&q…

【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 协议中没有加密机制&#xff0c;但可以通过和 SSL&#xff08;Secure Socket Layer&#xff0c;安全套接层&#xff09;或TLS&#xff…

android 特殊权限处理

运行时权限之特殊权限android.permission.SYSTEM_ALERT_WINDOW 以下为特殊权限的一种申请写法(android.permission.SYSTEM_ALERT_WINDOW) 在做双屏异显功能时,需要使用到Presentation, 使用Presentation需要android.permission.SYSTEM_ALERT_WINDOW权限, 于是就使用谷歌的权限框…