序章
ある時、5歳の息子がこう言った。
「ジャンケンでお友達がこんな手をしてくるので勝てない」
息子の手は、少し手の開き気味のグーの形をしていた。
なんでも、これはグーの特性とパーの特性を合せ持つ技なのだと言う。
内心、「パーを出せば負けないよ」と思いつつも息子の言葉を思い出す。
「勝てない」
そう!息子はお友達に勝ちたいのだ!
社会に出て家庭を持ち、すっかり丸くなった己が恥ずかしい・・・
ここは父としてなんとか息子を勝てるようにしてあげたい。
しかし、どうやって?
私は思い出す。
子供の頃、私の地域(福岡)では**「グーチョキパー」と言う全ての特性を持った最強の技**があったことを。
その技を息子に伝授すれば良いのではないか。
しかし、今や私はエンジニア。
エンジニアとしてはエビデンス無しには最強とは語れない。
本当に最強であることを科学的に確認する必要がある。
最強の技を求めて
私は、強化学習のモデルを搭載したiPhoneアプリを開発し、手の映像をカメラで取りながらリアルタイムで類似度を表示することにした。
「技術的には可能です」
AIアプリの開発について相談された場合、5年前の私ならきっとそう答えていただろう。
しかし今の時代はとてもお手軽になった。
AzureのCustom Visionにジャンケンの各技の写真をアップロードし、トレーニングを実施、 CoreMLのファイルをダウンロード。
iPhoneアプリ内に埋め込み、CoreMLのAPIを呼び出すだけで簡単にリアルタイム画像処理ができるのだ。
アプリはXamarinで開発。
開発にあたっては以下の記事を参考に。
Xamarin.Forms で AI をアプリに組み込んでみよう(UWP, Android, iOS)
https://blog.okazuki.jp/entry/2018/12/18/164052
Xamarin.Formsでリアルタイム処理が可能なカメラプレビューのCustomRendererのサンプル
https://qiita.com/muak_x/items/c441e1e795ba22d597d6
サクッとアプリは完成。
早速、まずは認識率を確認してみる。
判定は rock(グー)、scissors(チョキ)、paper(パー)と old scissors(私の地元で田舎チョキ)の4種類の判定をするようにしている。
結果は・・・うむ、認識に問題はないようだ。
では次に息子が見せた「グーパー」の形をしてみる。
・・・なるほど。
あえて言おう、これはグーであると!
では最後に究極技の「グーチョキパー」を出してみる。
こ、これは・・・田舎チョキではないかっ!
なんてことだ・・・最強と思っていた技はただのチョキだった・・・
いろんな手の形に変えてみるが、どれも良い評価にはならず、最強の技がわからない。
「チョキパー」や「グーチョキ」とは言えなくもない判定は出たが、「グーチョキパー」には辿り着かず・・・
終章
「グーパー」を出してくるお友達にじゃんけんで勝てないという息子の悩みから始まったこの活動だが、結局、良い手段は見つからず父の威厳を示すことはできないままこの活動は終えることとなった。
そもそも、「グーチョキパー」などというゲーム性を著しく破壊する手段は使うべきではない。
私は息子にこう言う。
「先生に言いなさい」
まとめ
Xamarin + AzureのCustom Vision で CoreML を使った機械学習を試してみました。
試してみると驚くほど簡単にでき、また端末内に学習モデルを入れているのでスタンドアローンで動作しますのでサーバーも不要です。
機械学習に詳しい同僚にこの記事を見せると「チョキと田舎チョキのラベルはわけない方が良いかも」というコメントをもらいました。
なぜそう思うのか、初心者には全くわからないですよね。
つまり、いわゆるAIというものは万能なものではなく、どういったアプローチが必要で、何ができるのかを判断するには正しい知識が必要ということなのだと思います。
とは言え、これだけ手軽に動かせるのであれば、まずは触れて興味を持ってみるのも良いのではないでしょうか。
今回のソースはGitHubにあげてます → https://github.com/uemegu/CustomViewSample