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

動画に写る人の顔にマスクを合成して、マスクを着けているように見えるPythonプログラムを紹介します。

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

動画はPexelsさんの動画を使わさせてもらいました。

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

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

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

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


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


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


目次

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

・マスクを合成する前の動画

・動画に写る人の顔にマスクを合成するPythonプログラム

・動画に写る人の顔にマスクを合成して、マスクを着けているように見える様子

・1月28日 修正

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

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

マスクを合成する前の動画

動画の読み込みと表示はこちら→Python OpenCVを使った動画の読み込みと表示の投稿で紹介したプログラムを使いました。



動画に写る人の顔にマスクを合成するPythonプログラム

上のプログラムはこちら→「人の顔にマスクを合成するPythonプログラムを紹介しますの投稿で紹介したプログラムとあまり変わらないので、追加または変更した箇所だけプログラムの説明をします。

41行目はcv2.VideoCaptureで動画を読み込んでいます。

44行目は読み込んだ動画を画像にしたときの総枚数を求めています。
そして、その総枚数を46行目のfor文で繰り返す回数にしています。

47行目はfor i in range(5):でコマ飛ばしで表示しています。コマ飛ばしをしないと処理が遅いので、スローに見えます。

for文を使ったコマ飛ばしについて投稿しているのがこちら→for文を使って動画をコマ飛ばしで表示、早送り風になります。

動画に写る人の顔にマスクを合成して、マスクを着けているように見える様子



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

上のプログラムは動画を読み込む最初の1フレーム(画像)に顔と目を検出できなかった場合、エラーがでてしまうので、
顔と目を検出できなかった場合を考慮したプログラムを下に載せておきます。

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

修正 動画に写る人の顔にマスクを合成して、マスクを着けているように見える様子