2021年3月12日金曜日

顔ランドマーク検出をやってみた。

 先日このブログで、FaceSwapのプログラムを作りました。

だけど、時間がなくて、顔の輪郭部分の点を手動で設定していました。

このため、任意の写真で顔を入れ替えようとすると、点を設定する作業がとてもめんどくさい。

おじさん、任意の写真の顔をもっと簡単に入れ変えたいのです。


そこで、今回はどんな顔でも入れ替えできるように、プログラムを改良してみたと思います。


どうやって顔の輪郭を抜き出すんだろ。

調べてみると、顔の輪郭部分の検出のことを「顔ランドマーク検出」というらしい。

https://qiita.com/RanWensheng/items/d8768395166d041a753a


shape_predictor_68_face_landmarks.datというdlibの学習済みデータを使うのが一般的なようです。

学習済みデータ100Mバイトもあるじゃないか!

しかもdlibというライブラリを使うのね。

こんなことばっかりやっているから、おじさんのハードディスクがどんどんなくなっていく。


こんなかんじでdlibを使うのね。

https://iatom.hatenablog.com/entry/2020/11/01/152334



こんなかんじでdlibとOpevCVでFaceSwapをすれば、動画をどんどん変換できるのか。

https://github.com/MishaPrigara/FaceSwap



というわけで顔ランドマーク検出対応のFaceSwapを作ってみました。

ソースはこちら

https://drive.google.com/file/d/1_F9lTnfBVbme5pmI9WrSfaayQr5sQut_/view?usp=sharing

その辺に落ちている写真で実験。

入れ替え後の写真

元の写真


できた!

これ確かに任意の写真で顔を入れ替えられるようになると面白いね。


0 件のコメント:

コメントを投稿