基于Yolo5模型的动态口罩佩戴识别安卓Android程序设计

禁止完全抄袭,引用注明出处。

下载地址

前排提醒:文件还没过CSDN审核,GitHub也没上传完毕,目前只有模型的.pt文件可以下载。我会尽快更新。

所使用.ptl文件

基于Yolo5的动态口罩佩戴识别模型的pt文件资源-CSDN文库

项目完整文件(还未更新完)

BFU-CS/MaskRecognition at main · CCCP-lus/BFU-CS (github.com)

程序演示

开发环境

项目使用的开发环境:Android Studio Giraffe | 2022.3.1 Patch 2、Kotlin 1.9.20、 JDK1.8、cameraX 1.0.0-beta07、 pytorch 2.1.0

设计思路

(1)需求分析

无论是新冠等全球传染病,还是一直蛰伏在身边的换季流感,都是人类健康的威胁因素。佩戴口罩可以有效阻断传染途径,是公共场所传染病防治最简洁有效的手段。针对以上需求,开发一款基于Yolo5的智能口罩识别安卓应用程序。

其主要实现三个任务:A.保存照片 B.实时显示人脸个数 C.识别人脸并判定口罩佩戴情况

(2)模型训练

①数据集:Kaggle上的口罩照片数据集[1],其中包含了853张进行过预打标的图片,包括戴口罩、未戴口罩、未正确戴口罩三类样本。

②训练模型:采用yolov5s模型[2],epoch值为300,batch-size取4。使用一张RTX4060显卡重复训练四次,得到的最优准确率和召回曲线如下图所示。

图1 模型训练的准确率与召回曲线

(3)架构设计

如下图所示,项目采用了MVVM架构。

图2 架构示意图

布局(View)文件包括资源包 layout 文件夹下放置的布局配置文件: activity_main.xml 与 texture_view.xml,它们定义了主活动的界面。然后再通过 data binding 和 ViewModel 对象 CameraTool.java 进行绑定,以实现拍照功能为例,负责绑定的相关代码如下。

//正向绑定
cameraBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
cameraBinding.setViewModel(cameraTool);// 反向绑定
<Buttonandroid:id="@+id/camera_capture_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="50dp"android:elevation="2dp"android:scaleType="fitCenter"android:text="Take Photo"android:onClick="@{()->viewModel.capturePhoto2()}"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintHorizontal_bias="0.498"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent" />

Model 部分包括获取相机权限、图片处理、拍照等活动。这样就实现了一个 MVVM 架构,它的特点是以数据为中心,由数据来驱动,ViewModel 帮助 Activity 分担一部分或者所有的工作,可以降低代码之间的耦合度。

项目的功能结构如下图所示。该项目的主要功能为实现屏幕中人脸识别并按照口罩佩戴情况的分类功能。在界面中用户可以实时查看到识别到的人脸位置、分类结果、数量统计,也可以点击拍照按钮抓拍照片。

图3 功能结构图

模型训练

我的过程还在整理,这篇就写的很好,可以先参照下。但是使用的数据集不一样,所以结果、性能等也不一定一样,请读者知悉。

利用yolov5实现口罩佩戴检测算法(非常详细)_基于yolov5的口罩识别-CSDN博客

程序编写

(1)代码结构分析

资源文件

资源包 assets 文件夹下放置一些静态资源,包括用于保存和加载完整的 PyTorch 模型结构和参数等信息的 best.torchscript.ptl 文件,以及存放此模型对应类别标签的 classes.txt 文件。

布局文件

资源包 layout 文件夹下放置布局配置文件 activity_main.xml 与 texture_view.xml,它们定义了主活动的界面。

任务A

A任务中,点击按钮存储照片的功能是在上述功能的基础上,定义了一个按钮侦听器负责调用拍照函数。该函数通过调用 CameraX 库中的方法拍照,并传入 OutputFileOptions 对象、执行器对象和回调函数。在回调函数中显示 Toast 提示用户文件成功保存。

任务B

B任务中,计算并输出检测到的⼈脸的个数功能是模型运算结果的中间产物,通过调取将模型输出 outputs 转换而成的结果列表 Array,求其长度即可得到检测到的⼈脸个数。

任务C

C任务的主要目标可以简化为在拍摄过程中寻找人脸,并根据人脸的面部特征进行分类。这个过程可以大致分为三步:

首先程序会判断权限是否已经获得,如果已经获得就会启动相机。相机启动后会捕获图像用于后续操作(分析、保存等)。

然后,需要对原始数据进行处理。通过创建 ImageAnalysis 实例的方式,完成包括旋转角度、镜像等操作,其目的是让在屏幕上显示的照片符合人眼观看方向。

最后模型返回一个 Result 类型的结果数组,包括每个矩形的位置,类别和属于这个类别的概率。通过调用分析图像方法将分析结果应用于UI线程,这个过程的更新间隔非常短,使用户可以视觉上认为这是实时分析的结果。

(2)测试结果

模型准确度测试

更换新的数据集Object_Dete_Masking[3],充分模拟了视角变化、遮挡物、多目标等不同情境。再次进行预测,准确率曲线和部分测试结果如下图所示。这个结果表示有充分理由认为模型的训练结果是可以接受的。

 图4 新数据集测试结果

图5 新数据集测试结果(部分)

模型鲁棒性测试

针对连续按键、过量目标等非正常情况进行了程序的鲁棒性测试。测试结果发现,系统能够在各种复杂环境下保持稳定的性能,并且对于异常输入和各种干扰情况都有较好的处理能力。可以认为鲁棒性测试通过。

存在问题

口罩佩戴不正确的训练样本过少,导致这种临界情况不能被有效识别。后续可以通过增大这部分样本重新训练的方式解决此问题。另外模型有时会将中景里模糊的白色物体(测试中是一个路由器)识别为口罩从而造成误判。后续可以通过增加训练样本、减小敏感度参数的方式解决此问题。

参考文献

[1] Face Mask Detection[OL].2020.https://www.kaggle.com/datasets/andrewmvd/face-mask-detection

[2] Glenn Jocher: yolov5: v3.1 - Bug Fixes and Performance Improvements[J].2020.10. Zenodo

[3] Object_Dete_Masking[OL].2020.https://github.com/huzixuan1/Object_Dete_Masking

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

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

相关文章

STM32day2

1.思维导图 个人暂时的学后感&#xff0c;不一定对&#xff0c;没什么东西&#xff0c;为做项目奔波中。。。1.使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_val HAL_ADC_GetValue(&a…

ubuntu20.04安装ros并配置相关环境以及驱动AUBO i5机械臂

ubuntu20.04安装ros并配置相关环境以及驱动AUBO i5机械臂 安装ros安装rosdep(小鱼的rosdepc,又快又好用)环境配置下载并编译aubo roslib库环境变量配置aubo gazeboaubo rviz驱动真实机械臂 安装ros 搜索鱼香ros网站https://fishros.com/&#xff0c;根据一键安装ros里提供的指…

看一看阿里云,如何把抽象云概念,用可视化表达出来。

云数据库RDS_关系型数据库 云数据库RDS_关系型数据库 专有宿主机 云数据库RDS_关系型数据库_MySQL源码优化版 内容协作平台CCP-企业网盘协同办公-文件实时共享

(五)关系数据库标准语言SQL

注&#xff1a;课堂讲义使用的数据库 5.1利用SQL语言建立数据库 5.1.1 create Database 5.1.2 create schema...authorization... 创建数据库和创建模式的区别&#xff1a; 数据库是架构的集合&#xff0c;架构是表的集合。但在MySQL中&#xff0c;他们使用的方式是相同的。 …

图论练习6

[NOIP2013]车站分级 Here 解题思路 由于起始点之间所选的站号&#xff0c;相互之间一定满足那么对于起始点间未选择的站号&#xff0c;一定满足选择的站号考虑用边来维护信息&#xff0c;表示的级别大于按题意&#xff0c;则车站会被分为几个联通块&#xff0c;且保证块内无环…

社区店选址案例研究:成功与失败的经验教训

大家好&#xff0c;我是一名鲜奶吧5年的创业者&#xff0c;在社区店经营方面有着丰富的经验。 今天&#xff0c;我将分享一些关于社区店选址的成功与失败案例&#xff0c;希望能给想开实体店或创业的朋友们提供有价值的干货信息。 首先&#xff0c;让我们来看看成功的社区店选…

C++程序设计-第四/五章 函数和类和对象【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下C程序设计中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 文章目录 前言第四章 函数 函数和类和对象4.1 说明带参数的宏与内联函数有什么不同4.2 全局变量和局部变量有什么区别是怎么实现的…

聊一聊ThreadLocal的原理?

1.ThreadLocal创建方式 ThreadLocal<String> threadlocal1 new ThreadLocal(); ThreadLocal<String> threadlocal2 new ThreadLocal(); ThreadLocal<String> threadlocal3 new ThreadLocal(); 2.首先介绍一下&#xff0c;ThreadLocal的原理&#xff1a; 如…

腾讯云拼了,腾讯云99元一年服务器购买链接发布

腾讯云服务器99元一年是真的吗&#xff1f;真的&#xff0c;99元优惠购买入口 txybk.com/go/99 折合每天8元1个月&#xff0c;腾讯云99元服务器配置为2核2G3M带宽&#xff0c;2024年99元服务器配置最新报价为61元一年&#xff0c;如下图&#xff1a; 腾讯云服务器99元一年 腾讯…

Axure RP 10:让原型设计更快、更直观、更智能 mac版

Axure RP 10是一款强大的原型设计工具&#xff0c;它能够帮助设计师快速创建高保真、交互式的原型&#xff0c;从而更好地展示和测试设计方案。这款软件凭借其直观易用的界面和丰富的功能&#xff0c;已经成为了许多设计师的首 选工具。 Axure RP 10 for Mac版软件获取 首先&a…

汽车零部件制造中的信息抽取技术:提升效率与质量的关键

一、引言 在汽车制造业中&#xff0c;零部件的生产是整个制造流程的关键一环。这些零部件&#xff0c;包括但不限于制动系统、转向系统和传动系统&#xff0c;是确保汽车安全、可靠运行的基础。为了满足现代汽车工业对效率和质量的严格要求&#xff0c;制造商们纷纷投入到高度…

如何在Linux用Docker部署MySQL数据库并远程访问本地数据库

文章目录 前言1 .安装Docker2. 使用Docker拉取MySQL镜像3. 创建并启动MySQL容器4. 本地连接测试4.1 安装MySQL图形化界面工具4.2 使用MySQL Workbench连接测试 5. 公网远程访问本地MySQL5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主…