みんホル！ Watson でホルモン焼きの食べごろを判定しよう

#ホルモンはお好きですか？

忘年会シーズンも終わりを迎えつつある今日この頃、モツ鍋や焼き肉を堪能された方も多いのではないでしょうか？私はホルモンを好き好き大好き超愛してるわけで、隙あらば煮たり焼いたりして食べてしまおうと目を光らせています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25840/783f028d-f142-2572-82ac-d21a679f4e79.png)

しかしながらホルモン焼きの際、「いつまで焼けばいいのかわからない」「この色……食べられるのか食べられないのか？」「焼いてるうちにどうでもよくなる」「燃える」といった、美味しい食べごろな状態がわからないので、頼むのをためらってしまうという相談も多くいただきます。

ホルモン焼きの食べごろが手軽に判定できるようになれば、この素晴らしい食べ物がもっと世の中に広まるに違いない。そしてこの課題解決には、Watsonの画像認識、Visual Recognitionが使えるに違いない！

#Watson Visual Recognitionとは

IBM CloudのAIサービスの一つであるWatson Visual Recognition は、画像に映った物体、食べ物などを認識する機能です。
既に学習済みのモデルとして一般物体認識、食物認識、不適切な画像の認識が準備されています。
※残念ながら顔認識と文字認識（こちらはベータ機能でした）は、9月11日にサービス終了のリリースが出ており、使えなくなってしまいました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25840/b0fece72-a540-f9e8-4d79-f792eed20182.png)

カスタムモデルを作ることもできるので、今回はホルモン焼きのカスタムモデルを作ってみようと思います。

#カスタムモデルとは？

Watsonに独自の学習をさせて、画像の分類ができるようにすることです。
Visual Recognitionの特徴は少ない枚数で分類ができるようになることで、1クラス最低10枚の画像があればOKです。すごい。

カスタムモデルは、正例と負例のクラスから構成されます。
正例には狙いとしている対象の画像、負例には対象外の画像を与えます。
正例画像は、グループごとに複数のクラスで構成されます。
負例画像は、１つのグループで負例クラスとして構成されます。
少なくとも2つの正例のクラス または 正例・負例クラス１つずつのどちらかの指定が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25840/a4559d6b-e514-277f-f614-35073f48f07b.png)

この機能を使って、ホルモン焼きの食べごろを判定しちゃおうという作戦です。

#でもお高いんでしょ？

ちょっと待って。技術的にはできても、お値段はどうなの？
ホルモン焼きの食べごろ判定となると、リアルタイムで1秒間隔くらいで判定させないと実用的ではない。
となると……かなりお高くなるのでは？
たとえ1判定約0.2円でも、1秒間隔で1分判定させたら60×0.2=12円。
一皿に10個のマルチョウが乗っていたらそれだけでもう120円……。
ライトプランだと判定だけでミノ・ギアラ・シロコロ・コブクロ・マルチョウ2皿ずつ食べたらもうおしまいじゃないか。

※以下は2019年12月23日時点のVR料金。最新情報は[こちら](https://cloud.ibm.com/catalog/services/visual-recognition?_ga=2.134925430.664547056.1577032560-649173022.1552892495&cm_mc_uid=36795209607115745845067&cm_mc_sid_50200000=69739841577032559609&cm_mc_sid_52640000=54028521577032559636)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25840/80bc7262-d9e1-ab7c-0d86-c5a6312b1a36.png)


でも大丈夫。Visual RecognitionにはiPhone限定ですがローカルにダウンロードしてアプリに組込んで使うことができます。この場合、 **判定は無料！** ネットワークも介さないので判定が早い！すてき！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25840/dc703756-23a8-9f48-d210-ba17a79b8af4.png)


#ホルモン食べごろカスタムモデルを作ろう

カスタムモデルを作るには、この3ステップが必要です。
1.分類対象決定
2.学習データ収集
3.学習実施

##1.分類対象決定

まず、どのホルモンを分類対象にするか決定します。
今回はハラミやタンといった食べごろが比較的わかりやすいホルモンではなく、「シロコロ」「マルチョウ」「ギアラ」「ハチノス」「ミノ」「コブクロ」等を分類対象にしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25840/621e9d7f-6134-b7a6-70fd-0c5c38b52aed.png)

##2.学習データ収集

データならある！どれだけホルモン焼きを食べてきたと思っているのか。
それは食べた。たくさん食べた。すごく食べた。食べた時の画像も残っている！


とかね、学習データには事欠かないと思っていたんですよ。
だがしかし……焼く前の写真ばかりではないですか。焼けてない、全然焼けてない。
いつも焼き始めたら食べるのに夢中で、全然写真撮っていなかった……。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25840/0407c481-0bb0-5646-5f63-4a3fb9133564.png)

普段、データならあるとおっしゃるお客様に「目的に沿わないデータがたくさんあっても、良い結果は得られません」とか言っておきながら、自分もこの体たらくですよ。

深く深く反省しつつ、まずはデータを集めるところから始めることに注力です。
身を挺してせっせと「まさる」や「元気家」「横浜苑」でホルモンを焼いたものの、やはり一人で焼いて撮って食って、焼いて撮って食って、焼いて撮って……。
データがたまるころには間違いなく他のなにかもたまるよね……？

これはもう一人じゃ無理だ、みんなのデータをオラにくれ！

![kappa1223c.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25840/f7024877-8379-c4c8-5777-38f02347f9e2.gif)

と、こんな話を[Bluemix User Group 女子部（BMXUG）](https://bmxug.connpass.com/event/156545/)でしていたところ、まさかの展開になりました。
神様って、東京駅に、鉄鋼ビルにいたんですね。

#Boxさんがデータ収集の支援！

なんとあの[Box](https://www.box.com/ja-jp/home)さんが、ホルモン焼きのデータ収集をサポートしてくださることに。
すごすぎる。Boxさん、ふとっぱら！

協力してくださる優しい皆さまがBox上にデータをアップロードしてくださり、それを使ってVisual Recognitionの学習を行うことになりました。
この結果は2月のBMXUG女子部でまたお話ししたいと思います。