基于YOLOv5的口罩佩戴实时监测系统
文章目录
概述
基于YOLOv5的口罩检测系统,使用Flask进行开发,将检测压力分到各客户端侧进行端侧实时检测,对服务端性能需求小,可以部署在各种服务器甚至树莓派上。mAP达到0.96,检测结果较为准确。
本项目可以实现对实时网络视频流以及 本地摄像头的拉取检测,并实现了实时人群口罩佩戴率计算展示和统计,可以对统计图表结果进行下载存储。
工作流程
互联网搜集图片,筛选并手动标注获取数据集。
基于YOLOv5s训练模型
用Flask框架进行检测平台前后端开发
服务端部署在树莓派或其他服务器进行调试运行
开发概述
开发环境:Windows11 22H2 64bit
IDE:PyCharm
使用语言: Python、JavaScript
模型训练环境: NVIDIA V100 虚拟化 CPU 2核 内存 16G / CPU
项目效果
数据集概况
模型性能
环境配置
YOLOv5官方项目拉取
依赖及其版本:
(tfjs) D:\yolov5>conda list
# packages in environment at D:\Software\Anaconda\envs\tfjs:
# Name Version Build Channel
numpy 1.24.1 pypi_0 pypi
pandas 1.5.3 pypi_0 pypi
pillow 9.4.0 pypi_0 pypi
python 3.8.5 h5fd99cc_1 defaults
seaborn 0.12.2 pypi_0 pypi
tensorboard 2.9.0 pypi_0 pypi
tensorboard-data-server 0.6.1 pypi_0 pypi
tensorboard-plugin-wit 1.8.1 pypi_0 pypi
tensorflow-estimator 2.9.0 pypi_0 pypi
tensorflow-hub 0.12.0 pypi_0 pypi
tensorflow-io-gcs-filesystem 0.30.0 pypi_0 pypi
tensorflowjs 3.19.0 pypi_0 pypi
thop 0.1.1-2209072238 pypi_0 pypi
tqdm 4.64.1 pypi_0 pypi
YOLO v5 & TensorFlow.JS - 模型部分环境配置:
conda config --remove-key channels
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
conda create -n yolo5 python==3.8.5
conda activate yolo5
pip install -r requirements.txt
Flask(Conda/Python) - 服务端环境配置
conda create -n mask python==3.11.1
conda activate mask
pip install flask
pip install pymysql
pip install flask-sqlalchemy
pip install flask-migrate
pip install flask_mail
pip install wtforms
pip install email_validator
pip install flask-wtf
Node.js 配置
@tensorflow/tfjs
bootstrap
jquery
popper.js
flask-migrate使用方法
flask db init
flask db migrate
flask db upgrade
项目说明
config.py
用来存储配置相关的信息。
exts.py
用来管理扩展。exts.py
存在的意义就是为了解决循环引用的问题。
blueprints
包(Python Package)用来做模块化,存放视图,避免所有url视图全部写在app.py
中导致臃肿。
模型训练方法
数据集划分:7:2:1,共300张(210,60,30),4批1轮,训练300轮次
训练方法:
conda activate yolo5
D:
cd Center\Code\MaskDetect-CPU
python train.py --data mask_data.yaml --cfg mask_yolov5s.yaml --weights pretrained/yolov5s.pt --epoch 100 --batch-size 4 --device cpu
python detect.py --weights runs/train/exp3/weights/best.pt --source data/dataset/images/test/test(1).jpg
"""
python自动检测脚本
"""
import os
cmd_prefix = 'python detect.py --weights runs/train/exp3/weights/best.pt --source data/dataset/images/test/test('
cmd_after = ').jpg'
for i in range(1, 30):
cmd = cmd_prefix + str(i) + cmd_after;
print(cmd)
print(os.system(cmd))
"""
所有检测结果移动到一个文件夹
"""
# coding=utf-8
import os
import shutil
#目标文件夹(最终要复制到的文件夹),此处为相对路径,也可以改为绝对路径
determination = './test'
if not os.path.exists(determination):
os.makedirs(determination)
#源文件夹路径
path = './runs/detect'
folders = os.listdir(path)
for folder in folders:
dir = path + '/' + str(folder)
files = os.listdir(dir)
for file in files:
source = dir + '/' + str(file)
deter = determination + '/' + str(file)
shutil.copyfile(source, deter)
TFJS模型导出方法
命令如下:
conda activate mask
python export.py --weights export/exp3/weights/best.pt --include tfjs
# 可以调整NMS IoU阈值和NMS置信度阈值
python export.py --weights yolov5s.pt --include tfjs --iou-thres 0.5
python export.py --weights yolov5s.pt --include tfjs --conf-thres 0.6
python export.py --weights yolov5s.pt --include tfjs --iou-thres 0.5 --conf-thres 0.6
内网穿透方法:
命令如下:
D:\Software\Python\Scripts\flask.exe run --port=9000
cpolar http 9000
``````````````````````````````
cpolar by @bestexpresser (Ctrl+C to quit) Tunnel Status online
Account Hive (Plan: Free)
Version 3.12/3.15
Web Interface 127.0.0.1:4042
Forwarding http://75c02076.r8.cpolar.top -> http://localhost:9000
Forwarding https://75c02076.r8.cpolar.top -> http://localhost:9000
# Conn 0
Avg Conn Time 0.00ms
``````````````````````````````
项目获取
QQ:1214038972
邮箱: 1214038972@qq.com