嵌入式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.rhkb.cn/news/207218.html

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

相关文章

Unity中Shader编译目标渲染器

文章目录 前言一、Unity在打包时,会把Shader编译成不同平台对应的代码我们在状态栏,可以看见我们目前所处于的目标平台 二、在Unity中,怎么指定目标平台1、#pragma only_renderers2、#pragma exclude_renderers 三、我们测试一下看看效果1、 …

C语言贪吃蛇(有详细注释)

这个贪吃蛇是在比特特训营里学到的,同时我还写了用EasyX图形库实现的图形化贪吃蛇,含有每个函数的实现以及游戏中各种细节的讲解,感兴趣的可以去看一看。 贪吃蛇小游戏 实现效果 以下就是源码,感兴趣的小伙伴可以cv自己玩一玩改…

Node.js+Express+Nodemon+Socket.IO构建Web实时通信

陈拓 2023/11/23-2023/11/27 1. 简介 Websocket WebSocket是一种在单个TCP连接上提供全双工通讯的协议。特别适合需要持续数据交换的服务,例如在线游戏、实时交易系统等。 Websocket与Ajax之间的区别 Ajax代表异步JavaScript和XML。它被用作一组Web开发技术&…

java实战(四):编写学生信息管理系统页面·

1.要求 编写程序 实现表格的输入和编辑功能。界面如下: 1、用户按插入键后,把学号、姓名和成绩插入到最后一行,序号显示当前的行号。 2、当用户选中表格的某一行时,按删除按钮,则这一行从表格中删除 3、编辑功能&am…

Linux常用命令——vi命令

文章目录 vi的工作模式常用快捷键提示和技巧结论 Linux环境下的vi编辑器不仅以其强大的功能著称,也因其快捷键而闻名。这些快捷键可以显著提高编辑效率,是每个使用vi的人必须掌握的。下面将扩展介绍vi的一些常用快捷键。 vi的工作模式 vi主要有两种模式…

Linux信号超详细剖析

预备知识: 一、信号产生(OS发给进程) 1、键盘组合键 Linux中,一次登录对应一个终端,bash/shell。且只允许一个进程是前台进程,默认就是bash/shell,其它都是后台进程。获取键盘输入的是前台进程。 Ctrlc: 向前台进程…

【android开发-01】android中toast的用法介绍

1,android中toast的作用 在Android开发中,Toast是一种用于向用户显示简短消息的轻量级对话框。它通常用于向用户提供一些即时的反馈信息,例如操作结果、提示或警告。 Toast的主要作用如下: 提供反馈:Toast可以在用户…

每日一练2023.12.1——帅到没朋友【PTA】

题目链接:L1-020 帅到没朋友 题目要求: 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。 输入格式: 输入第一行给出一个正整数N(≤100)&…

【MySQL】视图:简化查询

文章目录 create view … as创建视图更改或删除视图drop view 删除视图replace关键字:更改视图 可更新视图with check option子句:防止行被删除视图的其他优点简化查询减小数据库设计改动的影响使用视图限制基础表访问 create view … as创建视图 把常用…

分布式锁,分布式锁应该具备哪些条件,分布式锁的实现方式有:基于Zookeeper实现、Redis实现、数据库实现

文章目录 分布式锁0-1分布式锁--包含CAP理论模型概述分布式锁:分布式锁应该具备哪些条件:分布式锁的业务场景: 分布式锁的实现方式有:基于Zookeeper - 分布式锁实现思想优缺点基于Redis - 分布式锁实现思想实现思想的具体步骤&…

Linux驱动开发——网络设备驱动(实战篇)

目录 四、 网络设备驱动实例 五、DM9000 网络设备驱动代码分析 六、NAPI 七、习题 书接上回: Linux驱动开发——网络设备驱动(理论篇)-CSDN博客 (没看过上面博客的同学,skb是linux对于网络套接字缓冲区的一个虚拟…

【微服务 SpringCloudAlibaba】实用篇 · Nacos配置中心

微服务(6) 文章目录 微服务(6)1. 统一配置管理1.1 在nacos中添加配置文件1.2 从微服务拉取配置 2. 配置热更新2.1 方式一2.2 方式二 3. 配置共享1)添加一个环境共享配置2)在user-service中读取共享配置3&am…

vue2 el-table 封装

vue2 el-table 封装 在 custom 文件夹下面创建 tableList.vue直接上代码&#xff08;代码比较多&#xff0c;复制可直接用&#xff09; <template><div class"mp-list"><el-tableref"multipleTable"class"mp-custom-table":dat…

Ubuntu18.4中安装wkhtmltopdf + Odoo16配置【二】

deepin Linux 安装wkhtmltopdf 1、先从官网的链接里下载linux对应的包 wkhtmltopdf/wkhtmltopdf 下载需要的版本&#xff0c;推荐版本&#xff0c;新测有效&#xff1a; wkhtmltox-0.12.4_linux-generic-amd64.tar.xz 2、解压下载的文件 解压后会有一个wkhtmltox文件夹 3…

【opencv】计算机视觉基础知识

目录 前言 1、什么是计算机视觉 2、图片处理基础操作 2.1 图片处理&#xff1a;读入图像 2.2 图片处理&#xff1a;显示图像 2.3 图片处理&#xff1a;图像保存 3、图像处理入门基础 3.1 图像成像原理介绍 3.2 图像分类 3.2.1 二值图像 3.2.2灰度图像 3.2.3彩色图像…

党建引领·和谐共建——赤岗街首届微型社区养老服务公益博览会开幕

服务咨询平台&#xff0c;让社区长者更便捷地了解到养老相关政策、信息。 本次活动由赤岗街公共卫生委员会、赤岗街道办事处、中国老龄事业发展基金会老年维权基金管理委员会主办&#xff0c;珠影社区居委会、广州市穗星社会工作服务中心、广州市盈泽信息科技有限公司承办&…

4/5G互操作 EPSFB讲解

今天我们来讲一下4/5G之间之间互操作&#xff0c;以及5G的EPSFB是基于什么实现的~ 目录 4/5G互操作 重选 切换 基于覆盖的切换 基于业务的切换 两个面试问题 想要加快4G切换5G的速度&#xff0c;调哪个参数怎么调高效&#xff1f; 想要减慢5G切换4G的速度调哪个参数怎…

项目计划阶段项目管理文档(风险管理、软件估计、立项、计划)

项目计划过程支撑文件&#xff1a; 1、风险和机会管理表 2、软件估计书模板 3、立项通知 4、项目计划书 软件开发全文档获取&#xff1a;点我获取 1、风险和机会管理表 2、软件估计书模板 3、立项通知 4、项目计划模板

Spring简单的存储和读取

前言 前面讲了spring的创建&#xff0c;现在说说关于Bean和五大类注解 一、Bean是什么&#xff1f; 在 Java 语⾔中对象也叫做 Bean&#xff0c;所以后⾯咱们再遇到对象就以 Bean 著称。这篇文章还是以spring创建为主。 二、存储对象 2.1 俩种存储方式 需要在 spring-conf…

A++ 敏捷开发-1 如何改善

1 如何改善 敏捷开发过程改进案例 5月 A公司一直专门为某电信公司提供针对客服、线上播放等服务服务。 张工是公司的中层管理者&#xff0c;管理好几个开发团队&#xff0c;有5位项目经理向他汇报。 他听说老同学的团队都开始用敏捷开发&#xff0c;很感兴趣&#xff0c;便参…