百度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函数,返回值中会包含相似得分,可以根据自己的实际情况来设置阈值,从而判断是否为同一个人。