本章将为您介绍如何使用角蜂鸟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