Python,face_recognition将字符串转换为数组

问题描述 投票:0回答:1

我想将变量转换为字符串,然后转换为可用于比较的数组,但是我不知道该怎么做。我的代码:

import face_recognition
import numpy as np

a = face_recognition.load_image_file('C:\\Users\zivsi\OneDrive\תמונות\סרט צילום\WIN_20191115_10_32_24_Pro.jpg')  # my picture 1
b = face_recognition.load_image_file('C:\\Users\zivsi\OneDrive\תמונות\סרט צילום\WIN_20191115_09_48_56_Pro.jpg')  # my picture 2
c = face_recognition.load_image_file(
'C:\\Users\zivsi\OneDrive\תמונות\סרט צילום\WIN_20191115_09_48_52_Pro.jpg')  # my picture 3
d = face_recognition.load_image_file('C:\\Users\zivsi\OneDrive\תמונות\סרט צילום\ziv sion.jpg')  # my picture 4
e = face_recognition.load_image_file(
'C:\\Users\zivsi\OneDrive\תמונות\סרט צילום\WIN_20191120_17_46_40_Pro.jpg')  # my picture 5
f = face_recognition.load_image_file(
'C:\\Users\zivsi\OneDrive\תמונות\סרט צילום\WIN_20191117_16_19_11_Pro.jpg')  # my picture 6

a = face_recognition.face_encodings(a)[0]
b = face_recognition.face_encodings(b)[0]
c = face_recognition.face_encodings(c)[0]
d = face_recognition.face_encodings(d)[0]
e = face_recognition.face_encodings(e)[0]
f = face_recognition.face_encodings(f)[0]

我在这里尝试将变量转换为字符串

str_variable = str(a)

array_variable = np.array(str_variable)

my_face = a, b, c, d, e, f, array_variable


while True:
    new = input('path: ')
    print('Recognizing...')
    unknown = face_recognition.load_image_file(new)
    unknown_encodings = face_recognition.face_encodings(unknown)[0]

程序无法使用变量:

    results = face_recognition.compare_faces(array_variable, unknown_encodings, tolerance=0.4)

    print(results)
    recognize_times = int(results.count(True))

    if (3 <= recognize_times):
        print('hello boss!')
        my_face = *my_face, unknown_encodings

请帮助我

显示的错误:

 Traceback (most recent call last):
  File "C:/Users/zivsi/PycharmProjects/AI/pytt.py", line 37, in <module>
    results = face_recognition.compare_faces(my_face, unknown_encodings, tolerance=0.4)
  File "C:\Users\zivsi\AppData\Local\Programs\Python\Python36\lib\site- 
packages\face_recognition\api.py", line 222, in compare_faces
return list(face_distance(known_face_encodings, face_encoding_to_check) <= tolerance)
  File "C:\Users\zivsi\AppData\Local\Programs\Python\Python36\lib\site-packages\face_recognition\api.py", line 72, in face_distance
return np.linalg.norm(face_encodings - face_to_compare, axis=1)
ValueError: operands could not be broadcast together with shapes (7,) (128,) 
arrays python-3.x string numpy face-recognition
1个回答
0
投票
  • 首先,array_variable实际上应该是已知编码的list,而不是numpy数组。另外,您不需要str

  • 现在,在您的情况下,如果输入图像,即a,b,c,d,f,e的尺寸不同,错误将继续存在。您无法使用此功能比较具有不同尺寸的图像。原因是比较是基于距离,并且距离是在相同长度的矢量上定义的。

这是一个使用https://github.com/ageitgey/face_recognition/tree/master/examples中的照片的简单工作示例:

import face_recognition
import numpy as np
from PIL import Image, ImageDraw
from IPython.display import display

# Load a sample picture and learn how to recognize it.
obama_image = face_recognition.load_image_file("obama.jpg")
obama_face_encoding = face_recognition.face_encodings(obama_image)[0]

# Load a second sample picture and learn how to recognize it.
biden_image = face_recognition.load_image_file("biden.jpg")
biden_face_encoding = face_recognition.face_encodings(biden_image)[0]

array_variable = [obama_face_encoding,biden_face_encoding] # list of known encodings

# compare the list with the biden_face_encoding
results = face_recognition.compare_faces(array_variable, biden_face_encoding, tolerance=0.4)

print(results)
[False, True] # True means match, False mismatch

# False: coming from obama_face_encoding VS biden_face_encoding
# True: coming from biden_face_encoding VS biden_face_encoding

要运行它,请转到此处:https://beta.deepnote.com/project/09705740-31c0-4d9a-8890-269ff1c3dfaf#

文档:https://face-recognition.readthedocs.io/en/latest/face_recognition.html

编辑

要保存已知编码,您可以使用numpy.save

np.save('encodings',biden_face_encoding) # save
load_again = np.load('encodings.npy') # load again
© www.soinside.com 2019 - 2024. All rights reserved.