Как перевести строку в вектор для расчёта евклидового расстояния?

Есть проект по идентификации людей с помощью веб камеры. Проблема заключается в расчёте евклидового расстояния между дескрипторами лица. При извлечении дескрипторов, они с типом dlib.vector, мне их необходимо занести в файл (в перспективе создать БД), а затем извлечь для расчёта евклидового расстояния. Второй дескриптор получаю с камеры ноутбука. Использую 2 нейронки от dlib. Я могу извлечь дескриптор из файла, преобразовать его в массив, список, строку, но как я понял оба дескриптора должны иметь тип dlib.vector, что сделать мне не удаётся.

Python 3.6 + cv2 + dlib + scipy

Расчёт евклидового расстояния. a = distance.euclidean(face_descriptor1, face_descriptor2)


Ответы (3 шт):

Автор решения: MaxU

Проще всего воспользоваться модулем Numpy - сначала перевести dlib.vector в numpy array:

import numpy as np

arr = np.asarray(dlib.vector)

Расчёт евклидового расстояния:

np.linalg.norm(database_landmarks - arr)
→ Ссылка
Автор решения: Egor Shchukin

Спасибо за ответ! Всё же смог сам справиться. Выяснил, что для такой конструкцииa = distance.euclidean(face_descriptor1, face_descriptor2) не обязательно получить два вектора типа dlib.vector. Как я понял, нужен был двумерный массив, в котором всего один столбец и 128 строк. Справился так.

 import numpy as np
 line = []
 face_descriptor1 = np.zeros((128, 1))
 f = open("D:\sns findface\descript\descript"+ str(i) +".txt")
 for z in range(128):
     line = float(f.readline())
     face_descriptor1[z][0] = line
→ Ссылка
Автор решения: MaxU

Судя по вашему ответу - основная сложность была в том, чтобы прочитать вектор face_descriptor из текстового файла, получив матрицу размерности (128, 1).

Сделать это можно так:

face_descriptor1 = np.loadtxt(filename).reshape(-1, 1)
→ Ссылка