web会議中などにアイリスアウトの演出で退場できるようにしたかった。
表示されるウィンドウをアクティブにした状態で、'k'キーを押すことで状態が遷移。
「通常webカムモード」→「顔の中心まで黒背景が来る」→「完全に黒背景に飲まれる」→ 以下ループ
short.mp4
※ プライバシー保護のために、顔面をイラストでマスクしています。
※ 顔面素材は付属しません、自分で描いてください。
ライブラリとか
- Python 3.10.11
- numpy 1.23.1
- opencv-python 4.7.0.72 (多分)
- insightface 0.7.3
顔認識モジュールであるinsightfaceのインストールがなんか順番とか依存関係とかあって、めんどくさかった。
インストール後になんかエラー出たら、OpenCVを入れなおしたらイケた。
PCすぺっこ
- windows 11 home
- AMD Ryzen 5 5600X
- DRAM 3600Hz 32GB
pythonファイルは一つなのでそれを実行してください。
webカメラとして使う場合はOBSでキャプチャして、OBS仮想カメラで出力してください。
default.mp4
3つのウィンドウで、各処理を紹介する。 まず、左右のウィンドウで顔部分に変なイラストがくっついてるのはプライバシー保護兼イケメンが流出するのを防いでいるだけで、本筋の機能ではない。
- 左のウィンドウのように、顔検出で顔の大きさと座標を取得している
- ここでは、顔の大きさくらいに緑色の円を描画している
- アイリスアウトで迫って来る黒背景をマスクで表現
- 表示では白(255)と黒(0)だが、内情は1と0
- マスクは顔の座標と大きさをベースに大きさを変化させる
- カメラ画像とマスクを乗算することで、1の部分のみが残る
- 円形部分のみ元映像で、周囲は0(黒)になる