从零开始部署实时口罩检测-通用:Ubuntu22.04+RTX3060完整教程

张开发
2026/4/21 12:27:35 15 分钟阅读

分享文章

从零开始部署实时口罩检测-通用:Ubuntu22.04+RTX3060完整教程
从零开始部署实时口罩检测-通用Ubuntu22.04RTX3060完整教程想自己动手搭建一个能实时检测图片中人脸是否佩戴口罩的AI服务吗今天我就带你从零开始在Ubuntu 22.04系统和RTX 3060显卡的环境下完整部署一个基于DAMO-YOLO的“实时口罩检测-通用”模型。整个过程清晰明了即使你是刚接触AI部署的新手也能跟着一步步搞定。这个模型非常实用它能自动识别图片中的人脸并用框标出来同时告诉你这个人戴了口罩还是没戴。无论是用于公共场所的监控分析还是个人学习研究都是一个很好的起点。我们使用ModelScope来获取模型并用Gradio快速搭建一个可视化的Web界面让你上传图片就能立刻看到检测结果。1. 环境准备与项目概览在开始敲命令之前我们先花几分钟了解一下我们需要做什么以及需要准备哪些东西。这能帮你对整个流程有个清晰的蓝图避免过程中手忙脚乱。1.1 你需要准备什么为了顺利完成本次部署请确保你拥有以下环境操作系统Ubuntu 22.04 LTS。这是目前长期支持且非常稳定的版本社区支持完善。显卡NVIDIA RTX 3060或其他支持CUDA的N卡。这是模型加速推理的关键。你的显卡驱动需要已经安装好。基础工具确保系统已安装git、wget、curl等常用工具通常Ubuntu会自带。Python环境我们将使用Python 3.8或3.9。推荐使用conda或venv创建独立的虚拟环境避免污染系统环境。1.2 项目核心组件介绍我们这个项目主要依赖两个核心部分ModelScope魔搭社区这是国内一个非常棒的AI模型开源平台。我们的“实时口罩检测-通用”模型就托管在这里。通过它的Python库我们可以像安装普通软件包一样轻松下载和加载预训练好的AI模型省去了自己训练模型的巨大成本和时间。Gradio这是一个用于快速构建机器学习Web界面的神器。你不需要懂前端HTML、CSS、JavaScript只需要用Python写一个处理函数Gradio就能自动生成一个带有上传按钮、结果显示区域的网页。对于我们这种“上传图片→模型处理→显示结果”的应用场景再合适不过了。简单来说我们的工作流就是用ModelScope库加载口罩检测模型然后用Gradio写一个网页接口把用户上传的图片送给模型处理最后把模型画好框的图片显示出来。2. 一步步搭建部署环境好了蓝图有了我们开始动手。请打开你的终端跟着下面的步骤操作。2.1 创建并激活Python虚拟环境首先我们创建一个独立的Python环境所有依赖都装在这里面。# 创建名为 mask_detection 的虚拟环境指定Python版本为3.8 conda create -n mask_detection python3.8 -y # 激活虚拟环境 conda activate mask_detection如果你没有安装conda使用venv也可以python3 -m venv mask_detection_env source mask_detection_env/bin/activate激活后你的命令行提示符前面应该会出现(mask_detection)字样这表示你已经在这个虚拟环境里了。2.2 安装PyTorch与CUDA我们的模型需要PyTorch深度学习框架并且要安装支持CUDA的版本这样才能利用你的RTX 3060显卡进行加速。访问 PyTorch官网根据你的CUDA版本选择安装命令。假设你的CUDA版本是11.7可以这样安装pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117安装完成后可以进入Python交互环境验证一下import torch print(torch.__version__) # 输出PyTorch版本 print(torch.cuda.is_available()) # 输出应为 True表示GPU可用 print(torch.cuda.get_device_name(0)) # 输出你的显卡型号例如 ‘NVIDIA GeForce RTX 3060’2.3 安装ModelScope和Gradio接下来安装我们项目的两个核心库。# 安装ModelScope库及其CV计算机视觉相关功能包 pip install modelscope modelscope[cv] -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html # 安装Gradio用于构建Web界面 pip install gradio2.4 下载模型与示例代码理论上ModelScope库会在第一次加载模型时自动下载。但为了更稳定我们可以先手动把模型和相关代码准备好。首先创建一个项目文件夹并进入mkdir realtime_mask_detection cd realtime_mask_detection然后我们需要找到这个“实时口罩检测-通用”模型的页面获取其模型ID通常是damo/cv_tinynas_object-detection_damoyolo_facemask这类格式。由于输入信息中给出了前端代码路径我们可以推断核心模型加载逻辑已经封装。我们可以先编写一个简单的测试脚本让ModelScope自动处理下载。3. 编写并运行检测服务环境搭好了库也装齐了现在我们来写最核心的代码加载模型和处理图片。3.1 创建模型加载与推理脚本在你的项目目录下创建一个名为app.py的文件并输入以下内容import cv2 import gradio as gr from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks # 1. 创建口罩检测 pipeline # ‘damo/cv_tinynas_object-detection_damoyolo_facemask’ 是模型ID任务类型是目标检测 print(“正在加载口罩检测模型首次加载需要下载请耐心等待...”) mask_detector pipeline(Tasks.image_object_detection, model‘damo/cv_tinynas_object-detection_damoyolo_facemask’) print(“模型加载成功”) # 2. 定义图片处理函数 def detect_mask(image): 输入一张图片numpy数组格式 输出带检测框的图片numpy数组格式 # 调用模型进行预测 result mask_detector(image) # 获取原始图片的宽高用于画框 height, width image.shape[:2] # 创建一个图片副本用于绘制检测框 image_with_boxes image.copy() # 遍历检测到的所有目标 for obj in result[‘boxes’]: # 解析结果坐标、类别、置信度 # 坐标格式通常是 [x1, y1, x2, y2]且是归一化后的值0-1之间 x1, y1, x2, y2 obj[‘box’] label obj[‘label’] score obj[‘score’] # 将归一化坐标转换为实际像素坐标 pt1 (int(x1 * width), int(y1 * height)) pt2 (int(x2 * width), int(y2 * height)) # 根据类别选择框的颜色和标签文本 # 类别ID 1: ‘facemask’ (戴口罩), 2: ‘no facemask’ (未戴口罩) if label 1: # 戴口罩 color (0, 255, 0) # 绿色 text f‘Mask: {score:.2f}’ else: # 未戴口罩 color (0, 0, 255) # 红色 text f‘No Mask: {score:.2f}’ # 在图片上画矩形框 cv2.rectangle(image_with_boxes, pt1, pt2, color, 2) # 在框的上方添加标签文本 cv2.putText(image_with_boxes, text, (pt1[0], pt1[1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2) return image_with_boxes # 3. 创建Gradio界面 # 定义一个简单的界面一个图片输入组件一个图片输出组件 interface gr.Interface( fndetect_mask, # 处理函数 inputsgr.Image(label“上传图片”, type“numpy”), # 输入类型为numpy数组的图片 outputsgr.Image(label“检测结果”, type“numpy”), # 输出处理后的图片 title“实时口罩检测-通用”, description“上传包含人脸的图片模型将检测是否佩戴口罩。绿色框表示戴口罩红色框表示未戴。”, examples[ # 提供几个示例图片路径方便用户快速尝试 [“example1.jpg”], [“example2.jpg”] ] ) # 4. 启动Web服务 if __name__ “__main__”: # launch() 方法会启动一个本地Web服务器 # shareFalse 表示只在本地访问设置为True可生成临时公网链接 interface.launch(server_name“0.0.0.0”, server_port7860, shareFalse)代码简单解释一下mask_detector pipeline(...)这行代码是关键它通过ModelScope创建了一个目标检测的“管道”。第一次运行时它会自动从云端下载模型文件到本地缓存如~/.cache/modelscope/hub所以需要一点时间。detect_mask函数这是业务核心。它接收一张图片调用模型进行预测然后根据返回的框坐标、类别和置信度用OpenCV在图片上画出矩形框并写上标签。gr.Interface这是Gradio的核心类它把我们的处理函数detect_mask包装成一个Web应用。我们定义了输入是图片输出也是图片。interface.launch()启动服务。server_port7860指定了服务运行的端口号。3.2 准备示例图片并运行服务在运行之前你需要在项目目录下放两张包含人脸的图片并命名为example1.jpg和example2.jpg这样Gradio界面上的“示例”按钮才有效。你也可以不放不影响主要功能。现在在终端中运行你的应用python app.py你会看到类似下面的输出表示模型正在加载首次运行会下载模型正在加载口罩检测模型首次加载需要下载请耐心等待... Downloading model file: [####################################] 100% 模型加载成功 Running on local URL: http://0.0.0.0:78604. 使用与效果验证服务启动后打开你的浏览器访问http://localhost:7860如果你的服务器有公网IP也可以用IP地址访问。4.1 界面操作指南你会看到一个简洁的Web界面标题和描述顶部说明了这是一个口罩检测工具。上传区域你可以点击“上传”按钮或者直接把图片拖拽到虚线框内。示例按钮如果你准备了示例图片点击这里可以快速加载测试。提交按钮上传图片后点击“提交”开始检测。4.2 查看检测结果点击提交后Gradio会将图片发送给后台的Python函数detect_mask进行处理。处理完成后结果会显示在右侧的“检测结果”区域。绿色框表示检测到的人脸佩戴了口罩框上方会显示“Mask: 0.xx”表示置信度。红色框表示检测到的人脸未佩戴口罩框上方会显示“No Mask: 0.xx”。你可以尝试上传不同的图片比如单人照、多人合影、戴口罩和不戴口罩的混合照片看看模型的检测效果如何。4.3 可能遇到的问题与解决模型下载慢ModelScope的模型仓库在国内通常下载速度不错。如果遇到问题可以检查网络连接或者尝试设置HTTP代理。端口被占用如果7860端口被其他程序占用启动时会报错。你可以在launch()方法里修改server_port参数比如改成7861。内存/显存不足处理高分辨率图片时可能会占用较多显存。如果遇到显存不足的错误可以尝试在上传前用工具将图片缩小。无GPU加速如果torch.cuda.is_available()返回False请检查CUDA和PyTorch的CUDA版本是否匹配并正确安装。5. 总结与扩展思路恭喜你至此你已经成功在Ubuntu 22.04 RTX 3060的环境上部署了一个功能完整的实时口罩检测Web服务。我们利用了ModelScope的丰富模型库和Gradio的快速开发能力用不到100行代码就实现了一个实用的AI应用。回顾一下我们做了什么搭建环境创建了独立的Python环境安装了PyTorchGPU版、ModelScope和Gradio。编写核心用ModelScope的pipeline加载了先进的DAMO-YOLO口罩检测模型并编写了图片处理和画框的逻辑。构建界面使用Gradio快速生成了一个直观的Web界面实现了图片上传、模型推理、结果展示的完整流程。运行测试成功启动了服务并通过浏览器验证了检测功能。这个项目还可以怎么扩展视频流检测Gradio也支持视频输入。你可以修改代码使其能处理摄像头实时视频流或上传的视频文件实现真正的“实时”检测。批量处理修改界面支持一次上传多张图片进行批量检测并打包下载结果。部署到服务器使用interface.launch(shareTrue)可以生成一个临时的公网链接。对于长期服务可以考虑使用Docker容器化然后部署到云服务器上。集成到其他系统这个检测函数可以很容易地被其他Python程序调用比如集成到现有的监控系统或管理后台中。希望这个教程对你有所帮助。动手实践是学习AI应用部署最好的方式现在你已经有了一个可以跑起来的起点接下来就尽情探索和改造它吧获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章