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


    导读

    本文主要介绍如何使用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++双语言实现)。

     

  • 相关阅读:
    把报文再扔回内核,DPDK这样做
    在Kubernetes(k8s)上部署整个SpringCloud微服务应用
    大厂必问的几个面试题(面试含泪总结)
    2022/8/5 uniapp实现附近商家定位
    msvcp140.dll丢失的解决方法-一键下载自动快速修复msvcp140.dll
    架构学习之AArch64内存模型
    图像分类竞赛涨分小技巧——以智能硬件语音控制的时频图分类挑战赛为例
    【圣诞文】用python带你体验多重花样圣诞树
    day01-Tomcat框架分析
    Mac热门软件推荐Paste mac 中文激活版 剪切板工具
  • 原文地址:https://blog.csdn.net/stq054188/article/details/125438445