yolov5摄像头识别口罩
时间: 2025-01-09 16:58:05 浏览: 39
### 使用YOLOv5实现摄像头实时口罩检测
#### 准备工作
为了能够顺利运行YOLOv5进行实时口罩检测,需先完成一系列准备工作。这包括但不限于安装必要的依赖库以及设置好开发环境。
对于环境配置而言,在本地环境中搭建Python虚拟环境并利用`pip install -r requirements.txt`命令来安装项目所需的全部依赖项是一个不错的选择[^1]。另外,确保已正确安装PyTorch及其对应的CUDA版本(如果打算使用GPU加速),这对于提高模型推理速度至关重要。
#### 数据集准备与预处理
当涉及到自定义数据集如口罩佩戴情况的数据时,应当遵循标准流程来进行标注和整理。通常情况下,会采用COCO格式或其他常见目标检测任务所使用的标签格式保存标注信息。针对本案例中的口罩检测应用,可能需要收集大量正负样本——即戴口罩与未戴口罩的人物面部照片,并对其进行精确框选标记以便后续用于训练过程之中[^3]。
不过值得注意的是,如果你只是想要快速体验而不涉及重新训练,则可以直接跳过此部分操作,因为网络上已有现成的经过良好调优过的权重文件可供直接加载使用。
#### 修改配置文件
在开始之前,还需要调整位于`data/`目录下的`.yaml`配置文件以适应具体应用场景的需求。特别是要指定正确的类别数目及名称列表,例如在此处应仅保留“mask”或类似的表示方式作为唯一的目标分类选项[^4]。
```yaml
train: ../datasets/mask/images/train/
val: ../datasets/mask/images/val/
nc: 2
names: ['with_mask', 'without_mask']
```
上述代码片段展示了如何编辑YAML文件来指明训练集、验证集的位置以及设定两个类别的名字分别为有无口罩两种状态。
#### 实现实时检测功能
最后一步就是编写一段简单的脚本来启动摄像头并执行实时预测逻辑:
```python
import torch
from utils.general import non_max_suppression, scale_coords
from models.experimental import attempt_load
import cv2
def detect():
weights = "runs/train/exp/weights/best.pt"
imgsz = 640
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = attempt_load(weights, map_location=device) # 加载模型
stride = int(model.stride.max())
names = model.module.names if hasattr(model, 'module') else model.names
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
img = letterbox(frame, new_shape=imgsz)[0]
img = img[:, :, ::-1].transpose(2, 0, 1).copy()
img = torch.from_numpy(img).to(device)
img = img.float() / 255.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
pred = model(img)[0]
det = non_max_suppression(pred, conf_thres=0.25, iou_thres=0.45)[0]
if len(det):
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], frame.shape).round()
for *xyxy, conf, cls in reversed(det):
label = f'{names[int(cls)]} {conf:.2f}'
plot_one_box(xyxy, frame, label=label, color=(0, 255, 0), line_thickness=2)
cv2.imshow("Mask Detection", frame)
key = cv2.waitKey(1)
if key & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
with torch.no_grad(): # 不计算梯度
detect()
```
这段程序实现了打开默认相机设备读取每一帧画面并通过预先训练好的YOLOv5模型进行对象识别的功能。一旦发现符合条件的对象就会在其周围绘制边界框并将置信度分数一同显示出来。用户可以通过按下键盘上的‘Q’键随时终止该进程。
阅读全文
相关推荐



















