【计算机视觉】OpenCV实战项目:Face-Mask-Detection 项目深度解析:基于深度学习的口罩检测系统

发布于:2025-05-16 ⋅ 阅读:(16) ⋅ 点赞:(0)

在这里插入图片描述

一、项目概述

在 COVID-19 大流行期间,佩戴口罩成为保护个人和他人健康的重要措施。在公共场所(如商场、剧院、公园等)检测人群是否佩戴口罩变得尤为重要。Face-Mask-Detection 项目通过深度学习技术实现了一个口罩检测系统,能够实时检测人员是否佩戴口罩,并通过网络摄像头进行实时监控。该项目由 mk-gurucharan 开发,基于 TensorFlow 和 OpenCV 实现,具有较高的准确性和实时性。

项目特点

  • 高精度检测:通过深度学习模型,实现超过 96% 的检测准确率。
  • 实时监控:利用 OpenCV 实现实时视频流处理,适用于实时监控场景。
  • 易于部署:基于 Python 和 TensorFlow 实现,代码开源,易于理解和扩展。
  • 数据驱动:使用公开数据集进行训练,支持进一步优化和扩展。

二、项目运行方式与执行步骤

(一)环境准备

  1. 安装 Python:确保您的系统中安装了 Python 3.6 或更高版本。

  2. 安装依赖库

    • TensorFlow:用于构建和训练深度学习模型。
    • OpenCV:用于图像和视频处理。
    • NumPy:用于数值计算。
    • Matplotlib:用于可视化结果。

    安装命令:

    pip install tensorflow opencv-python numpy matplotlib
    

(二)项目结构

典型的项目结构如下:

Face-Mask-Detection/
├── data/
│   ├── train/  # 训练数据集
│   ├── test/   # 测试数据集
│   └── output/ # 输出结果
├── src/
│   ├── face_mask_detection.py  # 主程序
│   ├── utils.py                # 辅助函数
│   ├── model.py                # 模型定义
│   └── train.py                # 训练脚本
├── README.md  # 项目说明文档
└── requirements.txt  # 依赖库列表

(三)执行步骤

  1. 克隆项目

    git clone https://github.com/mk-gurucharan/Face-Mask-Detection.git
    cd Face-Mask-Detection
    
  2. 安装依赖

    pip install -r requirements.txt
    
  3. 训练模型

    python src/train.py
    

    训练完成后,模型将保存在 data/output/ 文件夹中。

  4. 运行主程序

    python src/face_mask_detection.py
    

    程序将启动网络摄像头,实时检测是否佩戴口罩,并显示结果。

  5. 结果输出

    • 处理后的视频将实时显示在屏幕上。
    • 可以通过 data/output/ 文件夹查看保存的处理结果。

三、重要逻辑代码解析

(一)数据准备

项目使用了 Prajna Bhandary 提供的口罩数据集,数据集包含两类图像:佩戴口罩和未佩戴口罩的面部图像。

import os
import cv2
import numpy as np

def load_data(data_dir):
    categories = ['with_mask', 'without_mask']
    data = []
    labels = []

    for category in categories:
        path = os.path.join(data_dir, category)
        label = 1 if category == 'with_mask' else 0

        for img in os.listdir(path):
            img_path = os.path.join(path, img)
            image = cv2.imread(img_path)
            image = cv2.resize(image, (150, 150))
            data.append(image)
            labels.append(label)

    data = np.array(data)
    labels = np.array(labels)

    return data, labels

(二)CNN 模型构建

项目使用 TensorFlow 和 Keras 构建了一个卷积神经网络(CNN)模型,用于口罩检测。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

def build_model():
    model = Sequential([
        Conv2D(100, (3, 3), activation='relu', input_shape=(150, 150, 3)),
        MaxPooling2D(pool_size=(2, 2)),
        Conv2D(100, (3, 3), activation='relu'),
        MaxPooling2D(pool_size=(2, 2)),
        Flatten(),
        Dropout(0.5),
        Dense(50, activation='relu'),
        Dense(2, activation='softmax')
    ])

    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    return model

(三)模型训练

使用训练数据集对模型进行训练,并保存训练好的模型。

from tensorflow.keras.callbacks import ModelCheckpoint

def train_model(model, train_data, train_labels, val_data, val_labels):
    checkpoint = ModelCheckpoint('data/output/model.h5', monitor='val_loss', save_best_only=True, mode='min')

    history = model.fit(train_data, train_labels, epochs=30, validation_data=(val_data, val_labels), callbacks=[checkpoint])

    return history

(四)实时检测

利用 OpenCV 实现实时视频流处理,检测是否佩戴口罩。

import cv2

def detect_mask(model, face_cascade, cap):
    while True:
        ret, frame = cap.read()
        if not ret:
            break

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

        for (x, y, w, h) in faces:
            face = frame[y:y+h, x:x+w]
            face = cv2.resize(face, (150, 150))
            face = np.expand_dims(face, axis=0)
            prediction = model.predict(face)
            label = np.argmax(prediction)

            if label == 0:
                cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 2)
                cv2.putText(frame, 'No Mask', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)
            else:
                cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
                cv2.putText(frame, 'Mask', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

        cv2.imshow('Face Mask Detection', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

四、执行报错与问题解决方法

(一)TensorFlow 版本问题

问题描述:运行时提示 TensorFlow 版本不兼容。
解决方法:检查 TensorFlow 版本是否与代码兼容。可以通过pip install tensorflow==版本号命令安装特定版本的 TensorFlow。

(二)OpenCV 版本问题

问题描述:运行时提示 OpenCV 版本不兼容。
解决方法:检查 OpenCV 版本是否与代码兼容。可以通过pip install opencv-python==版本号命令安装特定版本的 OpenCV。

(三)数据集路径问题

问题描述:运行时提示无法找到数据集路径。
解决方法:检查数据集路径是否正确,确保数据集文件存在。可以通过绝对路径指定数据集文件。

(四)内存不足

问题描述:运行时提示内存不足。
解决方法:降低图像分辨率或帧率,减少处理数据量。可以通过cv2.resize函数调整图像分辨率。

五、相关论文信息

(一)卷积神经网络(CNN)

  • 论文名称:ImageNet Classification with Deep Convolutional Neural Networks
  • 作者:Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton
  • 发表年份:2012
  • 论文链接ImageNet Classification with Deep Convolutional Neural Networks
  • 简介:该论文提出了一种深度卷积神经网络架构,用于图像分类任务。通过多层卷积和池化操作,显著提高了图像分类的准确率。

(二)Haar 特征级联分类器

  • 论文名称:Rapid Object Detection using a Boosted Cascade of Simple Features
  • 作者:Paul Viola, Michael Jones
  • 发表年份:2001
  • 论文链接Rapid Object Detection using a Boosted Cascade of Simple Features
  • 简介:该论文提出了一种基于 Haar 特征的级联分类器,用于快速检测图像中的对象。通过级联结构,显著提高了检测速度和准确性。

六、总结

Face-Mask-Detection 项目是一个基于深度学习的口罩检测系统,能够实时检测人员是否佩戴口罩。通过卷积神经网络(CNN)模型和 OpenCV 实时视频处理,该项目实现了高精度和实时性的口罩检测。通过合理的数据准备、模型训练和实时检测实现,Face-Mask-Detection 项目为公共场所的口罩检测提供了一种有效的解决方案。在实际应用中,可以根据需要进一步优化模型结构和参数,以提高检测性能和适应性。


网站公告

今日签到

点亮在社区的每一天
去签到