얼굴 위치를 기준으로 자르기를 어떻게 배치 할 수 있습니까?


13

각 사진에 한 사람 만있는 이벤트에서 12,000 장의 사진이 있습니다. 3 분의 1을 적용하려면이 사진들을 잘라 내야합니다. 이 모든 것을 개별적으로 수행한다는 아이디어는 어려우며 모든 사진이 약간 다르기 때문에 모든 사진을 10 % 할인 할 수는 없습니다.

사람의 위치에 따라 이러한 사진을 모두 자동으로 자르는 방법이 있습니까?


2
포토샵과 관련이 있습니까? 프로그래밍에 정통한 경우 Mathematica 또는 Python의 스크립트로 관리 할 수 ​​있습니다. 가능하면 문제 / 대비 등을 설명하기 위해 그림 두 장을 추가하십시오.
anderstood

ImageMagick에 익숙한 경우 원하는 것을 수행해야합니다. stackoverflow.com/questions/4813608/…
Nehal Dattani

OpenCV와 python을 사용하여 비슷한 것을 시도했습니다. 이 방향이 괜찮다면 스크립트를 답장에 넣을 수 있습니다.
agtoever

포토샵 일 필요는 없습니다.이 솔루션을 사용해 보겠습니다!
시민

답변:


15

여기에 사용하여 해결책 pythonopencv:

left, right, top, bottom변수로 지정된 패딩으로 jpeg 사진에서 찾은 모든 얼굴을 jpeg 사진에서 찾은 모든 폴더에서 자릅니다 .

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)

쓰다

위의 스크립트를 사용하려면 필요 python하고 opencv설치 해야합니다 (Google에 opencv플랫폼 설치 방법 ).

그런 다음 위의 코드를 .py파일 "autocrop.py"또는 다른 이름으로 저장 한 다음이 파일을 다운로드하여 저장 하고 이미지와 동일한 디렉토리에 저장하십시오.

스크립트는 .jpg폴더에서 모든 파일을 찾아 파이썬 코드에 설정된 패딩 설정에 따라 자릅니다.

예:

위의 코드를 10px 패딩으로 설정하면 소스와 결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

결과:

여기에 이미지 설명을 입력하십시오

내가 뻔뻔스럽게 적응 한 튜토리얼은 다음과 같습니다.

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(소스 stackoverflow.com/a/36243142/2125392 )
CivFan

3

면책 조항 : 저는이 도구의 개발자입니다.

Face Crop Jet 를 사용 하여 대량의 사진에서 얼굴을 감지하고자를 수 있습니다. 모든 형식 또는 크기의 이미지가 지원됩니다. 얼굴뿐만 아니라 ID 카드의 프로필 사진이 아니라 얼굴이 자동으로 감지되고 잘립니다.

소프트웨어는 http://www.facecropjet.com 에서 다운로드 할 수 있습니다

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.