当前位置: 首页 > news >正文

使用DJL和PaddlePaddle的口罩检测详细指南

使用DJL和PaddlePaddle的口罩检测详细指南

完整代码

该项目利用DJL和PaddlePaddle的预训练模型,构建了一个口罩检测应用程序。该应用能够在图片中检测人脸,并将每张人脸分类为“戴口罩”或“未戴口罩”。我们将深入分析代码的每个部分,以便清晰了解每一步。

代码关键组件

  1. 缩放比例和置信度阈值配置

    • scale:控制图像缩放比例;值越小检测速度越快,但精度会降低。可根据应用场景的精度要求调整。
    • threshold:设定检测结果的最低置信度,用于过滤低置信度的检测结果。
  2. 人脸和口罩检测模型的初始化

    • 初始化FaceDetection用于定位人脸区域,FaceMaskDetect则用于对检测出的人脸区域进行口罩状态的分类。
  3. 模型加载和预测

    • 使用DJL的ZooModel类加载人脸检测和口罩分类模型。人脸检测模型识别图像中的人脸区域,分类模型判断每张人脸是否佩戴口罩。
    • 遍历资源目录中的所有图像文件,分别进行检测和分类,并将结果保存和记录。

优化后的代码讲解

以下是代码的改进版本,加入了详细的注释来说明每一步的操作:

@SneakyThrows
@Test
public void test1() {// 设置人脸检测的缩放比例和置信度阈值float scale = 0.5f;  // 缩小图像尺寸,提升检测速度float threshold = 0.7f;  // 仅保留置信度大于0.7的检测结果// 初始化人脸检测和口罩检测模型FaceDetection faceDetection = new FaceDetection();FaceMaskDetect faceMaskDetect = new FaceMaskDetect();try (// 加载人脸检测模型ZooModel<Image, DetectedObjects> model = ModelZoo.loadModel(faceDetection.criteria(scale, threshold));Predictor<Image, DetectedObjects> faceDetector = model.newPredictor();// 加载口罩分类模型ZooModel<Image, Classifications> classifyModel = ModelZoo.loadModel(faceMaskDetect.criteria());Predictor<Image, Classifications> classifier = classifyModel.newPredictor()) {// 遍历资源目录中的图像文件for (File file : new File("src/test/resources").listFiles()) {// 读取并处理图像BufferedImage img = ImageIO.read(file);Image image = ImageFactory.getInstance().fromImage(img);// 使用人脸检测和口罩分类器进行预测DetectedObjects detections = faceMaskDetect.predict(faceDetector, classifier, image);// 保存检测结果,绘制边框并记录到指定目录ImageUtils.saveBoundingBoxImage(image, detections, file.getName(), "build/output");// 日志输出检测结果logger.info("{}", detections);}}
}

各步骤详细解读
Step 1: 设置检测参数
scale参数控制图像缩放的比率。缩小图像的尺寸会提升检测速度,但可能会损失一些精度。该值可以根据需求灵活调整。
threshold参数设定了最小置信度,用于过滤低置信度的检测结果。例如,0.7的阈值意味着仅保留置信度在70%以上的结果。
Step 2: 初始化检测模型
这里分别初始化FaceDetection和FaceMaskDetect两个对象。FaceDetection对象用于人脸检测,即识别图像中的人脸位置。FaceMaskDetect对象则用于口罩检测,即对识别出的人脸区域进一步分类。

Step 3: 加载模型和初始化预测器
ModelZoo.loadModel(faceDetection.criteria(scale, threshold))通过criteria加载人脸检测模型,并将其转化为DJL的ZooModel对象。
Predictor<Image, DetectedObjects> faceDetector = model.newPredictor()创建一个Predictor,用于接收Image对象并返回人脸检测的DetectedObjects。
同样,口罩分类模型通过faceMaskDetect.criteria()加载,并使用Predictor<Image, Classifications>进行分类预测。
Step 4: 遍历图像文件
使用listFiles()方法遍历指定目录下的所有图像文件,以便逐个进行人脸检测和口罩分类。

Step 5: 执行人脸检测和口罩分类
faceMaskDetect.predict(faceDetector, classifier, image)方法同时使用人脸检测器faceDetector和分类器classifier,首先检测人脸位置,然后在检测到的人脸区域内进行口罩状态的分类。
Step 6: 保存检测结果
使用ImageUtils.saveBoundingBoxImage()方法,将检测结果绘制到图像上,并保存到build/output目录下。该方法会在图片上标注检测框及口罩状态,便于直观观察检测效果。

Step 7: 输出检测结果
使用日志记录检测结果,包含分类结果(“MASK” 或 “NO MASK”)、置信度、检测框的坐标和尺寸等信息。控制台示例输出如下:

运行效果示例

执行该代码后,在控制台中可以看到每张图片的检测结果,包括人脸位置和是否佩戴口罩的分类信息。以下是示例输出:

[INFO ] - [class: "MASK", probability: 0.95524, bounds: [x=0.415, y=0.234, width=0.319, height=0.425]
]
[INFO ] - [class: "MASK", probability: 0.99275, bounds: [x=0.274, y=0.226, width=0.412, height=0.523]
]
[INFO ] - [class: "MASK", probability: 0.99931, bounds: [x=0.489, y=0.289, width=0.234, height=0.443]
]
[INFO ] - [class: "NO MASK", probability: 0.99916, bounds: [x=0.489, y=0.311, width=0.171, height=0.395]
]
[INFO ] - [
]
[INFO ] - [class: "MASK", probability: 0.99964, bounds: [x=0.190, y=0.187, width=0.309, height=0.538]
]

检测效果图示例

以下展示了原图和检测后的效果图:

原图检测图
mask3mask3
mask6mask6

总结与优化建议

该系统能够精准地检测人脸并判断口罩佩戴状态,可应用于各类检测场景。可以根据实际需求,调整缩放比例scale和置信度阈值threshold以平衡速度和精度。
完整代码

相关文章:

使用DJL和PaddlePaddle的口罩检测详细指南

使用DJL和PaddlePaddle的口罩检测详细指南 完整代码 该项目利用DJL和PaddlePaddle的预训练模型&#xff0c;构建了一个口罩检测应用程序。该应用能够在图片中检测人脸&#xff0c;并将每张人脸分类为“戴口罩”或“未戴口罩”。我们将深入分析代码的每个部分&#xff0c;以便…...

基于stm32的多旋翼无人机(Multi-rotor UAV based on stm32)

在现代无人机技术中&#xff0c;多旋翼无人机因其稳定性和操控性而受到广泛应用。STM32微控制器因其强大的处理能力和丰富的外设接口&#xff0c;成为实现多旋翼无人机控制的理想选择。本文将详细介绍如何基于STM32实现多旋翼无人机的控制&#xff0c;包括硬件设计、软件设计和…...

第二十四章 v-model原理及v-model简化表单类组件封装

目录 一、v-model 原理 二、表单类组件封装 三、v-model简化组件封装代码 一、v-model 原理 原理&#xff1a;v-model本质上是一个语法糖。例如应用在输入框上&#xff0c;就是 value属性 和 input事件 的合写。 作用&#xff1a;提供数据的双向绑定 ① 数据变&#x…...

Java基于SpringBoot 的校园外卖点餐平台微信小程序(附源码,文档)

大家好&#xff0c;我是Java徐师兄&#xff0c;今天为大家带来的是Java基于SpringBoot 的校园外卖点餐平台微信小程序。该系统采用 Java 语言 开发&#xff0c;MySql 作为数据库&#xff0c;系统功能完善 &#xff0c;实用性强 &#xff0c;可供大学生实战项目参考使用。 博主介…...

细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的方法

目录 一、工程目的 1、 目标 2、通讯协议及应对错误指令的处理目标 二、工程设置 三、程序改进 四、下载与调试 1、合规的指令 2、 proBuffer[0]不是# 3、proBuffer[4]不是; 4、指令长度小于5 5、指令长度大于5 6、proBuffer[2]或proBuffer[3]不是数字 7、;位于p…...

无人机场景 - 目标检测数据集 - 夜间车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;无人机场景夜间车辆检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如夜间无人机场景城市道路行驶车辆图片、夜间无人机场景城市道边停车车辆图片、夜间无人机场景停车场车辆图片、夜间无人机场景小区车辆图片、夜…...

Dubbo 构建高效分布式服务架构

一、引言 随着软件系统的复杂性不断增加&#xff0c;传统的单体架构已经难以满足大规模业务的需求。分布式系统架构通过将系统拆分成多个独立的服务&#xff0c;实现了更好的可扩展性、可维护性和高可用性。在分布式系统中&#xff0c;服务之间的通信和协调是一个关键问题&…...

Unity XR Interaction Toolkit 开发教程(1):OpenXR 与 XRI 概述【3.0 以上版本】

文章目录 &#x1f4d5;Unity XR 开发架构&#x1f50d;底层插件&#xff08;对接硬件&#xff09;&#x1f50d;高层 SDK&#xff08;面向应用交互层&#xff09; &#x1f4d5;OpenXR&#x1f4d5;XR Interaction Toolkit&#x1f50d;特点&#x1f50d;XRI 能够实现的交互类…...

自扶正救生艇,保障水上救援的安全卫士_鼎跃安全

在应急事件中&#xff0c;自扶正救生艇能够发挥关键的救援和保障作用&#xff0c;确保救援人员和被困人员的生命安全&#xff0c;尤其在极端天气或突发水上事故中展现出明显优势。 在救援过程中如果遭遇翻船&#xff0c;救生艇能够迅速恢复正常姿态&#xff0c;确保救援人员不会…...

《Qwen2-VL》论文精读【下】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当

1 前言 《Qwen2-VL》论文精读【上】&#xff1a;发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当 上回详细分析了Qwen2-VL的论文摘要、引言、实验&#xff0c;下面继续精读Qwen2-VL的方法部分。 文章目录 1 前言2 方法2.1 Model Architecture2.2 改进措施2…...

WebSocket消息帧的组成结构

WebSocket消息帧是WebSocket协议中的一个基本单位&#xff0c;它定义了数据在客户端和服务器之间传递的格式。每个数据帧包含了不同类型的数据和各种控制信息。以下是WebSocket消息帧的组成结构&#xff1a; WebSocket 帧结构 FIN、RSV1、RSV2、RSV3 和 opcode&#xff08;第一…...

如何利用低代码开源框架实现高效开发?

随着数字化转型步伐的加快&#xff0c;越来越多的企业开始关注提高软件开发效率的方法。低代码平台因其能够大幅减少编码量而受到欢迎&#xff0c;而开源框架则因其灵活性和社区支持成为开发者的首选。如何利用低代码开源框架实现高效开发&#xff0c;成为许多企业和开发者面临…...

使用 RabbitMQ 有什么好处?

大家好&#xff0c;我是锋哥。今天分享关于【使用 RabbitMQ 有什么好处&#xff1f;】面试题。希望对大家有帮助&#xff1b; 使用 RabbitMQ 有什么好处&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ 是一种流行的开源消息代理&#xff0c;广…...

机器学习周报(RNN的梯度消失和LSTM缓解梯度消失公式推导)

文章目录 摘要Abstract 1 RNN的梯度消失问题2 LSTM缓解梯度消失总结 摘要 在深度学习领域&#xff0c;循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;被广泛应用于处理序列数据&#xff0c;特别是在自然语言处理、时间序列预测等任务中。然而&#xff0c…...

一篇文章理解前端中的 File 和 Blob

概述&#xff1a; js处理文件、二进制数据和数据转换的时候&#xff0c;提供了一些API和对象&#xff0c;例如&#xff1a;File、Blob、FileReader、ArraryBuffer、Base64、Object URL 和 DataURL。现在主要介绍File和Blob这两个对象。 1.Blob介绍 在js中&#xff0c;Blob&am…...

串口屏控制的自动滑轨(未完工)

序言 疫情期间自己制作了一个自动滑轨&#xff0c;基于无线遥控的&#xff0c;但是整体太大了&#xff0c;非常不方便携带&#xff0c;所以重新设计了一个新的&#xff0c;以2020铝型材做导轨的滑轨&#xff0c;目前2020做滑轨已经很成熟了&#xff0c;配件也都非常便宜&#x…...

DFA算法实现敏感词过滤

DFA算法实现敏感词过滤 需求&#xff1a;检测一段文本中是否含有敏感词。 比如检测一段文本中是否含有&#xff1a;“滚蛋”&#xff0c;“滚蛋吧你”&#xff0c;“有病”&#xff0c; 可使用的方法有&#xff1a; 遍历敏感词&#xff0c;判断文本中是否含有这个敏感词。 …...

Python自动化运维:技能掌握与快速入门指南

#编程小白如何成为大神&#xff1f;大学生的最佳入门攻略# 在当今快速发展的IT行业中&#xff0c;Python自动化运维已经成为了一个不可或缺的技能。本文将为您详细介绍Python自动化运维所需的技能&#xff0c;并提供快速入门的资源&#xff0c;帮助您迅速掌握这一领域。 必备…...

在linux系统中安装pygtftk软件

1.下载和安装 网址&#xff1a; https://dputhier.github.io/pygtftk/index.html ## 手动安装 git clone http://gitgithub.com:dputhier/pygtftk.git pygtftk cd pygtftk # Check your Python version (>3.8,<3.9) pip install -r requirements.txt python setup.py in…...

decodeURIComponentSafe转义%问题记录URI malformed

decodeURIComponentSafe转义%问题记录 问题背景 当我们解析包涵 % 字符的字符串时&#xff0c;会出现错误如下 Uncaught URIError: URI malformed 解决方案&#xff1a; function decodeURIComponentSafe(s) {if (!s) {return s;}return decodeURIComponent(s.replace(/%(?…...

如何高效构建抖音直播实时数据采集系统:完整技术解析与实战指南

如何高效构建抖音直播实时数据采集系统&#xff1a;完整技术解析与实战指南 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取&#xff08;2024最新版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 抖音直播实…...

智能家庭网络系统新选择:iStoreOS打造高效家庭网络与存储中心

智能家庭网络系统新选择&#xff1a;iStoreOS打造高效家庭网络与存储中心 【免费下载链接】istoreos 提供一个人人会用的的路由、NAS系统 &#xff08;目前活跃的分支是 istoreos-22.03&#xff09; 项目地址: https://gitcode.com/gh_mirrors/is/istoreos 家庭网络卡顿…...

VSCode集成clang-tidy实现多语言命名规范自动化检查

1. 为什么需要自动化命名规范检查 在团队协作开发中&#xff0c;代码命名规范就像交通规则一样重要。想象一下&#xff0c;如果每个司机都按照自己的习惯开车&#xff0c;那道路会乱成什么样子&#xff1f;代码也是如此。我曾经接手过一个遗留项目&#xff0c;发现同一个变量在…...

VTK.js终极指南:7个步骤掌握Web端3D可视化开发

VTK.js终极指南&#xff1a;7个步骤掌握Web端3D可视化开发 【免费下载链接】vtk-js Visualization Toolkit for the Web 项目地址: https://gitcode.com/gh_mirrors/vt/vtk-js 你是否曾想过在浏览器中实现专业的医学影像三维重建&#xff1f;或是让复杂的科学数据在网页…...

三步搞定全网资源下载:手把手教你使用res-downloader网络资源嗅探工具

三步搞定全网资源下载&#xff1a;手把手教你使用res-downloader网络资源嗅探工具 【免费下载链接】res-downloader 资源下载器、网络资源嗅探&#xff0c;支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: http…...

从CTF题到实战:手把手教你用Python的sympy和gmpy2破解RSA变种(附完整脚本)

从CTF题到实战&#xff1a;手把手教你用Python的sympy和gmpy2破解RSA变种&#xff08;附完整脚本&#xff09; 在网络安全竞赛和实际渗透测试中&#xff0c;RSA加密算法的各种变种经常出现。这些变种往往通过引入特殊的数学性质或构造方式&#xff0c;使得标准的RSA攻击方法失效…...

MailHog终极指南:如何快速搭建本地邮件测试环境

MailHog终极指南&#xff1a;如何快速搭建本地邮件测试环境 【免费下载链接】MailHog Web and API based SMTP testing 项目地址: https://gitcode.com/gh_mirrors/ma/MailHog MailHog是一款基于Web和API的SMTP测试工具&#xff0c;能够帮助开发者在本地快速搭建安全高效…...

iMeta 5卷1期封底:肠・太极

点击蓝字 关注我们肠・太极。本封面设计灵感来自盘龙、太极阴阳等中国传统文化元素。外周盘龙形若肠道&#xff0c;象征完整的肠道屏障结构&#xff1b;中心太极图寓意肠道微环境的动态平衡。太极两仪分别对应肠上皮细胞线粒体与肠道菌群这两大核心调控者&#xff0c;诠释了唯有…...

YOLOv8推理慢?CPU深度优化技巧让速度提升2倍

YOLOv8推理慢&#xff1f;CPU深度优化技巧让速度提升2倍 你是不是也遇到过这种情况&#xff1f;部署了YOLOv8模型&#xff0c;功能强大&#xff0c;检测精准&#xff0c;但一到实际推理就卡得不行&#xff0c;CPU占用率飙升&#xff0c;处理一张图片要等好几秒。尤其是在没有G…...

Flux Sea Studio 效果深度评测:对比不同采样器与步数下的海景细节

Flux Sea Studio 效果深度评测&#xff1a;对比不同采样器与步数下的海景细节 最近在尝试用AI生成一些海景图&#xff0c;发现Flux Sea Studio的效果确实让人眼前一亮。但我也遇到了不少朋友都有的困惑&#xff1a;为什么同样的描述词&#xff0c;别人生成的浪花层次分明、光线…...