我们用opencv定位人脸后,可以用欧氏距离做简单的人脸识别:
求2个人脸之间的欧氏距离
def get_EuclideanDistance(x,y): myx=np.array(x) myy=np.array(y) return np.sqrt(np.sum((myx-myy)*(myx-myy))) def get_distance(img,findimg): newsize=(img.shape[1],img.shape[0]) fimg=cv2.resize(findimg,newsize) my_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) my_fimg=cv2.cvtColor(fimg,cv2.COLOR_BGR2GRAY) return get_EuclideanDistance(my_img,my_fimg)
选择最小的欧氏距离为最匹配的人脸
#IT精英比尔盖茨 isface1=get_distance(myimg[faceresult[0][0][0]:faceresult[0][1][0],faceresult[0][0][1]:faceresult[0][1][1],:],myimgt[facet_result[0][0][0]:facet_result[0][1][0],facet_result[0][0][1]:facet_result[0][1][1],:]) isface2=get_distance(myimg[faceresult[1][0][0]:faceresult[1][1][0],faceresult[1][0][1]:faceresult[1][1][1],:],myimgt[facet_result[0][0][0]:facet_result[0][1][0],facet_result[0][0][1]:facet_result[0][1][1],:]) if isface1<isface2: cv2.rectangle(myimg, faceresult[0][0], faceresult[0][1],(255,0,255)) cv2.rectangle(myimgt, facet_result[0][0], facet_result[0][1],(255,0,255)) else: cv2.rectangle(myimg, faceresult[1][0], faceresult[1][1],(255,0,255)) cv2.rectangle(myimgt, facet_result[0][0], facet_result[0][1],(255,0,255))