飞道的博客

五分钟快速搭建一个实时人脸口罩检测系统(OpenCV+PaddleHub 含源码)

470人阅读  评论(0)

导读

本文主要介绍如何使用OpenCV和PaddleHub实现一个实时人脸口罩检测系统。(公众号:OpenCV与AI深度学习)

背景介绍

    从19年疫情爆发到现在,佩戴口罩对大家来说已是常态。应运而生的就有了很多相关应用,如病毒发展预测、口罩佩戴检测以及戴口罩的人脸识别等。

    今天介绍的人脸口罩佩戴检测系统主要使用OpenCV和百度飞浆(PaddlePaddle)的PaddleHub提供的检测模型。PaddleHub提供了很多实用的模型,包括图像处理、文字处理、音频处理、视频处理和工业应用等。github地址:https://github.com/PaddlePaddle/PaddleHub

人脸口罩检测

    人脸检测部分的模型如下:

    红框内的两个模型支持人脸口罩检测,这里选择pyramidbox_lite_server_mask,实现详细步骤:

【1】安装PaddlePaddle、PaddleHub和OpenCV(opencv-python)

pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple  --trusted-host https://pypi.tuna.tsinghua.edu.cn
pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple  --trusted-host https://pypi.tuna.tsinghua.edu.cn
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple  --trusted-host https://pypi.tuna.tsinghua.edu.cn

    本文使用的版本:

    PaddlePaddle---2.3.0

    PaddleHun---2.2.0

    opencv-python---4.6.0.66

    注意:安装PaddlePaddle可能会遇到一些问题,导致import paddle失败,大家根据报错信息搜索解决方法即可。

【2】图片人脸口罩检测

    准备待测图,运行下面代码,修改图片路径即可:


  
  1. import paddlehub as hub
  2. import cv2
  3. mask_detector = hub.Module(name= "pyramidbox_lite_server_mask")
  4. img_path = './imgs/A0.png'
  5. img = cv2.imread(img_path)
  6. input_dict = { "data": [img]}
  7. result = mask_detector.face_detection(data=input_dict)
  8. count = len(result[ 0][ 'data'])
  9. if count < 1:
  10. print( 'There is no face detected!')
  11. else:
  12. for i in range( 0,count):
  13. #print(result[0]['data'][i])
  14. label = result[ 0][ 'data'][i].get( 'label')
  15. score = float(result[ 0][ 'data'][i].get( 'confidence'))
  16. x1 = int(result[ 0][ 'data'][i].get( 'left'))
  17. y1 = int(result[ 0][ 'data'][i].get( 'top'))
  18. x2 = int(result[ 0][ 'data'][i].get( 'right'))
  19. y2 = int(result[ 0][ 'data'][i].get( 'bottom'))
  20. cv2.rectangle(img,(x1,y1),(x2,y2),( 255, 200, 0), 2)
  21. if label == 'NO MASK':
  22. cv2.putText(img,label,(x1,y1), 0, 0.8,( 0, 0, 255), 2)
  23. else:
  24. cv2.putText(img,label,(x1,y1), 0, 0.8,( 0, 255, 0), 2)
  25. cv2.imwrite( 'result.jpg',img)
  26. cv2.imshow( 'mask-detection', img)
  27. cv2.waitKey()
  28. cv2.destroyAllWindows()
  29. print( 'Done!')

 

 代码开始第一次会先下载对应的模型到如下位置:

    C:\Users\xxx\.paddlehub\modules,以后不用再下载

测试图1:

运行结果:

测试图2:

运行结果:

测试图3:

运行结果:

测试图4:

运行结果:

    从上面测试结果来看,效果还不错!

【3】视频或摄像头实时人脸口罩检测

    准备测试视频或直接打开摄像头检测,选择对应的代码即可:

cap = cv2.VideoCapture('2.mp4') #视频文件检测# cap = cv2.VideoCapture(0) #摄像头检测

 完整代码:


  
  1. import paddlehub as hub
  2. import cv2
  3. mask_detector = hub.Module(name= "pyramidbox_lite_server_mask")
  4. def mask_detecion( img):
  5. input_dict = { "data": [img]}
  6. result = mask_detector.face_detection(data=input_dict)
  7. count = len(result[ 0][ 'data'])
  8. if count < 1:
  9. #print('There is no face detected!')
  10. pass
  11. else:
  12. for i in range( 0,count):
  13. #print(result[0]['data'][i])
  14. label = result[ 0][ 'data'][i].get( 'label')
  15. score = float(result[ 0][ 'data'][i].get( 'confidence'))
  16. x1 = int(result[ 0][ 'data'][i].get( 'left'))
  17. y1 = int(result[ 0][ 'data'][i].get( 'top'))
  18. x2 = int(result[ 0][ 'data'][i].get( 'right'))
  19. y2 = int(result[ 0][ 'data'][i].get( 'bottom'))
  20. cv2.rectangle(img,(x1,y1),(x2,y2),( 255, 200, 0), 2)
  21. if label == 'NO MASK':
  22. cv2.putText(img,label,(x1,y1), 0, 0.8,( 0, 0, 255), 2)
  23. else:
  24. cv2.putText(img,label,(x1,y1), 0, 0.8,( 0, 255, 0), 2)
  25. return img
  26. if __name__ == '__main__':
  27. cap = cv2.VideoCapture( '2.mp4') #视频文件检测
  28. #cap = cv2.VideoCapture(0) #摄像头检测
  29. if(cap.isOpened()): #视频打开成功
  30. while( True):
  31. ret,frame = cap.read() #读取一帧
  32. result = mask_detecion(frame)
  33. cv2.imshow( 'mask_detection',result)
  34. if cv2.waitKey( 1)& 0xFF == 27: #按下Esc键退出
  35. break
  36. else:
  37. print ( 'open video/camera failed!')
  38. cap.release()
  39. cv2.destroyAllWindows()

   测试结果:

下载1:Pytoch常用函数手册

在「OpenCV与AI深度」号后台回复:Pytorch函数手册能够学习下载全网第一份Pytorch函数常用手册,包括Tensors介绍、基础函数介绍、数据处理函数、优化函数、CUDA编程、多处理等十四章内容。

下载2:145个OpenCV实例应用代码

在「OpenCV与AI深入」公众号后台回复:OpenCV145能够学习下载145个OpenCV实例应用代码(Python和C++双语言实现)。

 


转载:https://blog.csdn.net/stq054188/article/details/125438445
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场