如何根据面部位置批量裁剪?


13

我从一次活动中得到了12,000张照片,每张照片中只有一个人。我需要裁剪这些照片以应用三分法则。单独进行所有这些操作的想法令人生畏,由于每张照片都有些不同,我不能只拿掉10%。

我是否可以根据人的位置自动裁剪所有这些照片?


2
是否必须与photoshop一起使用?如果您精通编程,也许可以通过Mathematica或python中的脚本进行管理。如果可能,添加两张图片以说明问题/对比度/等。
anderstood,2015年

如果您熟悉ImageMagick,这应该可以满足您的需求。stackoverflow.com/questions/4813608/...
Nehal Dattani

我尝试使用OpenCV和python类似的东西。如果您对这个方向没意见,我可以将我的脚本放入答案中。
agtoever

不必是photoshop,我将尝试这些解决方案!
公民

Answers:


15

这是使用python和的解决方案opencv

这将裁剪在jpeg照片中找到的所有面孔,无论您在其中运行的任何文件夹中,都使用left, right, top, bottom变量指定的填充:

import cv2
import sys
import glob 

cascPath = "haarcascade_frontalface_default.xml"

# Create the haar cascade
faceCascade = cv2.CascadeClassifier(cascPath)

files=glob.glob("*.jpg")   
for file in files:

    # Read the image
    image = cv2.imread(file)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Detect faces in the image
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        flags = cv2.cv.CV_HAAR_SCALE_IMAGE
    )

    print "Found {0} faces!".format(len(faces))

    # Crop Padding
    left = 10
    right = 10
    top = 10
    bottom = 10

    # Draw a rectangle around the faces
    for (x, y, w, h) in faces:
        print x, y, w, h

        # Dubugging boxes
        # cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)


    image  = image[y-top:y+h+bottom, x-left:x+w+right]

    print "cropped_{1}{0}".format(str(file),str(x))
    cv2.imwrite("cropped_{1}_{0}".format(str(file),str(x)), image)

使用

要使用上述脚本,您需要pythonopencv安装(仅google Google如何opencv为您的平台安装)。

然后将上面的代码另存为.py文件"autocrop.py"或其他内容,然后下载并保存此文件并将其放在与图像相同的目录中。

该脚本应在.jpg文件夹中找到所有文件,并根据python代码中设置的填充设置裁剪它们。

例:

将上面的代码设置为10 px填充时,效果非常明显,这是源代码和结果:

在此处输入图片说明

结果:

在此处输入图片说明

这是我无耻改编的教程:

https://realpython.com/blog/python/face-recognition-with-python/

该教程比我更擅长于解释一切。基本上,我只是采用了这段代码,并在批处理中添加了一些内容(而不是键入文件名),然后告诉它裁剪并保存而不是绘制矩形并显示图片。


1
对于python3:1. pip install opencv-python,2.更新所有print语句以使用括号,3.更改cv2.cv.CV_HAAR_SCALE_IMAGEcv2.CASCADE_SCALE_IMAGE(source:stackoverflow.com/a/36243142/2125392
CivFan

3

免责声明:我是该工具的开发商。

您可以使用Face Crop Jet从批量照片中检测和修剪脸部。支持任何格式或大小的图像。脸部将被自动检测并修剪(不仅仅是脸部,身份证的个人资料图片)。

可以从http://www.facecropjet.com下载该软件

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.