美文网首页Python程序员
用Python10行代码实现自动检测人脸是否佩戴口罩

用Python10行代码实现自动检测人脸是否佩戴口罩

作者: Python芸芸 | 来源:发表于2020-06-15 22:12 被阅读0次
    QQ截图20200615202017.png

    最近,口罩成为绝对热门的话题,在疫情之下,出门不戴口罩不仅对自己不负责,对他人而言也是一种潜在的威胁。所以许多小区都有保安在门口守着,谁要是不戴口罩就吼回去(吓死我了)。

    尽管如此,人工检测总有可能漏掉人,而且无时无刻地盯着,保安叔叔也特别累。今天我们就来尝试用计算机自动检测人脸是否佩戴口罩的可行性,如果可行,那么根据我们以前的推送: 人脸检测自动开机 ,就可以做一个实时摄像头,如果发现有人没戴口罩则发送警告给保安,以提高保安的工作效率。

    当然,想要识别人脸是否佩戴口罩,需要做很多训练数据的收集,不过最近百度开源了他们的人脸口罩识别模型: PaddleHub 口罩检测 。我们今天就来试试这个模型的效果。

    准备

    为了实现这个实验,Python是必不可少的,如果你还没有安装Python,建议阅读我们的这篇文章哦: 超详细Python安装指南 。

    然后,我们需要安装百度的paddlepaddle, 进入他们的官方网站就有详细的指引:

    QQ截图20200615202300.png

    根据你自己的情况选择这些选项,最后一个CUDA版本,由于本实验不需要训练数据,也不需要太大的计算量,所以直接选择CPU版本即可。选择完毕,下方会出现安装指引,不得不说,Paddlepaddle这些方面做的还是比较贴心的(就是名字起的不好)。

    QQ截图20200615202350.png

    要注意,如果你的Python3环境变量里的程序名称是Python,记得将语句改为Python xxx,如下进行安装:

    python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
    

    还需要安装paddlehub:

    pip install -i https://mirror.baidu.com/pypi/simple paddlehub
    

    编写代码

    Paddlehub作为一个深度学习平台,用起来还是相当方便的,尤其是对于我这种非研究型应用者。一共就只有四个步骤:

    1.引入模块和图片
    2.载入模型
    3.分类与预测
    4.结果展示

    把我们需要测试的图片保存在该代码文件的同一目录下,命名为3.jpg:

    QQ截图20200615202719.png

    想看这个小姐姐摘下口罩的样子

    代码如下:

    import paddlehub as hub
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    
    # 1.待预测图片
    test_img_path = ["./3.jpg"]
    
    # 2.载入模型
    module = hub.Module(name="pyramidbox_lite_mobile_mask")
    
    # 3.预测
    input_dict = {"image": test_img_path}
    results = module.face_detection(data=input_dict)
    
    # 4.结果展示
    img = mpimg.imread("detection_result/3.jpg")
    plt.figure(figsize=(10, 10))
    plt.imshow(img)
    plt.axis('off')
    plt.show()
    

    没错,你没看错,就是这么简单。去掉空行和注释只有12行代码,再狠一点,把matplot展示部分全部去掉,只有6行代码。再再狠一点,把 test_img_path和input_path变量 以及 module.face_detection 语句合并,你会发现只有3行代码:

    import paddlehub as hub
    module = hub.Module(name="pyramidbox_lite_mobile_mask")
    results = module.face_detection(data={"image": ["./3.jpg"]}) 
    

    执行完后的分类结果在同一目录下的 detection_result 目录下查看即可。所以说,说20行代码是谦虚,3行代码就够了。

    结果展示

    我们测试的那张图片,结果如下:

    QQ截图20200615202929.png

    MASK:97.64% 代表这个人戴了口罩,可信度为97.64%。

    NO MASK: 97.41% 代表这个人没戴口罩,可信度为97.41%

    最后面那个大叔也是MASK,但是它的可信度只有54.31%,所以很可能是误判,在我们实际应用的时候,只需要把警告阈值(比如80%)提高,即可筛去这些不可信的分类。

    不过,这个模型有一个缺点就是,对于远距离的人判断并不是很精确:

    QQ截图20200615203012.png

    离镜头最近的这个人可能是因为侧脸的原因,脸部特征不明显识别不出来。但是远处的这些戴着口罩却被识别为没戴口罩的,就是这个模型的锅了。不过,通过阈值过滤和缩短摄像头摄影距离还是可以将这个模型用于实际生活中的。

    最后,小编整理了全套Python零基础资料,都可以找我拿,什么都不要,拿的方式是:看我的网名,也就是Python芸芸的全拼音,然后用这个名字,在(魏X)上找我就行,我还可以给大家一些比较基础的python项目视频!

    来源:此文章为第三方转载,如有侵权请联系小编删除。

    相关文章

      网友评论

        本文标题:用Python10行代码实现自动检测人脸是否佩戴口罩

        本文链接:https://www.haomeiwen.com/subject/lvghxktx.html