【what is this】MIT App Inventor のExtensionとして、Googleの顔認識(主要450点)学習モデルFacemeshが利用できるようになりました[1][2]。これにより、顔認識関係のスマホアプリがさらに作りやすくなりました。さっそく、簡単なアプリ3つを作ってみましょう。
■[Exercise-1] 顔の向きを考慮して、口の開閉でスイッチOn/Off
これは、前のブログ記事で取り上げた例題です。その際は、PythonからFacemeshに関するAPIを利用して作りました。今回は、これと同じことを、MIT App Inventor のExtensionを利用して行います。
解答例は、Fig.1 のようなApp Inventorプログラムです。これがソースプログラムの全てですから、「こんなに簡単に!?」と思う人も多いでしょう。プログラムは読みやすく、そのロジックも明解そのものです。
図にはコメントがありますので、説明は特に必要ないと思います。口の開閉を上下の唇中央点のy座標の差分で、顔の向きを鼻筋2点のx座標の差分で検出していることにご注目下さい。それらが、ブロック(when...FaceUpdated)に纏められ、顔や口が動いた場合にリアルタイムに起動される仕組みです。
■[Exercise-2] - 顔の動きで、"はい", "いいえ", "どっちかな"を識別
上の[Ecercise-1]では、顔の現時点の特定の「状態」を検出しました。一方、顔の「連続した動き」を得たい場合もあります。例えば、「うなずく」「顔を横に振る」「顔を傾ける」などです。これらを検出するには、顔の揺れた方向(上下、左右、斜め)、および、その振幅を得る必要があるでしょう。このような処理も、同様にApp Inventor(Facemesh extension付き)の世界でできます。その実現例を下図に示します。以下の3つの振幅を正規化して、そのうち、最も大きい値を与えた動作を検出します。
■[Exercise-3] - 発話時の口形面積の変化を可視化して楽しむ
MIT App Inventorの強みのひとつは、GUIとの連携の容易さです。Fig.4 に示すこの練習問題も、それを生かしたアプリの作成です。Facemeshでは、顔の主要450点を検出できるのですが、ここでは、口(くち)回りの4点だけ使います。The simpler the better. この菱形の口の面積の推移(青い線)とその変化率(赤い線)をグラフにします。口の動きとその波形を見て楽しむ練習問題です。遊びが何らかのヒントを与えることもあり得る。
このような口(くち)パクから、例えば、"イノシシ" / "トラ"、あるいは"apple" / "orange"をきちんと区別する課題に取り組む場合には、さらに面積変化の加速度の波形が必要かもしれない。そのような波形(またはその周波数解析結果)を、発話種類ごとに数百件用意して、それらを学習させることになるでしょう。
なお、身体の動きの加速度の周波数解析に関しては、参考文献[3]に丁寧な解説があり有用です。また、口の動きを入力とする機械読唇に関しては、参考文献[4]に基本事項と手法が詳しく叙述されています。
■感想
今回のMIT App Inventor Extension for Facemeshによって、顔認識関係スマホアプリの開発がかなり容易になります。[Exercise-2]では、App InventorのBallコンポーネントを使っており、タッチ、ドラッグなどによるインタラクションも可能です。他にも、Facemeshと連携できる場面がありそうです。MIT App inventor leads us to a new frontier in smartphone programming.
References
[1] Artificial Intelligence with MIT App Inventor, http://appinventor.mit.edu/explore/ai-with-mit-app-inventor
[2] Facemesh Filter Camera, http://appinventor.mit.edu/explore/resources/ai/facemesh
[3] 田中博、五百蔵重典:IoT時代のデータ処理の基本と実践、コロナ社刊、2018年3月(特に、第5章フーリエ解析)
[4] 宮崎 剛、中島豊四郎:[推薦論文]日本語の発話映像における初口形の検出方法提案、情報処理学会論文誌、Vol.53、No.3、pp.1472-1479、2012.