のんびりプログラミング生活

画像処理、CG、プログラミングなどの話題を中心にのんびり記事を書きます。不定期更新。

私が実際にPython+OpenCVで顔認識を試したときに参照したページまとめ

PythonOpenCVを使って顔認識を試したくなったので、実装する際に参照したページをまとめた。私のような素人でもできる(環境設定で詰まらなければ)。

 

動作確認したPythonのバージョン

Python 3.5.2 |Anaconda 4.2.0 (64-bit)

 

目次

 

顔を認識できるようにしたい

いきなり本題。

顔を認識するためにはまず識別データが必要になるわけだが、なんとOpenCVに標準搭載。つまりそのファイルを指定の場所に入れればそれでOKなのだ。おお、簡単。

以下のページ通りにとりあえず書くと動く。

肝心の処理部分は人によって書き方がかなり違う(調べた中では)のでお好みで。

Python で顔認識してみる - Qiita

 

とりあえずがっきー。

f:id:regurusu7777:20170607004032p:plain

可愛さ満点!

 

認識したときには赤い四角で囲まれるようにしている。もちろん色の変更は容易。

 

アニメ顔も検知してみたい

意外とサクッと検知できてしまったので、この流れのままアニメ顔も試そうとしたら何も反応しなかった。どうやらアニメ顔と実際の顔は、同じデータで識別できないらしい。そりゃそうか。

OpenCVによるアニメ顔検出ならlbpcascade_animeface.xml - デー

 

上記の識別データを前の識別データと取り換えるだけで当然アニメ顔が検知できるようになる。

f:id:regurusu7777:20170607005922p:plain

がっきーと同様に赤い四角で囲まれている。

別の画像はどうだろう。

f:id:regurusu7777:20170607005947p:plain

Re:ゼロの名シーンは認識できなかった。

これはレムが悪いとか、可愛すぎて認識できなかったとかではなく(少なくともスバルも認識できてないのでそれはない)、正面を向いていないことが原因と思われる。同様の人物(ここでいうレムとスバル)が映った正面画像はうまく検知できた。

正面でなければならない原因はわからないが(顔の形や色など様々な要素があるだろう)、一応認識できるということで納得しよう。

 

コラ画像を作りたい

せっかく顔を認識できるようになったのだから、何かしたい。そうだ、検知した場所に別の画像を張り付けるようにしよう!

Python + OpenCV で雑コラ動画を作成する② 静止画コラ作成 - Qiita

python+Opencvによる画像処理5(リサイズ) - tataboxの備忘録

笑い男パーツ: マイペースなブログ

 

画像のサイズを変更したい

まずは貼り付けたい画像のサイズを変更する。でないと、認識した場所に張り付けたとしても大きさがおかしいことになるではないか。

 

これが

f:id:regurusu7777:20170610092748p:plain

こうなる。

f:id:regurusu7777:20170610093513p:plain

 

ちなみに縦横サイズがものすごく違う画像をリサイズすると、細長いor太った画像が出来上がる。これはおそらくサイズの違う画像を無理やり同じサイズにしようとしているからであろう。

 

画像を上書きしたい

リサイズが成功したので、認識した顔の場所に画像を上書きしていこう。私のプログラムでは認識のみする(赤い四角で囲む)モードと、コラ画像を作成するモードが選択できるようにした。

 

実行Log

3次元 or 2次元 / 3 or 2 :2
モード選択...(1)顔認識 / (2)コラ画像
1 or 2 : 2

Process finished with exit code 0

 

f:id:regurusu7777:20170610103655p:plain

またしてもRe:ゼロから。目が見えている気がしないでもないが、成功したと言っていいだろう。レムの顔が笑い男に変身した。

 

もちろん、先ほどのがっきーも3次元モードを選択すればコラ画像にできてしまう。

 

実行Log

3次元 or 2次元 / 3 or 2 :3
モード選択...(1)顔認識 / (2)コラ画像
1 or 2 : 2

Process finished with exit code 0

 

f:id:regurusu7777:20170610104041p:plain

 

うーん…可愛さ2点!

 

さいごに

動画を読み込んでコラ動画も作ってみたかったのだが、エンコードやらまた色々必要な知識が増えそうなので今回は断念した。今度チャレンジしてみたい。

今すぐやりたいんだって人はこちらが参考になるかもしれない。

動画を扱う — OpenCV-Python Tutorials 1 documentation

Python + OpenCV で雑コラ動画を作成する④ 課題への対処 - Qiita

 Nobutobook: 【Python × OpenCV】 動画で歩行者検知

 

今回はプログラムを掲載しなかった。しかし参考になるページを多く紹介したので問題ないだろう。Python+OpenCVは本当に楽しいので、ぜひ自分で試してみて欲しい。