Tengo 12.000 fotos de un evento en el que solo aparece una persona en cada foto. Necesito recortar estas fotos para aplicar la regla de los tercios. La idea de hacer todos estos individualmente es desalentador y no puedo quitarles un 10% de la parte superior ya que cada foto es un poco diferente.
¿Hay alguna forma de recortar automáticamente todas estas fotos en función de la posición de la persona?
python
y opencv
:Esto recortará todas las caras que encuentre en las fotos jpeg en cualquier carpeta en la que lo ejecute, con el relleno especificado por las left, right, top, bottom
variables:
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)
Usar
python
Para usar el script anterior , necesita opencv
instalarlo (solo busque en Google cómo instalarlo opencv
para su plataforma).
Luego guarde el código anterior como un .py
archivo, "autocrop.py"
o algo así, luego descargue y guarde este archivo y colóquelo en el mismo directorio que sus imágenes.
El script debe encontrar todos los .jpg
archivos en la carpeta y recortarlos según la configuración de relleno establecida en el código de Python.
Ejemplo:
Con el código anterior establecido en un relleno de 10 px para que sea dramático, aquí está la fuente y el resultado:
Resultado:
Aquí está el tutorial que adapté descaradamente:
https://realpython.com/blog/python/face-recognition-with-python/
Ese tutorial es mucho mejor explicando todo que yo. Básicamente, solo tomé ese código y lo agregué un poco para procesar cosas por lotes (en lugar de escribir nombres de archivo) y luego le dije que recortara y guardara en lugar de dibujar un rectángulo y mostrar la imagen.
pip install opencv-python
, 2. Actualice todas las print
declaraciones para usar paréntesis, 3. Cambie cv2.cv.CV_HAAR_SCALE_IMAGE
a cv2.CASCADE_SCALE_IMAGE
(fuente: stackoverflow.com/a/36243142/2125392 )Gracias a la respuesta de @Ryan, que adapté hace 5 años, automaticé la mayor parte de mi primer trabajo de escritorio. Ahora es el recorte automático del paquete de código abierto en PyPI y se puede usar desde su terminal o a través de una API de Python.
Si tiene instalado Python, instálelo a través pip install autocrop
de y úselo desde la línea de comando:
autocrop -i pics -o crop -r reject -w 400 -H 400
En este ejemplo, recortará todos los archivos de imagen que pueda encontrar en la pics
carpeta, los redimensionará a 400 px
cuadrados y los generará en el crop
directorio. Las imágenes en las que no puede detectar una cara se enviarán al reject
directorio.
Descargo de responsabilidad: soy el desarrollador de esta herramienta.
Puede usar Face Crop Jet para detectar y recortar caras de fotos a granel. Se admiten imágenes de cualquier formato o tamaño. Las caras se detectarán y recortarán automáticamente (no solo la cara, una imagen de perfil para tarjetas de identificación).
El software se puede descargar desde http://www.facecropjet.com
En Adobe Photoshop, puede usar este complemento de Exchange:
Una vez que haya instalado python y opencv, y luego instale el recorte automático como se explicó anteriormente, solo asegúrese de tener su carpeta de entrada y carpeta de salida ingresadas correctamente en la terminal para que funcione el recorte automático.
Para hacer esto, arrastre y suelte su carpeta en la terminal y copie y pegue las ubicaciones de los archivos en la línea de código usando la edición de texto (la entrada va después de -i y la salida va después de -o en la línea de código). Ahora que su línea de código está completa, copie y pegue el código terminado en la terminal y presione regresar o ingresar.
Aquí hay una línea de ejemplo (importante: todo lo que tiene que hacer es reemplazar la entrada y la salida):
recorte automático -i /Usuarios/su nombre de usuario/Escritorio/fotos -o /Usuarios/su nombre de usuario/Escritorio/recortado -r rechazar -w 1024 -H 1024
nota: i representa la carpeta de entrada o representa la carpeta donde se guardarán el archivo o las imágenes recortadas, también conocida como la carpeta de salida
comprendió
nehal dattani
siempre
Ciudadano