Я пытаюсь реализовать алгоритм eigenfaces для распознавания лиц в python, используя numpy и scikit learn для 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
И иногда я получаю большие расстояния для одного и того же человек, чем расстояние разных людей.
Где проблема именно