import sysimport cv2import face_recognition #dlib 人脸识别库第二步:加载图片并数值化

测试图片为我的偶像:

face_img=face_recognition.load_image_file('1.png')print(face_img)

打印结果:

输出为三维图像矩阵,把图像转为矩阵。

facephp获取人脸手把手教你实现人脸辨认有手就行 Docker

第三步:获取图片中的人脸数据

提取人脸特色编码,并获取到人脸五官的位置:

face_encodings=face_recognition.face_encodings(face_img)#进行特色提取向量化,获取人脸的编码face_locations=face_recognition.face_locations(face_img)#五官对应的位置print(face_encodings)

图片中有几个人脸就有几个数组:

第四步:人数打算

这里只做判断两个人是否为一个人,超出两个就退出了

n=len(face_encodings)print(n)#这里只做判断两个人是否为一个人,超出两个就退出了if n>2:print('超过两个人')sys.exit()

打印可以分出是两个人:

第五步:人脸比较

#获取两个人的数据face1=face_encodings[0]face2=face_encodings[1]result=face_recognition.compare_faces([face1],face2,tolerance=0.6)#人脸比较,,偏差不超过0.6则可以,默认值也为0.6print(result)

返回:

判断出为不是同一个人。

再轻微修正一下,让表达更清楚:

if result==[True]:name='same'print('两个人为同一个人')else:print('两者不是同一个人')name='different'

返回:

第六步:框出人脸写上笔墨

获取两个人脸位置坐标:

for i in range(len(face_encodings)):face_encoding=face_encodings[(i-1)] #倒序获取face_location = face_locations[(i - 1)]print(face_location)#获取人脸位置

返回:

元祖四个数值分别表示框人脸矩形框的四个点坐标。

获取到坐标后开始画框框并写上笔墨:

top,right,bottom,left=face_location#确定出坐标#画框框cv2.rectangle(face_img,(left,top),(right,bottom),(255,0,0))#传参分别为:图片,坐标,RGB颜色,框粗细#写字上去cv2.putText(face_img,name,(left-10,top-10),cv2.FONT_HERSHEY_DUPLEX,0.8,(255,255,0),2)#传参数分别为:图片,笔墨,坐标,字体,字体大小,颜色,粗细第七步:显示处理好的图像

face_img_rgb=cv2.cvtColor(face_img,cv2.COLOR_BGR2RGB)#确保颜色不要混乱#展示图像cv2.imshow('compare',face_img_rgb)#设置等待关闭cv2.waitKey(0)

效果:

你只须要按步骤敲代码即可为全部代码,当然为了便于大家直接cv,代码展示如下:

# coding=gbk"""import sysimport cv2import face_recognition #dlib 人脸识别库face_img=face_recognition.load_image_file('1.png')# print(face_img)face_encodings=face_recognition.face_encodings(face_img)#进行特色提取向量化,获取人脸的编码face_locations=face_recognition.face_locations(face_img)#五官对应的位置# print(face_encodings)n=len(face_encodings)print(n)#这里只做判断两个人是否为一个人,超出两个就退出了if n>2:print('超过两个人')sys.exit()#获取两个人的数据face1=face_encodings[0]face2=face_encodings[1]result=face_recognition.compare_faces([face1],face2,tolerance=0.6)#人脸比较,,偏差不超过0.6则可以,默认值也为0.6# print(result)if result==[True]:name='same'print('两个人为同一个人')else:print('两者不是同一个人')name='different'for i in range(len(face_encodings)):face_encoding=face_encodings[(i-1)] #倒序获取face_location = face_locations[(i - 1)]# print(face_location)#获取人脸位置top,right,bottom,left=face_location#确定出坐标#画框框cv2.rectangle(face_img,(left,top),(right,bottom),(255,0,0))#传参分别为:图片,坐标,RGB颜色,框粗细#写字上去cv2.putText(face_img,name,(left-10,top-10),cv2.FONT_HERSHEY_DUPLEX,0.8,(255,255,0),2)#传参数分别为:图片,笔墨,坐标,字体,字体大小,颜色,粗细face_img_rgb=cv2.cvtColor(face_img,cv2.COLOR_BGR2RGB)#确保颜色不要混乱#展示图像cv2.imshow('compare',face_img_rgb)#设置等待关闭cv2.waitKey(0)

标出了两个人脸并写上为different,便是不同的意思,当然本篇文章为了给大家大略先容实现人脸识别,并没有做过多的繁芜实现,近段韶光我研究人脸识别也做了一些繁芜的功能实现,感兴趣也可以一起聊聊。