顔の位置に基づいて切り抜きをバッチ処理するにはどうすればよいですか?


13

各写真に一人しかいないイベントから12,000枚の写真を取得しました。3分の1の規則を適用するには、これらの写真をトリミングする必要があります。これらすべてを個別に行うという考えは気が遠く、すべての写真が少し異なるため、それらのすべてを10%引き下げることはできません。

人物の位置に基づいてこれらのすべての写真を自動的にトリミングする方法はありますか?


2
photoshopと一緒にする必要がありますか?プログラミングに精通している場合は、Mathematicaまたはpythonのスクリプトを使用して管理できます。可能であれば、問題/コントラスト/などを説明するために2つの画像を追加します。
アンデルステッド

ImageMagickに精通している場合、これはあなたが探していることをするはずです。stackoverflow.com/questions/4813608/...
Nehal Dattani

OpenCVとpythonを使用して同様のことを試しました。この方向で大丈夫なら、スクリプトを答えに入れることができます。
agtoever

フォトショップである必要はありません。これらのソリューションを試してみます!
市民

回答:


15

以下はpythonand を使用したソリューションopencvです。

これにより、left, right, top, bottom変数で指定されたパディングを使用して、実行するフォルダー内の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)

使用する

上記のスクリプトを使用するには、必要pythonopencvインストール(ただインストールする方法グーグルopencvご使用のプラットフォームに対応します)。

次に、上記のコードを.pyファイルなどとして保存します。"autocrop.py"次に、このファイルダウンロードして保存し、画像と同じディレクトリに配置します。

スクリプトは.jpg、フォルダー内のすべてのファイルを検索し、Pythonコードで設定されたパディング設定に基づいて切り取ります。

例:

上記のコードを劇的に10ピクセルのパディングに設定すると、ソースと結果は次のようになります。

ここに画像の説明を入力してください

結果:

ここに画像の説明を入力してください

ここに私が恥知らずに適応したチュートリアルがあります:

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

そのチュートリアルは、私よりもはるかにすべてを説明するのに優れています。基本的に私はそのコードを取り、(ファイル名を入力する代わりに)バッチ処理のものに少し追加し、四角形を描画して画像を表示する代わりに、トリミングして保存するように指示しました。


1
python3の場合:1. pip install opencv-python、2。のアップデートすべてのprint括弧を使用するステートメント、3変更cv2.cv.CV_HAAR_SCALE_IMAGEするcv2.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.