开源毕业设计:基于嵌入式ARM-Linux的应用OpenCV和QT实现的人脸识别系统(源码+论文)

2023-11-04

毕业一载有余,把毕业设计作品分享一下,希望能帮助到有需要的同学们。

资料获取:

帮助/答疑/辅导...等请联系博主,请点如下链接:

linux_face.txt · zengzr/share_contact - Gitee.com

毕设课题选题参考:

毕业设计:电子信息/计算机专业毕业设计选题参考(嵌入式linux/单片机STM32/web/网络/图像)https://blog.csdn.net/qq_30155503/article/details/120339296https://blog.csdn.net/qq_30155503/article/details/120339296

简介:

本设计基于linux操作系统,由客户端(门禁设备)和服务器(后台处理中心)组成,通过以太网形成组网,实现一个人脸识别门禁系统。客户端为嵌入式Linux设备,采用QT库显示界面,通过摄像头采集图像。服务器为PC上 Ubuntu系统,采用QT库显示界面,以OpenCV库为基础进行图像处理,采用基于Haar特征的人脸检测及LBPH人脸识别算法。客户端负责采集图像并上传服务器,以及控制门禁设备;服务器负责对图像进行人脸识别,以及增删人脸等的用户管理,是整个系统的处理中心。

系统实物效果图例:

以下摘取论文中部分内容,简单介绍:

论 文 目 录

1 绪论... 1

1.1   课题研究的背景及意义... 1

1.2 国内外研究的现状及发展趋势... 1

1.3 论文主要的研究内容及章节安排... 2

2 系统整体设计方案及实现框架... 3

2.1 系统设计方案... 3

2.2 系统实现框架... 4

3 客户端嵌入式门禁设备的设计及实现... 6

3.1 嵌入式系统概述... 6

3.2 嵌入式Linux平台运行环境的搭建... 6

3.2.1 嵌入式Linux平台环境搭建概述... 6

3.2.2 嵌入式Linux系统的移植... 7

3.2.3 第三方库的移植... 10

3.3 嵌入式Linux平台应用程序的设计及实现... 13

3.3.1 图像采集模块的设计及实现... 13

3.3.2 图像处理模块的设计及实现... 14

3.3.3 显示模块的设计及实现... 15

3.3.4 网络通信模块的设计及实现... 16

3.3.5 外围设备的设计及实现... 18

4 服务器应用程序和人脸识别功能的设计及实现... 20

4.1显示模块的设计及实现... 20

4.2 网络通信模块的设计及实现... 20

4.3 人脸识别实现流程概述... 21

4.4 人脸库的建立及模型训练... 22

4.5 人脸检测算法的实现... 23

4.6 人脸识别算法的实现... 24

4.6.1 LBPH算法的原理... 24

4.6.2 LBPH算法的应用... 27

4.7 用户管理功能的设计及实现... 29

4.7.1 添加用户功能的实现... 29

4.7.2 删除用户功能的实现... 30

5 系统功能的测试展示及结果分析... 31

5.1 预期功能概述... 31

5.2 实现功能的测试... 32

5.3 系统的结果分析... 39

6 总结与展望... 40

参考文献... 41

致谢... 42

系统整体设计方案及实现框架

2.1 系统设计方案

本系统整体上实现一个基于嵌入式技术和人脸识别技术的门禁系统,大致可分为两个大模块:客户端-嵌入式门禁设备、服务器-后台处理和管理中心。

  1. 客户端:核心采用ARM系列芯片-S5PV210(Cortex-a8),外围有USB摄像头、LCD显示屏、DM9000网卡及其他一些必要硬件。实现界面显示、图像采集、图像处理、与服务器网络通信(TCP连接)、控制门锁等功能。
  2. 服务器:采用PC机上运行的Ubuntu系统,外围有摄像头。实现界面显示、与客户端网络通信、图像处理、人脸识别、用户管理等功能,是整个门禁系统的管理中心。

系统框图:

图2.1 系统整体设计方案框架图

系统的工作流程方案:系统启动,服务器加载人脸库数据,并与客户端连接;客户端通过摄像头采集图像并显示于LCD,同时通过网络将图像数据发送至服务器;服务器收到图像数据后,对图像进行处理(数据格式转换),人脸检测与识别,同时将图像显示于界面上,并将经人脸检测与识别后的结果反馈至客户端;客户端根据反馈结果选择控制门锁的开关。至此,完成一次完整的工作流程,大致流程如下:

图2.2 系统的大致工作流程

2.2 系统实现框架

系统整体设计方案中已列出需求,现需对方案中的每个功能进行分析并确定其实现方法。通过查阅大量资料,功能及其实现整理如下:

  1. 客户端-嵌入式ARM板上的功能:
  1. 嵌入式平台:CPU采用三星公司的S5PV210(Cortex-a8),操作系统采用linux-2.6.35.7内核,选用粤嵌公司的GEC-210开发板符合上述条件;
  2. 图像采集功能:硬件使用USB摄像头,软件采用视频驱动V4L2子系统驱动架构;
  3. 图像处理功能:主要指V4L2采集的图像、OpenCV 图像、QT图像三者之间的格式相互转换,需要借助OpenCV 库、QT库及自编的函数实现;
  4. 界面显示功能:显示器为LCD屏,采用QT库进行界面的设计布局和显示;
  5. 网络通信功能:采用linux系统的socket套接字通信,TCP连接方式;
  6. 门锁控制功能:根据门锁的驱动方式,采用GPIO驱动来控制;

  1. 服务器-PC机上Ubuntu系统:
  1. PC系统平台:采用Ubuntu-14.04版本,运行于Win7上的虚拟机上;
  2. 界面显示功能:同样采用QT进行显示;
  3. 网络通信功能:同样采用linux的socket通信,TCP方式;
  4. 人脸识别功能:采用OpenCV 库进行人脸识别相关的算法,包括人脸库模型训练、人脸检测、人脸识别等功能;
  5. 图像处理功能:主要指V4L2采集的图像、OpenCV 图像、QT图像三者之间的格式相互转换,需要借助OpenCV 库、QT库及自编的函数实现;
  6. 用户管理功能:包括添加用户、删除用户等,以自编函数实现;

5.2 实现功能的测试

测试是项目开发中的一个重要环节,有利于对整个项目开发的完成情况作出分析,找出存在问题,有利于不断完善作品,提高其完整性及稳定性。

对本设计中的预期功能作针对性测试,各功能模块的实际测试结果如下:

1、客户端的图像采集及界面显示功能,在ARM板上的实际效果,如图:


图5.1 客户端界面

由上图可知,界面上的背景图、信息标签等组件显示于设定的位置上,说明功能正常。

2、客户端的图像采集及显示功能,ARM板上由摄像头进行采集、LCD显示,效果如图:

图5.2 ARM板的图像采集及显示

上图中,上方为摄像头,LCD显示的画面为摄像头所采集,通过移动摄像头可见捕捉到的画面也为摄像头所对着的地方,显示画面实时性高,质量好,无花屏、卡顿等现象,证明该功能正常。

3、服务器的界面显示功能,在服务器Ubuntu上显示的主界面,如图:

图5.3 服务器界面

由图可知,图片、标签等均显示于设定位置上,功能正常。

4、网络数据传输功能: 以图像传输为例进行测试,在ARM板上采集的图像,通过以太网传输到服务器Ubuntu上,功能正常表现为在Ubuntu上可显示实时画面,并与ARM板上显示的图像同步,如图:

图5.4 图像传输

上图中,服务器显示的图像为客户端所采集,移动客户端的摄像头,画面也随之发生变化,实现性高,无花屏、卡顿等现在,证明功能正常。

5、人脸检测功能:当摄像头采集到一个完整的正脸时,ARM板上LCD显示如图:

图5.5 人脸检测

由上图可见,人脸部分被一个矩形框标出,标记位置正确,移动人脸,矩形框会随着人脸移动变化,说明功能正常。

6、人脸识别及设备控制功能:

当视频流中出现的人脸,不是人脸库中某一人脸时,现象如图5.5,该人脸通过多角度的测试均未成功通过人脸识别验证,相似度仅为59%,无法打开门锁控制器(下方LED开关指示灯不亮);

当出现的人脸为人脸库中的某一人脸时,现象如图:

图5.6 识别人脸库中某一人脸

上图中,提示识别成功,人脸标签为10,相似度为80%,名字为“QiuQing”,同时,门锁控制器成功开启(开关指示灯变亮),由此知,功能正常。

7、添加人脸功能:用一个未录入人脸库的人脸进行测试,为方便起见,将用上节中不能通过人脸识别测试的人脸进行添加。编辑输入框内容“ZengZhaorong”,点击添加人脸,现象如图:
 

图5.7 添加人脸

上图中,已打开服务器Ubuntu上的摄像头,当显示检测到人脸时点击拍照按钮,成功拍下人脸,并右下角显示已拍人脸,连拍10张后,提示添加成功。

成功添加人脸后,再次到客户端ARM板上测试人脸识别功能,现象如图:

图5.8 添加人脸后的人脸识别

由上图知,提示识别成功,人脸标签为1,相似度为81%,名字为“ZengZhaorong”,同时,门锁控制器成功开启,由此知,添加人脸功能正常。

8、删除人脸功能:将上节添加的人脸再次删除。在删除人脸选择栏,选择名字 “ZengZhaorong”,点击删除,现象如图:

图5.9 删除人脸

上图中,提示是否确认删除,点击“Yes”,即提示删除人脸成功。再次用已删除的人脸测试人脸识别功能,现象如图:

图5.10 删除人脸后的人脸识别

上图中,已删除的人脸,通过多角度试验,仍无法通过验证,相似度为63%,证明删除人脸功能正常。

历史版本源码:详细记录开发过程如何一步一步搭建工程,逐个功能实现的。

资料:项目源码、论文、答辩PPT、环境搭建及运行说明文档、历史版本源码、演示视频。。。

 资料下载:

帮助/答疑/辅导...等请联系博主,请点如下链接:

linux_face.txt · zengzr/share_contact - Gitee.com

博主新作:升级版人脸识别系统(完整源码 + 从0开始教程 + 下载就能用的环境 + 详细设计文档):

完全毕设教程:Linux上Opencv与Qt实现的人脸识别的考勤点名/门禁系统(PC与嵌入式ARM版本)

可做毕业设计、课程设计等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开源毕业设计:基于嵌入式ARM-Linux的应用OpenCV和QT实现的人脸识别系统(源码+论文) 的相关文章

  • 将 UTC 格式的 QDateTime 转换为本地系统时间

    我从这样的字符串构造 QDateTime QDateTime date QDateTime fromString 2010 10 25T10 28 58 570Z yyyy MM ddTHH mm ss zzzZ 我知道date是 UTC
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 当从 html 文件读取 Unicode 内容时,为什么 Unicode 字体在 QTextBrowser 中无法正确显示?

    我正在读一本html文件 该文件基本上包含Unicode案文如下 b akko sati kru akkh ti khy abbahati b h b But the QText浏览器不解释Unicode字体 所以QText浏览器显示如下
  • Qt 图表和数据可视化小部件

    我已经安装了 Qt 5 7 来尝试 Qt 图表和 Qt 数据可视化 但我在 Qt Designer 和 Qt Creator 中都找不到新的小部件 有什么建议我应该做什么才能让新的小部件出现在设计器中 我今天遇到了完全相同的问题 默认情况下
  • 如何在 Qt simple 上解密/加密某些字符串(例如密码)

    这是我得到的 Qt SDK版本4 6 2 视窗XP 问题 我怎样才能简单地加密和简单地加密QString价值 我需要它能够将一些加密的字符串保存到 INI 文件中 并在重新打开应用程序后将字符串加密为正常的密码字符串值 PS 我正在寻找简单
  • QChart 对大数据集无响应

    我的这段代码适用于高达 1000 的数据大小 现在我用 65536 个点对其进行了测试 series new QLineSeries QList
  • 提取二值图像中的最中心区域

    我正在处理二进制图像 之前使用此代码来查找二进制图像中的最大区域 Use the hue value to convert to binary thresh 20 thresh thresh img cv2 threshold h thre
  • 将图像加载到现有 Mat 中

    有没有办法将图像加载到现有的 Mat 中 如果没有 有没有办法控制 OpenCV 在调用 cv imread 时分配内存的位置 我只是为您的类创建一个构造函数 该构造函数接受 imread 的输入参数并将图像直接加载 并分配 到您的类中 所
  • 相机校准:如何正确进行

    我正在尝试使用棋盘格通过众所周知的张氏方法进行校准 然后进行捆绑调整 该方法在 Matlab 和 OpenCV 中都可用 有很多经验指南 但从我个人的经验来看 准确性是相当随机的 它有时可能非常好 但有时也可能非常糟糕 实际上 只需将棋盘放
  • 无法将 [未定义] 分配给 QColor

    我正在使用 Qt 5 11 构建 运行代码 代码中有QML风格如下 Button style delegate Component id enabledButtonStyle ButtonStyle padding top 0 paddin
  • 如何用OpenCV解决图像处理相机IO延迟

    我有一个 OpenCV 程序 其工作原理如下 VideoCapture cap 0 Mat frame while true cap gt gt frame myprocess frame 问题是如果myprocess耗时较长 超过相机的I
  • C++ QT libXL 错误:“启动期间程序退出,代码为 0xc0000135”

    我正在尝试编写一个使用 libXL 的 QT 应用程序 但是当我尝试编译时 我收到一个弹出框 显示 During Startup program exited with code 0xc0000135 我已经准确地找出了哪一行导致了问题 它
  • 如何在python 3.8中安装opencv-python

    我在 pycharm 中安装 opencv python 时遇到问题 打开 pycharm 后 我单击 设置 然后单击 项目解释器 单击 并搜索正确的模块 我开始安装 但失败了 Could not find a version that s
  • C++ OpenCV 3.4 / FFMPEG 3.4.1 VideoWriter 和 MP4 输出文件格式

    我正在运行 Linux 内核 4 9 35 ti r44 的 ARM BeagleBone X 15 Debian 机器 在我的 C Qt 5 应用程序中 我想将 cv Mat 帧保存为 MP4 格式视频 我安装了 libx264 并从头开
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 如何使用bind将成员函数作为函数指针传递?

    我试图将成员函数作为函数指针传递 这样我就不需要依赖单例或全局函数来处理 Qt 5 中的 Qt 消息 据我所知 我的 std function 是正确的类型 它具有正确的签名 并且绑定应该允许我插入隐式this指针 本质上是将成员函数传递为
  • Alpha 混合可消除图像中的接缝

    我缝合了两张图像 但在最终图像中存在可见的接缝 我正在尝试使用阿尔法混合去除那条接缝 我知道 Alpha 混合是使用cvAddweight 函数 但在此函数参数是两个图像 alpha beta gamma和目的地 我正在服用gamma 0
  • Qt 和 MOC 的困境与简单的制作

    我想这更像是一个 GNU Make 问题 而不是 Qt 和 moc 但这里是 我有一个包含多个目录Q OBJECTS 我有一些简单的代码 它收集所有这些 例如 MOCS shell grep l Q OBJECT HEADERS Assum
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem

随机推荐

  • Intellij idea 导入 jdbc

    第一步 去官网https dev mysql com downloads connector j 下载驱动程序 第二步 解压压缩包 记住路径 第三步 打开你的idea工程 打开Project Structure Modules gt gt
  • RabbitMQ - 死信、TTL原理、延迟队列安装和配置

    目录 一 死信交换机 1 1 什么是死信交换机 1 2 TTL 1 2 1 什么是 TTL 1 2 2 通过 TTL 模拟触发死信 二 延迟队列 2 1 什么是延迟队列 2 2 配置延迟队列插件 2 2 1 延迟队列配置 a 下载镜像 b
  • pyhive报错Could not start SASL: b‘Error in sasl_client_start (-4) SASL(-4)

    python3连接hive 1 安装对应依赖 2 连接hive 3 常见报错 1 安装对应依赖 pip install sasl pip install thrift pip install thrift sasl pip install
  • 快速上手Cruisecontrol

    1 Cruisecontrol的概述 CruiseControl是一种持续集成过程的框架 包括了邮件通知 ant和各种源码控制工具的插件 并提供web接口 用于查看当前和以前的build的结果 2 Cruisecontrol的安装 2 1
  • windows下免费本地部署类ChatGpt的国产ChatGLM-6B

    ChatGLM 6B 是一个开源的 支持中英双语的对话语言模型 基于 General Language Model GLM 架构 具有 62 亿参数 结合模型量化技术 用户可以在消费级的显卡上进行本地部署 INT4 量化级别下最低只需 6G
  • 万字长文,SpringSecurity

    思维导图如下 RBAC权限分析 RBAC 全称为基于角色的权限控制 本段将会从什么是RBAC 模型分类 什么是权限 用户组的使用 实例分析等几个方面阐述RBAC 思维导图 绘制思维导图如下 什么是RBAC RBAC 全称为用户角色权限控制
  • javascript算法之数组反转浅谈

    本文主要介绍了javascript算法之数组反转 文章围绕主题展开详细的内容介绍 具有一定的参考价值 需要的小伙伴可以参考一下 1 数组反转 1 1 leecode题目 旋转数组 给你一个数组 将数组中的元素向右轮转 k 个位置 其中 k
  • Servlet是不是线程安全的?

    首先在servlet中的方法 三个重要方法 1 init 进行资源的加载 2 service 处理请求 根据请求方式 调用doGet或者doPost 3 destroy 进行资源的释放 servlet是单实例的 假如在处理请求时候 多线程访
  • AcWing 104. 货仓选址

    题目 在一条数轴上有 N 家商店 它们的坐标分别为 A1 AN 现在需要在数轴上建立一家货仓 每天清晨 从货仓到每家商店都要运送一车商品 为了提高效率 求把货仓建在何处 可以使得货仓到每家商店的距离之和最小 输入格式 第一行输入整数N 第二
  • windows下访问linux下的文件,【IT之家学院】如何从Win10访问Linux子系统中的文件 - IT之家...

    在19H1 目前处于Insider Preview阶段 预计4月份正式推送 中 微软为适用于Linux的Windows子系统带来了一项有趣的功能 这项功能允许用户从Windows 10访问Linux子系统中的文件 今天的这期教程 我们来讨论
  • AppScan 漏扫工具-保姆及配置使用说明

    本文章仅供学习使用 严禁在未经网站管理员的允许的条件下扫描任何网站 工具的滥用违反国家安全法后果自负 申明 本文实验环境在内网中进行 网站为自己服务器所搭建的sqli labs DVWA master测试网站 1 AppScan安装和基础配
  • 请分别创建出listA、listB、listC,完成以下各题 (1)将listC中的内容添加到listB中: (2)输出listA与listB的交集listD; (3)输出listA与listB的并集...

    答 1 将listC中的内容添加到listB中 将listC中的每一项元素都添加到listB尾部 2 输出listA与listB的交集listD 定义一个空listD 遍历listA中的每个元素 如果listB中有相同的元素 则将该元素加入
  • 爬虫碰到状态码412的解决办法

    爬虫碰到状态码412 近期在使用python的requests库爬取网页时 碰到返回状态码为412的情况 状态码412含义为 Precondition Failed 服务器在验证在请求的头字段中给出先决条件时 没能满足其中的一个或多个 这个
  • Arthas 使用实践

    文章目录 1 Arthas 2 学习总结 2 1 所有环境都在线上 学习时不用自己搭环境 2 2 官方文档 2 3 相关参考博文 2 4 idea arthas 插件 3 各种捣腾 3 1 Arthas 下载使用 3 2 支持管道操作 3
  • 物联网智能病床项目

    目录 第一部分 系统架构 第二部分 MCU工作过程 第三部分 嵌入式操作系统 第一部分 系统架构 总体采用设备端 MCU 医用传感器 通信模组 WiFi 蓝牙 4G 通信端 MQTT协议 应用层服务器组成构建一整套物联网系统 第二部分 MC
  • pytest框架之fixture测试夹具详解

    一 fixture的优势 pytest框架的fixture测试夹具就相当于unittest框架的setup teardown 但相对之下它的功能更加强大和灵活 命名方式灵活 不限于unittest的setup teardown 可以实现数据
  • 14-1_Qt 5.9 C++开发指南_网络编程及主机信息查询_HostInfo

    Qt 网络模块提供了用于编写 TCP IP 客户端和服务器端程序的各种类 如用于 TCP 通信的QTcpSocket 和 QTcpServer 用于 UDP 通信的 QUdpSocket 还有用于实现 HTTP FTP 等普通网络协议的高级
  • Flex4 Error #2032 Stream Error的解决方式

    最近在做一个项目 在程序发布的初期没有发现什么问题 但是有的用户反映看不到站点 并截图Error 2032错误 但是在研发中心测试没有问题 后来通过测试幸运地在一台测试机上发现了这个问题 而同时测试其他9台机器 发现都可以正常显示 而后到网
  • C语言中void*详解及应用

    void在英文中作为名词的解释为 空虚 空间 空隙 而在C语言中 void被翻译为 无类型 相应的void 为 无类型指针 void似乎只有 注释 和限制程序的作用 当然 这里的 注释 不是为我们人提供注释 而是为编译器提供一种所谓的注释
  • 开源毕业设计:基于嵌入式ARM-Linux的应用OpenCV和QT实现的人脸识别系统(源码+论文)

    毕业一载有余 把毕业设计作品分享一下 希望能帮助到有需要的同学们 资料获取 帮助 答疑 辅导 等请联系博主 请点如下链接 linux face txt zengzr share contact Gitee com 毕设课题选题参考 毕业设计