python中人脸识别的特征脸问题

2024-04-19 11:09:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python使用numpy和scikit learn for PCA实现人脸识别的特征脸算法,然后计算PCA生成的展开矩阵之间的欧氏距离

问题是,我无法在同一个人的脸之间获得近距离,也无法在不同的人之间获得大距离:

import numpy as np
from sklearn.decomposition import PCA
from PIL import Image

person1_1 = Image.open('person1/1.jpg').convert('LA')
person1_2 = Image.open('person1/2.jpg').convert('LA')

person2_1 = Image.open('person2/1.jpg').convert('LA')
person2_2 = Image.open('person2/2.jpg').convert('LA')


person1_1 = np.asarray(person1_1)[:,:,0]
person1_2 = np.asarray(person1_2)[:,:,0]

person2_1 = np.asarray(person2_1)[:,:,0]
person2_2 = np.asarray(person2_2)[:,:,0]


pca = PCA(n_components=100)

person1_1_pca = pca.fit_transform(person1_1)
person1_2_pca = pca.fit_transform(person1_2)

person2_1_pca = pca.fit_transform(person2_1)
person2_1_pca = pca.fit_transform(person2_2)

print("Same person: {}".format(np.linalg.norm(np.ravel(person1_1_pca)-np.ravel(person1_2_pca))))
print("Different person: {}".format(np.linalg.norm(np.ravel(person1_1_pca)-np.ravel(person2_1_pca))))

该代码生成:

Same person: 9293.360941013
Different person: 10218.849581657663

有时,同一个人的距离比不同人的距离大

问题到底出在哪里


Tags: image距离convertnptransformopenlafit