今回は、顔認識した後の画像をモザイク処理してみました。
以前やってみた顔認識で使ったカスケードファイルを使っています。カスケードファイルは、顔の特徴をデータ化したファイルのことです。
カスケードファイルを使えば、鼻や目、輪郭などの特徴をもとに顔を認識することができます。
今回処理する画像は以下のものを使います。
きれいな画像の方が気分が乗るかと思いこの画像を選びました。
■顔認識する
モザイク処理をする前に顔認識の簡単な説明をしておきます。
1.カスケードファイルを読み込む
1 |
cascade_file= "haarcascade_frontalface_alt.xml" |
2.画像をカスケードファイルを用いた分類器にかける
1 2 3 4 |
clas = cv2.CascadeClassifier(cascade_file) img = cv2.imread("woman.jpg") img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face_list = clas.detectMultiScale(img_gray, minSize=(150,150)) |
3.認識した顔座標を取得し表示する
1 2 3 4 5 6 7 |
print(face_list) x=face_list[0][0] y=face_list[0][1] w=face_list[0][2] h=face_list[0][3] red=(0,0,255) cv2.rectangle(img, (x,y), (x+w, y+h), red, thickness=20) |
face_listの中身は(x,y,w,h)のようになっています。
最後のrectangleメソッドで認識した顔を四角で囲みます。
以下の画像のように認識されます。
■モザイク処理をする
モザイク処理の仕組みは簡単です。
モザイク処理を掛けたい部分を一度縮小して、再度元の大きさに戻すことでモザイクになります。
コードは以下のようになります。
1 2 3 4 5 |
#モザイク処理 face= img[y:y+h, x:x+w] reduc = cv2.resize(face, (8,8)) mosaic = cv2.resize(reduc,(w,h)) img[y:y+h, x:x+w]=mosaic |
face・・・顔の範囲
reduc・・・faceを(8,8)サイズにリサイズ
mosaic・・・縮小したreducを(w,h)サイズ(元のサイズ)にリサイズ
最後の行で、画像の顔範囲にモザイク処理した部分を割り当てています。
モザイク処理後が以下のようになります。
■モザイク処理コード
今回使ったコードを全部載せておきます。
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 |
import matplotlib.pyplot as plt import cv2 cascade_file= "haarcascade_frontalface_alt.xml" clas = cv2.CascadeClassifier(cascade_file) img = cv2.imread("woman.jpg") img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face_list = clas.detectMultiScale(img_gray, minSize=(150,150)) print(face_list) x=face_list[0][0] y=face_list[0][1] w=face_list[0][2] h=face_list[0][3] print("顔の座標(x,y,w,h):", x, y, w, h) red=(0,0,255) cv2.rectangle(img, (x,y), (x+w, y+h), red, thickness=20) #モザイク処理 face= img[y:y+h, x:x+w] reduc = cv2.resize(face, (8,8)) mosaic = cv2.resize(reduc,(w,h)) img[y:y+h, x:x+w]=mosaic cv2.imwrite("face-mosaic.jpg", img) plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show() |
matplotlibライブラリを使って画像表示をしています。
■まとめ
今回はモザイク処理をするだけでしたが、モザイク処理をした画像を機械学習して、元の顔を予測することもできるみたいです。
今回したように顔認識したデータを教師データとして使えばできそうですね。
なお、モザイク処理をする際のresizeメソッドを使う際に参考にしたサイトのリンクを張っておきます。
OpenCVについてより詳しく知りたい方は確認してみてください。
僕が参考にしている書籍です。これを読んで顔認識を勉強しました。わかりやすいので、興味のある方はぜひ。
すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方
最後まで読んでいただきありがとうございました。