人脸检测

本章将为您介绍如何使用角蜂鸟Python开发工具包,调用 SSD-Mobilenet 人脸检测卷积神经网络。

准备工作

根据使用入门获取 Python开发工具包模型资源

模型文件graph_face_SSD
示例程序examples/apps/FaceDetector/FaceDetector.py

代码实现

# 1. 导入需要的模块
import numpy as np, cv2, sys
from hsapi import FaceDetector

# 2. 创建人脸检测网络
net = FaceDetector(zoom=True, thresh=0.55)
"""
zoom: 如果为True,使用角蜂鸟自带的摄像头输出的图像分辨率为 640x360,否则为 1920x1080
thresh: 人脸检测阈值,范围为0-1,提高阈值会减少错检但增加漏检,反之亦然。
device: 用于指定创建网络的设备
graphPath: 用于自定义graph文件路径,默认在 examples/graphs 目录下
... 
其他选项可参考API中的具体实现
"""

# 如果使用外置摄像头,创建 cv2.VideoCapture 类来调用摄像头
WEBCAM = False
if WEBCAM: video_capture = cv2.VideoCapture(0)

# 3. 读取图像数据和检测结果,画框并显示出来
try:
    while True:
        # 如果使用外部摄像头,将摄像头图像加载到角蜂鸟中
        if WEBCAM: _, img = video_capture.read()
        else: img = None

        result = net.run(img)
        """
        函数参数为空时,使用角蜂鸟自带的摄像头作为输入

        返回值 result 是一个元组
        result[0]: 为设备图像 (若使用外部摄像头,即加载的图像)
        result[1]: 是一个列表,包含多个检测结果
        可以通过 len(result[1]) 得到检测结果的数量

        result[1][0]: 检测结果,也是一个列表,包含了分类信息、置信度和位置信息
        result[1][0][0]: 分类tag
        result[1][0][1]: 置信度 (范围为0-1,越高,网络越肯定目标是否准确)
        result[1][0][2]: 位置信息 (Box的左上角横坐标x1)
        result[1][0][3]: 位置信息 (Box的左上角纵坐标y1)
        result[1][0][4]: 位置信息 (Box的右下角横坐标x2)
        result[1][0][5]: 位置信息 (Box的右下角纵坐标y2)
        """

        img = net.plot(result) # 可视化结果
        cv2.imshow("Face Detector", img) # 显示图像
        cv2.waitKey(1)
finally:
    net.quit() # 重置设备

效果展示

连接好角蜂鸟后执行:

cd SungemSDK-Python/examples/apps/FaceDetector
python3 FaceDetector.py