news 2026/7/30 7:32:03

手把手教学:从零开始实现实时口罩检测(附完整代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教学:从零开始实现实时口罩检测(附完整代码)

手把手教学:从零开始实现实时口罩检测(附完整代码)

1. 项目介绍与环境准备

实时口罩检测是一个非常有实用价值的计算机视觉应用,特别是在公共场所的健康安全管理中。今天我将带你从零开始,使用ModelScope和Gradio来部署一个实时口罩检测系统。

这个项目基于DAMO-YOLO检测框架,这是一个面向工业落地的目标检测框架,在速度和精度方面都有出色表现。相比于传统的YOLO系列方法,DAMO-YOLO在保持极高推理速度的同时,检测效果更加优秀。

1.1 环境要求与安装

在开始之前,确保你的系统满足以下基本要求:

  • Python 3.7或更高版本
  • 至少4GB可用内存
  • 支持CUDA的GPU(可选,但推荐用于更好的性能)

首先创建并激活虚拟环境:

python -m venv mask_detection_env source mask_detection_env/bin/activate # Linux/Mac # 或者 mask_detection_env\Scripts\activate # Windows

安装必要的依赖包:

pip install modelscope gradio opencv-python numpy pillow

2. 模型理解与核心概念

2.1 DAMO-YOLO架构简介

DAMO-YOLO采用"large neck, small head"的设计理念,整个网络结构由三部分组成:

  • Backbone (MAE-NAS):负责特征提取,使用神经架构搜索技术优化
  • Neck (GFPN):特征金字塔网络,充分融合低层空间信息和高层语义信息
  • Head (ZeroHead):检测头,输出最终的检测结果

这种设计使得模型在保持高精度的同时,还能实现实时检测速度。

2.2 口罩检测类别定义

我们的模型能够识别两种类别:

类别ID类别名称描述
1facemask佩戴口罩的人脸
2no facemask未佩戴口罩的人脸

模型会输出人脸的外接矩形框坐标信息,并支持图片中多个人脸的检测。

3. 完整代码实现

3.1 主检测代码

创建一个名为mask_detection.py的文件,并添加以下代码:

import cv2 import numpy as np from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks import gradio as gr class RealTimeMaskDetection: def __init__(self): # 初始化口罩检测模型 self.model = pipeline( task=Tasks.domain_specific_object_detection, model='damo/cv_tinynas_object-detection_damoyolo_facemask' ) def detect_masks(self, input_image): """ 执行口罩检测 """ # 转换图像格式 if isinstance(input_image, str): image = cv2.imread(input_image) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) else: image = input_image # 执行检测 result = self.model(image) # 解析检测结果 detection_result = self._parse_detection_result(result, image) return detection_result def _parse_detection_result(self, result, image): """ 解析检测结果并在图像上绘制边界框 """ # 创建图像副本用于绘制 output_image = image.copy() # 定义颜色(绿色:戴口罩,红色:未戴口罩) colors = { 'facemask': (0, 255, 0), # 绿色 'no facemask': (255, 0, 0) # 红色 } labels = { 'facemask': 'Mask', 'no facemask': 'No Mask' } detections = [] if 'boxes' in result and 'scores' in result and 'labels' in result: boxes = result['boxes'] scores = result['scores'] label_names = result['labels'] for i, (box, score, label_name) in enumerate(zip(boxes, scores, label_names)): if score > 0.5: # 置信度阈值 x1, y1, x2, y2 = map(int, box) # 绘制边界框 color = colors.get(label_name, (255, 255, 255)) cv2.rectangle(output_image, (x1, y1), (x2, y2), color, 2) # 添加标签和置信度 label_text = f"{labels.get(label_name, label_name)}: {score:.2f}" cv2.putText(output_image, label_text, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2) detections.append({ 'box': [x1, y1, x2, y2], 'score': float(score), 'label': label_name }) return output_image, detections # 创建检测器实例 detector = RealTimeMaskDetection()

3.2 Gradio界面实现

创建Gradio交互界面,让用户可以方便地上传图片并查看检测结果:

def create_gradio_interface(): """ 创建Gradio用户界面 """ def process_image(input_image): # 执行口罩检测 output_image, detections = detector.detect_masks(input_image) # 统计检测结果 mask_count = sum(1 for d in detections if d['label'] == 'facemask') no_mask_count = sum(1 for d in detections if d['label'] == 'no facemask') result_text = f"检测结果: {len(detections)}个人脸\n" result_text += f"佩戴口罩: {mask_count}人\n" result_text += f"未佩戴口罩: {no_mask_count}人" return output_image, result_text # 创建界面 with gr.Blocks(title="实时口罩检测系统") as demo: gr.Markdown("# 🎯 实时口罩检测系统") gr.Markdown("上传图片,系统将自动检测图中人员是否佩戴口罩") with gr.Row(): with gr.Column(): image_input = gr.Image(label="上传图片", type="numpy") submit_btn = gr.Button("开始检测", variant="primary") with gr.Column(): image_output = gr.Image(label="检测结果") text_output = gr.Textbox(label="检测统计", interactive=False) # 绑定事件 submit_btn.click( fn=process_image, inputs=image_input, outputs=[image_output, text_output] ) # 添加示例 gr.Examples( examples=[ ["example1.jpg"], # 需要准备示例图片 ["example2.jpg"] ], inputs=image_input, label="示例图片" ) return demo # 启动应用 if __name__ == "__main__": demo = create_gradio_interface() demo.launch( server_name="0.0.0.0", server_port=7860, share=True )

4. 部署与使用指南

4.1 快速启动方法

将上述代码保存后,你可以通过以下方式启动口罩检测系统:

# 直接运行Python脚本 python mask_detection.py # 或者使用ModelScope提供的webui python /usr/local/bin/webui.py

4.2 使用步骤详解

  1. 启动应用:运行上述命令后,系统会在本地启动一个Web服务
  2. 访问界面:在浏览器中打开http://localhost:7860
  3. 上传图片:点击上传按钮选择要检测的图片
  4. 开始检测:点击"开始检测"按钮执行口罩检测
  5. 查看结果:系统会显示标注后的图片和检测统计信息

4.3 自定义配置

如果你需要调整检测参数,可以修改以下配置:

# 在RealTimeMaskDetection类中添加配置选项 def __init__(self, confidence_threshold=0.5): self.confidence_threshold = confidence_threshold # 其余初始化代码...

5. 常见问题与解决方案

5.1 模型加载慢问题

首次加载模型可能需要一些时间,这是因为需要下载模型权重文件。后续使用会快很多。

5.2 检测精度调整

如果发现误检或漏检,可以调整置信度阈值:

# 在_detect_masks方法中修改阈值 if score > 0.6: # 提高阈值减少误检 # 处理检测结果

5.3 性能优化建议

对于实时应用,可以考虑以下优化措施:

# 调整图像大小以提高处理速度 def preprocess_image(self, image, target_size=(640, 640)): # 调整图像大小 resized_image = cv2.resize(image, target_size) return resized_image

6. 项目总结与扩展

通过本教程,你已经学会了如何从零开始搭建一个实时口罩检测系统。这个系统基于先进的DAMO-YOLO模型,能够准确识别图片中是否有人佩戴口罩。

6.1 项目亮点

  • 高精度检测:基于DAMO-YOLO框架,检测精度远超传统方法
  • 实时性能:优化后的模型支持实时检测
  • 用户友好:简洁的Gradio界面,易于使用
  • 完整代码:提供从模型加载到界面展示的完整解决方案

6.2 扩展思路

这个项目还可以进一步扩展:

  1. 视频流检测:修改代码支持摄像头实时视频流检测
  2. 批量处理:添加批量图片处理功能
  3. 报警系统:集成声音或视觉报警功能
  4. 数据统计:添加检测结果统计和导出功能

6.3 进一步学习建议

如果你想深入了解计算机视觉和目标检测,建议学习:

  • YOLO系列算法的原理和实现
  • 深度学习模型优化和压缩技术
  • 实际场景中的模型部署和性能调优

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 6:01:09

突破QQ音乐格式限制:QMCDecode全流程音乐解密指南

突破QQ音乐格式限制:QMCDecode全流程音乐解密指南 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结…

作者头像 李华
网站建设 2026/7/21 6:01:29

告别复杂设置!DLSS Swapper:让游戏性能提升一步到位的终极工具

告别复杂设置!DLSS Swapper:让游戏性能提升一步到位的终极工具 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏DLSS版本管理而头疼吗?DLSS Swapper是一款专为游戏玩家设计…

作者头像 李华
网站建设 2026/7/21 6:01:13

QMCDecode:破解QQ音乐加密格式的全平台解决方案

QMCDecode:破解QQ音乐加密格式的全平台解决方案 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结果…

作者头像 李华
网站建设 2026/7/21 6:01:14

NodeMCU开发板驱动安装与Arduino环境配置避坑指南

NodeMCU开发板驱动安装与Arduino环境配置避坑指南 最近在折腾一个智能家居的小项目,手头正好有几块NodeMCU开发板。本以为给ESP8266芯片的开发板配置环境是件分分钟搞定的事,结果从驱动安装到Arduino IDE配置,一路踩坑不断。最让人头疼的是&a…

作者头像 李华
网站建设 2026/7/21 6:01:12

突破QQ音乐格式限制:QMCDecode实现音频自由全流程指南

突破QQ音乐格式限制:QMCDecode实现音频自由全流程指南 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转…

作者头像 李华