人の顔にマスクを着けるPythonプログラムを紹介します

人の顔にマスクを合成して、マスクを着けているように見えるPythonプログラムの紹介とその説明。そして、顔とマスクを合成した画像を投稿します。

人の顔が写っている画像はぱくたそさんの画像を使いました。

黒色背景のマスクは私がスマホで撮った写真になります。



この投稿以外に画像合成プログラムを紹介している投稿がこちら↓になります。

画像合成を交えて色を数値で確認する方法 Python

Pythonを使った画像合成をColaboratoryで実行


画像合成で使う緑色背景の色を変更 Python


画像合成で使う画像の色を数値で確認する方法


目次

・画像合成で使った顔が写っている画像

・画像合成で使ったマスクの画像

・顔にマスクを合成するPythonプログラム

・Pythonプログラムを使って顔にマスクを合成した画像

・1月28日 修正


画像合成で使った顔が写っている画像

画像合成で使ったマスクの画像

このマスク画像について
顔が大きい、小さいでマスク画像のサイズを変えて合成していたら、汎用性がないと思ったので、顔が大きい、小さい関係なしにちょうどいいくらいのサイズにしています。

顔にマスクを合成するPythonプログラム

プログラムの説明をします。

24行目のif len(eye) != 0は顔検出してから、目の検出ができたかどうかの判定をしています。
検出した顔が複数あった場合、そこから、目を検出できた箇所を本物の顔とすることで、顔以外のところを顔と検出されたときの対応をしています。

31行目はimg[y+h//2:y+h,x:x+w]で読み込んだ人画像から検出した顔の下半分を切り取って変数halfに代入しています。20行目のimg[y:y+h,x:x+w]は検出した顔をそのまま切り取っています。

32~35行目の変数d1~d4は57行目の顔下半分にマスクを合成した画像を埋め込む際に使う変数です。

43行目はcv2.resizeマスクの大きさを顔下半分の大きさに合わせています。

48行目の0~160の値はペイントで黒色背景の色を数値で確認したときの値になります。
ペイントで画像の色を数値で確認する方法はこちら↓で紹介しています。
画像合成で使う画像の色を数値で確認する方法
画像合成を交えて色を数値で確認する方法 Python

50行目は黒色背景以外のマスクの部分だけを顔下半分に合成しています。



以下がmatplotlibplt.imshow()で表示している様子になります。

① 読み込んだ人画像を表示

② 読み込んだマスク画像を表示

③ 顔検出した部分を切り取って表示

④ 顔下半を表示

⑤ 顔下半分にマスクを合成して表示

⑥ ④の画像データを①の画像データに埋め込んで表示

Pythonプログラムを使って顔にマスクを合成した画像



動画に写る顔にマスクを合成している様子はこちら↓になります。

Pythonプログラムで動画に写る人の顔にマスクを着ける方法



1月28日 修正 顔にマスクを合成するPythonプログラム

上のプログラムは顔と目を検出できなかった場合、エラーがでてしまうので、
顔と目を検出できなかった場合を考慮したプログラムを下に載せておきます。

顔と目を検出できなかった場合は引数に渡した画像をそのままreturnで呼び出し元に返すようにしているので、マスクを合成していない画像が表示されます。