OpenCV で人物の顔の大きさを揃えたサムネイルを出力する
by Yuji Arai
webサイトや印刷物のデザインを制作する際に、様々な方のサムネイルを並べて掲載することがしばしば発生するかと思います。
少量であれば手作業で作成しても良いですが、大量に作成する場合にトリミングや顔の大きさを揃えて書き出しを行っていくのも少々手間になります。
今回はOpenCVを用いてそのあたりの作業を自動化してみようかと思います。
下準備
OpenCVを利用するためにPhythonとOpenCVをインストールします。
自分の環境はMacでPhythonはプリインストールされているため、OpenCVのみをインストールしました。
OpenCVのインストールに関してはhomebrewを利用しています。
以下のURLを参考に行いました。
参考サイト
取りあえず動くソースコード
以下はとりあえず動くソースコードになります。
書き出し画像サイズや顔の面積の割合等は任意の値に書き換え可能です。
また、このソースコードを利用するためには顔認識に必要なOpenCV用のカスケード識別器の学習済みファイルが必要になります。以下からダウンロードを行ってください。
学習済みファイルはこちら
ソースコード
ディレクトリ構成

- main.pyは上記のソースコードになります
- haarcascade_frontalface_alt.xmlは学習済みファイルです
- origin_imagesは処理を行いたい画像を格納するディレクトリです
- dist_imagesは処理後の画像を保存するためのディレクトリです
処理の実行
以下のコマンドで処理を実行してください。
python main.py
主力結果
実際に今回のソースコードで出力した結果になります。
加工前の画像
加工後の画像
所感
しっかりと指定した画像のサイズにトリミングされ、顔自体もその枠内に収まっているものの、顔の大きさがしっかりと揃っていないところが気になります。
加工前の画像の顔の角度等がもう少し揃っているとそこらへんの精度はもう少し高くなるかもしれません。