最近参加了百度“深度学习7日入门-CV疫情特辑”的课程,使用的深度学习框架是百度自研的飞桨PaddlePaddle,课程结合当前疫情中的一些人工智能应用案例开展相关内容的介绍。早在2020年2月13日,百度就已经开源了业内首个口罩人脸检测及分类模型,飞桨预训练模型管理与迁移学习工具PadddleHub已提供了PyramidBox预训练模型,听课期间我也尝试了将这个口罩模型进行本地部署,并利用OpenCV调用摄像头实现视频实的时检测。
百度提供的在线演示链接地址:https://www.paddlepaddle.org.cn/hub/scene/maskdetect
1.安装paddlepaddle
可以直接采用pip安装的方式(CPU和GPU二选一即可):
CPU版本安装:pip install paddlepaddle
GPU版本安装:pip install paddlepaddle-gpu
2.安装PaddleHub
pip install paddlehub
1. 首先安装OpenCV库:pip install opencv-python
2.使用paddlehub将模型下载到本地,进入到python环境,输入程序并执行
import paddlehub as hub
module = hub.Module(name="pyramidbox_lite_server_mask")
#module = hub.Module(name="pyramidbox_lite_mobile_mask")
模型会自动下载到本地,windows下是默认下载到 用户/user/.paddlehub文件夹下,Ubuntu是默认下载到/home/aistudio/.paddlehub目录下。
3. 给程序创建一个文件夹,我这里取名为mask_detection
4.新建文件夹data
5.新建文件夹detection_result
6.创建mask_detection.py,并编写代码:
from paddlehub import Module
import cv2
import time
test_img_path = ["./data/test_mask_detection.jpg"]
input_dict = {"image": test_img_path}
cap = cv2.VideoCapture(0)
#module = Module(name="pyramidbox_lite_server_mask")
module = Module(name="pyramidbox_lite_mobile_mask")
fps = 15
counter = 0
start_time = time.time() #开始时间
x = 1 # 每秒计算一次帧率
while True:
ret,img = cap.read()#视频读取
img = cv2.flip(img,1,dst=None) #镜像
cv2.imwrite('./data/test_mask_detection.jpg',img)
counter += 1
now_time = time.time() #当前时间
if (now_time - start_time) > x:
fps=counter / (now_time - start_time)
fps=round(fps,1) #保留小数点后1位
counter = 0
start_time = time.time()
# 口罩检测预测
results = module.face_detection(data=input_dict, use_multi_scale=False, shrink=0.6,)
for result in results:
print(result)
# 预测结果展示
img = cv2.imread("detection_result/test_mask_detection.jpg")
cv2.putText(img, str(fps)+' FPS', (10, 20), cv2.FONT_HERSHEY_PLAIN, 1, (0,255,0), 1, cv2.FONT_ITALIC)
cv2.imshow('camera',img)
keyCode = cv2.waitKey(1) & 0xFF
if keyCode == 27:# ESC键退出
break
运行程序,为了不暴露自己就补贴运行成功的截图了。