百度飞桨paddlehub——人脸口罩检测模型应用之 进门戴口罩自动检测+语音合成提醒

一、简介

PaddleHub是飞桨生态的预训练模型应用工具,开发者可以便捷地使用高质量的预训练模型结合Fine-tune API快速完成模型迁移到部署的全流程工作。PaddleHub提供的预训练模型涵盖了图像分类、目标检测、词法分析、语义模型、情感分析、视频分类、图像生成、图像分割、文本审核、关键点检测等主流模型。更多详情可查看:https://github.com/PaddlePaddle/PaddleHub,或官网:https://www.paddlepaddle.org.cn/hub

以paddlhub人脸检测模块 pyramidbox_lite_server_mask 进行简单尝试,实现人脸检测、有无口罩识别,可应用于超市、医院、学校、公交车等公共场所进出门口,作为未佩戴口罩提醒。最初尝试讯飞语音合成API,玩现了!于是转战百度语音合成API,终于生成了“语音提醒”,emmmm也是百度的。好吧!最后发现paddlehub也有语音合成,不过不想改了!@_@

二、环境配置

A. paddlepaddle 安装

pip3 install paddlepaddle-gpu --ignored-installed scipy -i https://mirrors.aliyun.com/pypi/simple/

B. paddlehub 安装

pip3 install paddlehub

查看安装结果:

pip3 list

C. 人脸检测模块 pyramidbox_lite_server_mask 安装

pc:~$ hub install pyramidbox_lite_server_mask==1.3.0
Downloading pyramidbox_lite_server_mask
[==================================================] 100.00%
Uncompress /home/lynxi/.paddlehub/tmp/tmp2hxc_ag8/pyramidbox_lite_server_mask
[==================================================] 100.00%
Successfully installed pyramidbox_lite_server_mask-1.3.0

D. 百度大脑AI 开放平台 语音合成 应用申请

pip3 install baidu-aip

  然后在开放平台 https://console.bce.baidu.com/ai/?_=1598505791309&fromai=1#/ai/speech/overview/index

  创建应用 — 产品服务 / 语音技术 - 概览 — 可用服务列表 — 语音合成 — 立即领取(开通试用权限)

百度飞桨paddlehub——人脸口罩检测模型应用之 进门戴口罩自动检测+语音合成提醒_第1张图片

  管理应用 — 产品服务 / 语音技术 - 应用列表(AppID/ API Key/ Secret Key 都要用) — 点击语音合成提醒(自己的应用名) — 应用详情点查看文档 — 在线语音合成 — PythonSDK

百度飞桨paddlehub——人脸口罩检测模型应用之 进门戴口罩自动检测+语音合成提醒_第2张图片

百度飞桨paddlehub——人脸口罩检测模型应用之 进门戴口罩自动检测+语音合成提醒_第3张图片

三、应用实现

A. 代码

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import os

import cv2
import paddlehub as hub
from aip import AipSpeech
from playsound import playsound

mask_detector = hub.Module(name="pyramidbox_lite_server_mask")

#### 使用百度语音合成 API 合成语音 "语音提醒"
""" 你的 APPID AK SK """
APP_ID = 'yours'
API_KEY = 'yours'
SECRET_KEY = 'yours'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.synthesis('公共场所,请您带好口罩!', 'zh', 1, options={'vol': 5, })

# 识别正确返回语音二进制 错误则返回dict 打印错误码
if not isinstance(result, dict):
    with open('warn.mp3', 'wb') as f:
        f.write(result)
    playsound('warn.mp3')  # 播放语音提醒
else:
    print("Error !", result)
####

#### 使用paddlehub 人脸检测 进行口罩识别
cap = cv2.VideoCapture("./20-05.mp4")
Open = cap.isOpened()
if not Open:
    print("Maybe have no video or camera ")

while Open:
    ret, frame = cap.read()
    if not ret:
        print("Video is Over")
        break

    # mask_detector 会返回检测的人脸坐标 和 有无MASK
    result = mask_detector.face_detection(images=[frame])
    if result:
        obj_dict = result[0]
        data_list = obj_dict["data"]
        for obj in data_list:
            label = obj["label"]
            conf = obj["confidence"]
            if conf < 0.95 or label == "MASK":
                continue
            xmin, ymin, xmax, ymax = obj["left"], obj["top"], obj["right"], obj["bottom"]
            cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), (0, 0, 255), 1, 1)
            cv2.putText(frame, label + str(conf), (xmin, ymin), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 1)
            # text_to_voice("公共场所,请您带好口罩!")  # 语音合成接口
            if os.path.exists('warn.mp3'):
                playsound('warn.mp3')  # 用百度语音合成 API合成的语音,没带口罩就会播放"语音提醒"
            else:
                print(label, "公共场所,请您带好口罩!")

    cv2.namedWindow("frame", 0)
    cv2.imshow("frame", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()
cap.release()

B. 结果

网上找的视频,做了演示,感谢网友的分享!paddlehub mask_detector 进行人脸检测和有无口罩识别,没戴口罩就会播放语音提醒(语音提醒是用百度语音合成API提前生成的,也支持实时生成,试用版限制次数,生成一次后续播放就行)

百度飞桨paddlehub——人脸口罩检测模型应用之 进门戴口罩自动检测+语音合成提醒_第4张图片

四、总结

检测速度挺快,但是好像也存在误检,带白色口罩的小伙也有几帧被误检为NO MASK。总体来说,从环境配置到具体示例实验,简单便捷很是方便!

百度飞桨paddlehub——人脸口罩检测模型应用之 进门戴口罩自动检测+语音合成提醒_第5张图片

aistudio notebook 上也有展示,但notebook "语音提醒"有点小问题,不能实时播放。好吧!是我不会@...@

https://aistudio.baidu.com/aistudio/projectdetail/774353?shared=1

你可能感兴趣的:(paddlepaddle)