whywaitaフィルタ
この記事はwhywaita Advent Calendar 2016 - Adventar 21日目の記事です。
whyさんについて
whyさんは私が所属している電気通信大学のMMAの先輩です。 実は高校が一緒だったりとなにかと縁があったりなかったりします。 whyさんのイメージとしてはなんかインフラ強そうな印象があります。 初めて会った時の印象は覚えてないのですがMMAの部室で再履の実験のレポートを何人かの先輩と一緒になって書いていたことは覚えています。 あと純粋だった私は本名を橘和板だと信じていたので本名聞いた時はなんで偽名使ってるんだろう、過去に悪いことしたのかなと思ったことがあります。
whywaitaとは?
突然ですが哲学的な問いをここで提示します。 いったいインターネット上に存在するwhywaitaとは何なのでしょうか。 何をもって私たちはwhywaitaを認識しているのでしょうか。
"whywaita"という文字列がwhywaitaという存在を一意にしているという意見もあると思いますが昔使ってたIDをwhywaita_oldと仮定します。 whywaitaもwhywaita_oldもwhyさんであるということは一緒なのにIDが違うと全く別の存在になるのでしょうか。仮に他のsnsのサービスでwhywaitaというIDを取得することができずwhywaita_というIDであった場合も同じことが言えると思います。
ここで現実に置き換えて考えてみましょう。例えば私がwhyさんと道ですれ違います。その時私はIDでwhyさんという存在を判断していませんし小さい子供みたいに名札に書いてある文字列から判断しているわけではありません。私はwhyさんの顔からwhyさんであるという判断をします。
ここでインターネットに戻って考えてみましょう。現実の顔に相当するものつまりwhywaitaのあのアイコンでもって認識しているという結論が導かれますね。snsでも急にアイコンを変えられると「誰だこの人?」となったことが誰しも経験していると思います。
ここから私は全人類whywaita計画という計画を思いつきました。
whywaitaフィルタ
ffmpegのfilterとしてFrei0rを利用してwhywaitaフィルタというものを作ってみました。
こちらにdllを一応置いておきますがgithubにソースは上げたので信用できない場合はbuildしてみてください。
使い方
# buildしたfilter DLLのmat33.dllをC:\Program Files (x86)\frei0r\lib\frei0r-1\whywaita.dllに置いたとしましょう # FREI0R_PATH環境変数を設定 $ export FREI0R_PATH="C:\Program Files (x86)\frei0r\lib\frei0r-1" # powershellの場合は以下のようにする # Set-Item env:FREI0R_PATH -value "C:\Program Files (x86)\frei0r\lib\frei0r-1" # whyさんのアイコン画像を取ってきたものをC:\tmp\whywaita.pngとします export WHYWAITA_IMG="C:\tmp\whywaita.png" # OpenCVで顔認識に使われているカスケードファイルをC:\opencv\build\etc\haarcascades\haarcascade_frontalface_default.xmlにあるとします export CASCADE_FILE="C:\opencv\build\etc\haarcascades\haarcascade_frontalface_default.xml" $ ffmpeg -i INPUT.mp4 -vf "frei0r=whywaita" OUTPUT.mp4
カスケードファイルをアニメ顔を認識するものに変更すると2次元でも顔認識してくれます。
全人類whywaita計画
実際にwhywaitaフィルタをかけた画像、動画をご覧ください。
僕の同期のbenevolent0505もwhywaitaになりました。最初はかなりはしゃいで協力してくれたんですが顔をあまり動かすと顔として認識にてくれなくなるので結局かなりおとなしい動画になってしまいました。あと途中で飽きたと言ってテンション自体もかなり下がってしまいました。ちなみにフレームごとに検査したので顔ばれしているフレームは除去しました。
さいごに
今回はカスケード分類器という特徴量ベースの顔認識を行いましたが動画などを見てみるとわかると思いますが顔でないものを顔と認識したり精度の面でかなり難があります。最近は猫も杓子もDeepLearningしているみたいなのでDeepLearningを用いたwhywaitaフィルタを作れたらいいかなと少し思いました。