こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回はディープラーニングの画像処理に使う、手元の画像データから顔認識をして、切り出す作業をやってみましょう。
*****************
さて、今回はOpenCVで顔画像を切り取ってみよう。
以前のブログでOpenCVで顔認識のpythonコードを書いてみたが、今回は描画された矩形の通りに顔画像を切り出してみたい。
切り出す画像はこちら。
画像処理のコードを書いている人にはおなじみのレナさん。
まずpythonコードはこちら。
わかりやすいように、行数を減らして最低限にしてみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# -*- coding: utf-8 -*- import cv2 #読み込む画像 in_jpg = "./lena.jpg" #切り取って保存する画像名 out_jpg = "./lenaCut001.jpg" #画像を読み込み image1 = cv2.imread(in_jpg) #グレースケールに変換 image_gs = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY) # 「./haarcascade_frontalface_alt.xml」をカレントディレクトリィに置くと確実 cascade = cv2.CascadeClassifier("./haarcascade_frontalface_alt.xml") #引数についてはcascade.detectMultiScaleで検索 face_list = cascade.detectMultiScale(image_gs,scaleFactor=1.1,minNeighbors=3) #ここで切り出し if len(face_list) > 0: for rect in face_list: image_cut = image1[rect[1]:rect[1]+rect[3],rect[0]:rect[0]+rect[2]] else: print("no face") #切り出した画像を保存 cv2.imwrite(out_jpg, image_cut) |
大筋で処理手順を書いてみると、
1, 画像を読み込み
2, グレースケールに変換(処理を軽くするため)
3, カスケード分類器にかける
4, 顔認識できた矩形を、カラー画像の方で切り取る
5, 切り取った画像を保存する
一般的には最後にMatplotlibなどを使って、画像を表示させることが多いのだが、AmazonのAWSなどを使っていると、遠隔で操作しているので、画像の表示作業が面倒になる。
そこで、画像を一旦保存して、その画像を手元のPCにダウンロードし、表示させる手順を想定している。
では、上記のコードを適当な名前で (testGazou.py) 保存して実行してみよう。
$ python testGazou.py
実行後、保存されたlenaCut001.jpgをダウンロードして、表示してみる。
どうでしょうか。見事に表示されましたか。
こういった画像を大量のデータにして、ディープラーニングを動かすわけですね。