当前位置: 首页 > 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(/%(?…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...