むにえる牧場

毎日むにえるをつくっています

flask + OpenCVで笑い男合成機のようなものをつくった

概要

しばらく体調を崩していたので、リハビリがてらflask + OpenCVを利用して、動くものを作ってみました。

顔認識をして、顔と判別したものに笑い男(注:攻殻機動隊)のアイコンを合成するというものです。

flaskを利用するのははじめてでしたが、かなり簡単にできました。
(pythonもそんなに書いたことないですが、簡単なものを作るのにとても利便性を感じます。)

実行結果

f:id:jalemy:20190403222344g:plain
笑い男合成機の動作図

コード

アプリケーションコード

テンプレートコード

ディレクトリ構造はこんな感じになってます。

$ tree
.
├── LICENSE
├── README.md
├── app.py
├── smile.png
├── templates
│   └── index.html
└── uploads

感想

3,4か月ぶりくらいにブログ記事を書いたせいで、全然文章が思いつかなくて日本語の量が少ないです……

OpenCVのみでalpha透過pngを合成するのに詰まったため、Pillow(PIL)を利用しました。
(本来ならば、alphaチャンネルをもとにマスク画像を生成して、マスク画像で切り抜いた画像を重ねる という手順でできるはずなのですが、pythonに不慣れなせいで詰まりました。)
Pillowを利用すればかなり楽に合成ができたので導入すると良いと思います。

複数人顔が写っている画像でも動作します。
しかし、顔認識の精度に関わるcascadeファイルをOpenCV標準のものを利用したので、少々ムラがあります。

f:id:jalemy:20190403225143g:plain
三人の画像に動作させた図

次いで、AWS上で動かせるようにしてみたりしようかなと思う次第です。

参考

画像は、ぱくたその画像を利用させていただきました。

www.pakutaso.com