PermissionError: [Ошибка 13] Ошибка отказа в разрешении при попытке прочитать каталог

#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. И если ваша проблема будет (или уже) решена, пожалуйста, закройте вопрос