在学会图像处理和打开摄像头获取视频流后,就可以开展简单的人脸识别项目。
人脸识别首先需要检测到人脸。
检测人脸区域并绘制矩形
# 加载图片
img = face_recognition.load_image_file("lena.png")
# 检测人脸区域
f_pos = face_recognition.face_locations(img)[0]
print("top,right.bottom,left", f_pos)
# 在人脸区域绘制矩形
cv2.rectangle(img,(f_pos[3],f_pos[0]),(f_pos[1],f_pos[2]),(0,0,200),2)
cv2.imshow("",img)
cv2.waitKey(0)
选张人脸图片检测一下。
大致的可以检测到人脸区域。
多个人脸进行识别
单个人脸识别后就需要进行多个人脸识别。
img = face_recognition.load_image_file("6.jpg")
faces = face_recognition.face_locations(img)
for face in faces:
cv2.rectangle(img,(face[3],face[0]),(face[1],face[2]),(0,0,210),2)
cv2.imshow("",img)
cv2.waitKey(0)
加一个for循环即可。
绘制五官位置
img = face_recognition.load_image_file("18.jpg")
faces = face_recognition.face_locations(img)
# 五官位置
marks = face_recognition.face_landmarks(img)
for word,mark in enumerate(marks):
for key,ms in mark.items():
for i in range(len(ms)):
point = ms[i]
# 圆
cv2.circle(img,(point[0],point[1]),2,(0,200,0))
cv2.imshow("", img)
cv2.waitKey(0)
视频检测人脸
图片检测人脸后,就需要在视频中检测到人脸。
# 摄像头
# cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
cap = cv2.VideoCapture(".mp4")
while True:
ok,frame = cap.read()
if ok :
# 从视频流中检测人脸
faces = face_recognition.face_locations(frame)
for (top, right, bottom, left) in faces:
cv2.rectangle(frame,(left,top),(right,bottom),(0,0,100),2)
cv2.imshow("", frame)
cv2.waitKey(1)
cap.release()
cv2.destroyAllWindows()
可以选择视频文件或者摄像头!
人脸识别
检测到人脸后就需要进行人脸比对。
obama = face_recognition.load_image_file("1.jpg")
biden = face_recognition.load_image_file("1.jpg")
mei = face_recognition.load_image_file("1.jpg")
# 对图片编码
obamacode = face_recognition.face_encodings(obama)[0]
bidencode = face_recognition.face_encodings(biden)[0]
meicode = face_recognition.face_encodings(mei)[0]
# 已录入的人脸
headimgs = [obamacode,bidencode]
# 距离计算
# dist = face_recognition.face_distance(headimgs,meicode)
# print(dist)
# 人脸匹配
rs = face_recognition.compare_faces(headimgs,meicode,tolerance=0.5)
print("摄像头中的是: ",rs)
将检测到的人脸进行编码并与已录入的人脸中进行比较。