Проблема с Eigenfaces для распознавания лиц в python - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь реализовать алгоритм 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

И иногда я получаю большие расстояния для одного и того же человек, чем расстояние разных людей.

Где проблема именно

...