LoginSignup
3
6

More than 3 years have passed since last update.

Python + OpenCVで顔写真のトリミング

Last updated at Posted at 2021-03-21

今年も春がやってくる。生徒の顔写真をトリミングしなければいけない。
パソコンが勝手にやってくれないかなと思いつつ、色々と検索して、やってみたら出来たので、備忘録的に書いてみようと思う。

環境はWindows10です。使うのは'Python'なのですが、名前を聞いたことあるぐらいの知識。'OpenCV'ってのを使って、顔認識させられるらしいという事が分かった。

そこで、環境の準備から。

まず、OpenCVをダウンロードします。
op1.jpg

ここからWindows版のOpenCVを入手できます。ダウンロードしたアーカイブをダブルクリックすると、自動で解凍してくれますので、解凍された'opencv'フォルダを、Cドライブの直下に移動します。

そして、環境変数をいじって、pathを通します。
op2.jpg
具体的には、コントロールパネル>システムとセキュリティ>システム>システムの詳細設定>環境変数>path>新規
で、'C:\opencv\build\x64\vc15\bin'を追加しておきます。

次に、Visual Studio のインストールを行いました。

もちろん、無料のやつね。

Pythonを扱えるように、インストールします。
vs.jpg

インストールしたら、Pythonアプリケーションを適当な名前で作成します。
vs2.jpg

作成したら、Pythonパッケージの管理で、OpenCV環境を扱えるようにします。
vs3.jpg
検索で、opencvと入れると、候補にopencv-python(バージョン番号)が現れると思うので、それを入れます。

これで、準備はOKです。

では、コードを書いていきます。

 #リソースのインポート
 import cv2
 import glob
 import os

 #trimフォルダの作成
 os.makedirs('trim', exist_ok=True)

 #カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込み
 HAAR_FILE = "C:\opencv\sources\data\haarcascades\haarcascade_frontalface_alt.xml"
 cascade = cv2.CascadeClassifier(HAAR_FILE)

 #ファイルリストの取得
 files = glob.glob("*.jpg")
 for file in files:

     #取得したファイル名の表示
     print(file)

     #画像ファイルの読み込み
     img = cv2.imread(file)

     #グレースケールに変換
     img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)

     #カスケード型分類器を使用して画像ファイルから顔部分を検出する
     face = cascade.detectMultiScale(img2,scaleFactor=1.07,minNeighbors=7,minSize=(300,300))

     #顔部分を切り取り、リサイズする。
     for x,y,w,h in face:

         #横幅のエリアを1.6倍にし、縦幅のエリアを2.23倍にすることで、4:3の比率でカット
         face_cut = img[y-int(h*0.6):y+int(h*1.53), x-int(w*0.3):x+int(w*1.3)]

         #カットした画像を450*600のサイズにする。
         resize_img = cv2.resize(face_cut , dsize=(450, 600))

     #画像の出力
     cv2.imwrite('trim\\' + file , resize_img )

これで、このソースと同じフォルダにある複数のjpgファイルから顔部分だけ4:3の比率でトリミングして、450*600にリサイズして、trimという名前のサブフォルダを作成して、同じ名前で保存するという作業をしてくれるようになりました。

実行は、Pythonソースファイルを作業するフォルダにコピーして
py1.jpg
ダブルクリックで実行できました。

参考になったページはたくさんあったのですが、自分が記事を書くとは思っていなかったので、追えませんでした…。

私と同じ仕事をしている方の助けになれば幸いです。

3
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6