人脸检测器 + 情景记录器 = 人脸识别器
本章为您介绍如何使用两个角蜂鸟基于人脸检测与情景记录器来实现人脸识别。 - 注意:本范例需要同时运行两个角蜂鸟进行集联
- 本教程基于Ubuntu 16.04系统
路径和文件 - 人脸识别Python:SungemSDK-Python/examples/apps/FaceRecorder/FaceRecorder.py
- 模型文件 - 检测:SungemSDK-Python/examples/graphs/graph_face_SSD
- 模型文件 - 识别:SungemSDK-Python/examples/graphs/graph_face_rec
图像识别 Image Recognition 连接两个角蜂鸟后,在FaceRecorder目录下执行以下命令来启动 双角蜂鸟人脸识别 范例。 ~/SungemSDK-Python/examples/apps/FaceRecorder$ python3 FaceRecorder.py运行后会出现窗口 Detection, 显示人脸检测结果。 如果检测到人脸, 会出现第二个窗口 Rec 指示录制目标。 单击 Detection 窗口, 按住 1 可将当前人脸录入至第一个存档中。将负责检测的角蜂鸟对准第二个人, 在Rec 窗口中出现第二个人后, 按住 2 可将第二人录入至第二个存档中。 之后按 r 即可实时训练出人脸分类器。 识别结果将显示于人脸的检测框上。 键盘输入: - 1-9: 将录制框中人脸储存至1-9。
- s: 将存档数据存储至指定路径。
- l: 从指定路径读取存档数据,需与 numBin 符合。
p: 重置存档。 注意:必须点击OpenCV窗口键盘输入才有效。
参数设置初始化
# Load device (载入双设备)
# 第二个角蜂鸟设置deviceIdx为1,设置检测器 verbose = 0 来关掉检测相关的终端输出。
net = hs.HS('FaceRec', zoom = True, verbose = 2)
net2 = hs.HS('FaceDetector', deviceIdx = 1, zoom = True, verbose = 0, threshSSD=0.55)
# Set camera mode (摄像头模式)
if WEBCAM: video_capture = cv2.VideoCapture(0)两种模式(WEBCAM): - True时使用外接USB摄像头
- False时使用角蜂鸟内置摄像头
人脸检测 + 识别
while True:
if WEBCAM: _, img = video_capture.read()
else: img = None
# 利用第二个角蜂鸟的人脸检测网络得到检测结果
result = net2.run(img)
# 记录录制框中的人脸,设置存档数为5,设置人脸数据存档路径
key = cv2.waitKey(5)
if len(result[1]) > 0:
box = result[1][0]
if box[5] - box[3] > 10 or box[4] - box[2] > 10:
recCrop = result[0][box[3]:box[5],box[2]:box[4],:]
face_res = net.run(recCrop)
prob = net.record(face_res, key, saveFilename='../../misc/face.dat', numBin = 5)
# 遍历所有检测框,利用第一个角蜂鸟的人脸识别网络返回框中的ID
for box in result[1]:
cropped = result[0][box[3]:box[5],box[2]:box[4],:].copy()
face_res = net.run(cropped)
cv2.waitKey(20)
prob = net.record(face_res, -1, saveFilename='../../misc/face.dat', numBin = 5)
# 输出ID在人脸框上
if prob is not None:
cv2.putText(result[0], '%d' % (prob.argmax() + 1), (box[2],box[3]-25),
# 画人脸检测结果
img = net2.plotSSD(result)
cv2.imshow('Detection', result[0])
try:
# 画录制框 cv2.imshow('Rec',recCrop)
except:
pass
cv2.waitkey(1)
|