【问题标题】:Using a loop to select multiple images, process and then output to a directory使用循环选择多个图像,处理然后输出到目录
【发布时间】:2021-01-16 17:50:22
【问题描述】:

目前,以下代码从单个图像中提取人脸,然后将这些人脸输出到文件夹。如何输入一个充满图像的目录并做同样的事情?我似乎无法将目录添加到图像中 - face_recognition.load_image_file(C:/directory) 因为它不断返回权限被拒绝错误。有没有办法让它遍历特定​​目录中的所有图像,然后将它们输出到我的路径?

from PIL import Image
import face_recognition

image = face_recognition.load_image_file(r"C:\Users\Julio\Desktop\Face Extraction\Input\IMG_0421.JPG")
path = r"C:\Users\Julio\Desktop\Face Extraction\Output\face"

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

【问题讨论】:

    标签: python-3.x face-recognition


    【解决方案1】:

    我最近做了类似的事情,希望对你有所帮助。我基本上将我的路径设置为一个变量,然后将该路径的 listdir 设置为一个名为 img_list 的变量,然后循环遍历:

    # media thumbnails
    path = "/media/default_thumbnails/"
    img_list = listdir(path)
    
    for image in img_list:
        """
        Need to open an image file from the directory as a PIL Image. 
        Then create a BytesIO and save that as the thumbnail.
        """
        try:
            img = PILImage.open(path + image)
            rawfile = BytesIO()
            img.save(rawfile, format='jpeg')
            mt = MediaThumbnail.objects.create()
        mt.thumbnail.save(image, rawfile)
        rawfile.close()
    except:
        print(f"   skipping {image}")
    print("   thumbnails created")
    

    要将其集成到您的代码中,您需要执行以下操作:

    from PIL import Image
    import face_recognition
    
    path = "C:\Users\Julio\Desktop\Face Extraction\Input"
    img_list = listdir(path)
    
    for input_img in img_list:
    
        image = face_recognition.load_image_file(input_img)
        [.... the rest of your code ]
    

    【讨论】:

    • 对不起,我对 python 有点陌生 - 集成到我的代码中是什么样的?
    • 所以我得到的初始错误是 listdir 没有定义。
    • 会不会,img_list = os.listdir(path)
    • 你需要像这样导入listdir:from os import listdir
    【解决方案2】:

    好吧,在 robline 的建议之后,这是我目前的代码:

    from PIL import Image
    import face_recognition
    from os import listdir
    
    path = r"C:\Users\Julio\Desktop\Face Extraction\Input"
    img_list = listdir(path)
    
    for input_img in img_list:
        image = face_recognition.load_image_file(input_img)
    
    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
    

    这会产生以下错误 - multi2.jpeg 只是 C:\Users\Julio\Desktop\Face Extraction\Input 中的一个文件(唯一一个)

    Traceback(最近一次调用最后一次): 文件“C:/Users/Julio/PycharmProjects/test/Extract faces from photo test.py”,第 9 行,在 图像 = face_recognition.load_image_file(input_img) 文件“C:\Users\Julio\PycharmProjects\test\venv\lib\site-packages\face_recognition\api.py”,第 86 行,在 load_image_file im = PIL.Image.open(文件) 文件“C:\Users\Julio\PycharmProjects\test\venv\lib\site-packages\PIL\Image.py”,第 2878 行,打开 fp = builtins.open(文件名,“rb”) FileNotFoundError:[Errno 2] 没有这样的文件或目录:'multi2.jpeg'

    进程以退出代码 1 结束

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多