百度AI之图像识别SDK:实现人脸检测+比对(python)

这里我们同样需要在百度AI控制台里创建一个人脸识别的应用,下面是代码,只需要将需要比对的图片放在py文件所在目录下执行py文件即可。

# -*- coding: UTF-8 -*-  

from aip import AipFace
import cv2
import base64
import sys

sys.setrecursionlimit(1000000) 

#初始化aipFace

APP_ID = 11222528
API_KEY = l1CAmQTvS5IAgWeurQv2WPyF
SECRET_KEY = dmZ9zDvoVqImWkoSxGdYKHaF6Zwh4vaG

aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY)


#人脸检测部分
def get_file_content(filePath):
    with open(filePath, rb) as fp:
        return fp.read()

options = {
    max_face_num: 1, # 人脸数量
    face_fields: "expression,faceshape",
}		
		
result1 = aipFace.detect(get_file_content(test1.jpg), options)
# 解析位置信息1
location1=result1[result][face_list][0][location]
left_top1=(int(location1[left]),int(location1[top]))
right_bottom1=(int(left_top1[0]+location1[width]),int(left_top1[1]+location1[height]))

img1=cv2.imread(test1.jpg)
cv2.rectangle(img1,left_top1,right_bottom1,(0,255,0),2)
cv2.imshow(img1,img1)	

result2 = aipFace.detect(get_file_content(test2.jpg), options)
# 解析位置信息2
location2=result2[result][face_list][0][location]
left_top2=(int(location2[left]),int(location2[top]))
right_bottom2=(int(left_top2[0]+location2[width]),int(left_top2[1]+location2[height]))

img2=cv2.imread(test2.jpg)
cv2.rectangle(img2,left_top2,right_bottom2,(0,255,0),2)
cv2.imshow(img2,img2)		
		
		
		
#人俩比对部分		
result = aipFace.match([
    {
        image : base64.b64encode(open(test1.jpg, rb).read()).decode(),
        image_type: BASE64,
    },
    {
       image : base64.b64encode(open(test2.jpg, rb).read()).decode(),
        image_type: BASE64,
    }
])

#print(result)
print(
)
aaa=result[result][score]
print ("相似得分为:"),print (aaa)
if aaa>80:
	print ("图1和图2是同一个人.
")
else:
	print ("图1和图2不是同一个人.
")
cv2.waitKey(100000)

我们在powershell运行.py文件,执行结果如下图所示:

下面我们来简单分析一下代码,前面的初始化aipFace就不多说了,我们直接从人脸检测说起,首先是读取图片内容,然后传入aipFace.detect函数,参数options是api返回信息的参数,在options里可以添加参数,这样result1和result2的返回信息里会有对应参数的信息,(有兴趣的朋友也可以自己打印出result1和result2的值看看里面是什么内容。)result1,2里包含了检测到的人脸位置信息,这时候我们提取出这些信息,即人脸的位置,然后利用openCV里的画矩形函数框出人脸。

下面就是人脸的比对部分代码,同样将图片转为base64后传入match函数,返回值中会包含相似得分,可以根据自己的实际情况来设置阈值,从而判断是否为同一个人。

经验分享 程序员 微信小程序 职场和发展