#python-3.x #face-recognition
#python-3.x #распознавание лиц
Вопрос:
У меня есть следующий код для извлечения лиц из фотографии. Теперь я хочу извлечь его из каталога, то есть из нескольких файлов одновременно. Это должно быть очень просто, например, просто изменить ‘MultiPeople / Faces / IMG100’ на просто ‘MultiPeople / Faces’, т.е. Весь каталог. Но я продолжаю находить ошибку под кодом. Я выполнил все обычные проверки, например, убедился, что учетная запись является администратором, убедился, что файл или каталог не открыты одновременно и т.д.
from PIL import Image
import face_recognition
path = r"C:UsersJulioDesktopFace ExtractionOutputface"
image = face_recognition.load_image_file('MultiPeople/Faces')
face_locations = face_recognition.face_locations(image)
print("I found {} face(s) in this photograph.".format(len(face_locations)))
face_counter = 0
for face_location in face_locations:
top, right, bottom, left = face_location
print("I found a face in image location Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right))
face_image = image[top:bottom, left:right]
pil_image = Image.fromarray(face_image)
pil_image.save(str(path) str(face_counter) ".jpg")
face_counter = 1
Traceback (most recent call last):
File "C:UsersJulioPycharmProjectstestExtract faces from photo.py", line 5, in <module>
image = face_recognition.load_image_file('MultiPeople/Faces')
File "C:UsersJulioPycharmProjectstestvenvlibsite-packagesface_recognitionapi.py", line 86, in load_image_file
im = PIL.Image.open(file)
File "C:UsersJulioPycharmProjectstestvenvlibsite-packagesPILImage.py", line 2878, in open
fp = builtins.open(filename, "rb")
PermissionError: [Errno 13] Permission denied: 'MultiPeople/Faces'
Ответ №1:
Я не уверен, что это решает вашу проблему, но face_recognition.load_image_file()
сделано для загрузки только одного изображения, а не каталога / нескольких файлов. Проверьте, может ли проблема быть там!
Также может быть, этот пример может вам помочь, посмотрите на него.
Комментарии:
1. хм, хорошо — кто-нибудь знает, как вместо этого загрузить каталог или несколько файлов?
2.Вы можете загрузить все файлы в каталоге в списке следующим образом:
from os import walk
mypath='/home/name/.../'
f = []
for (_, _, filenames) in walk(mypath):
f.extend(filenames)
break
А затем использовать метод из ссылки выше — перебирать их/3. Единственная проблема заключается в том, что иногда может быть более 500 файлов. В этом случае это сработает?
4. Почему это не должно быть? Список длиной 500 не такой большой, плюс вы храните не объекты, а строки. Перебор 500 элементов в этом случае может быть немного медленным, но вы можете оптимизировать его после того, как он заработает 🙂
5. И если ваша проблема будет (или уже) решена, пожалуйста, закройте вопрос