MaixPy 人脸识别
人脸识别简介
人脸识别就是识别当前画面中的人脸的位置以及是谁。
所以人脸识别除了要检测到人脸,一般会有一个库来保存认识的人和不认识的人。
识别原理
- 使用 AI 模型检测人脸,获得坐标和五官的坐标。
- 利用五官的坐标仿射变换将图中的脸拉正对其到标准脸的样子,方便模型提取脸的特征。
- 使用特征提取模型提取脸的特征值。
- 与库中记录的人脸特征值进行对比(计算保存的和当前画面中的脸的特征值的余弦距离,得出最小的距离的库中的人脸,小于设定的阈值就认为当前画面中就是这个库中的人)
MaixPy 使用
MaixPy maix.nn 模块中提供了人脸识别的 API, 可以直接使用,模型也内置了,也可以到 MaixHub 模型库 下载(筛选选则对应的硬件平台,比如 maixcam)。
识别:
from maix import nn
recognizer = nn.Face_Recognizer(model="/root/models/face_recognizer.mud")
if os.path.exists("/root/faces.bin"):
recognizer.load_faces("/root/faces.bin")
cam = camera.Camera(recognizer.input_width(), recognizer.input_height(), recognizer.input_format())
dis = display.Display()
while 1:
img = cam.read()
faces = recognizer.recognize(img)
for obj in faces:
img.draw_rect(obj.x, obj.y, obj.w, obj.h, color = image.COLOR_RED)
msg = f'{recognizer.labels[obj.class_id]}: {obj.score:.2f}'
img.draw_string(obj.x, obj.y, msg, color = image.COLOR_RED)
dis.show(img)
第一次运行这个代码会发现能检测到人脸,但是都不认识,需要我们进入添加人脸模式学习人脸才行。
比如可以在用户按下按键的时候学习人脸:
faces = recognizer.detect_faces(img)
for face in faces:
print(face)
# 这里考虑到了一个画面中有多个人脸的情况
# 可以在这里根据 face 的坐标决定要不要添加到库里面
recognizer.add_face(face)
recognizer.save_(faces)("/too/faces.bin")