18
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IBM Watsonはカレーライスとハヤシライスを見分けられるのか? (書きかけ)

Last updated at Posted at 2016-09-21

カレーライスとハヤシライス

子供の頃、夕ご飯はカレーと思って一口食べたら実はハヤシライスで大ショック、という経験は誰にでもあるはずだ。今をときめくWatsonで、世界の子ども達の悲しみを止めることができるか確認してみる。

Watson画像認識API(Visual Recognition)

IBM Bluemix上には様々なWatsonのAPIがあり、その中には無料で利用できる画像認識のためのAPIがある。ただし、自分の望む分類を可能にするためにはWatsonに学習させる必要がある。

カスタム分類器の作成

アップデートによりAPIは変わっていくのだが、利用のための基本的な流れはここのチュートリアルを読むとわかりやすい。ちなみに、現時点での最新APIの情報はここを参照。

実行まではわずか3ステップ!
 1.Bluemixでサービスを追加
 2.分類させたい画像をzipにして学習
 3.判別したい画像を確認
正直、画像を集めるのが一番大変だと思う。

ステップ1:Bluemixでサービス追加

そのうち書く:API_KEYを取得

ステップ2:画像をzipにして学習

分類機を作成するためには、判別したいモノの画像と、そうでないモノの画像をzipで固めてWatsonに送信する必要がある。今回はGoogle様にお願いして、カレーの画像を60枚、ハヤシライスを30枚、勢い余ってビーフシチューを30枚ほど用意した。なお、どれにも分類されないnegativeな例も必要なので、適当にカツ丼の画像を利用した。
実行方法と結果は以下の通り。

> curl -X POST 
   -F "curry_positive_examples=@curry.zip" 
   -F "hayashi_positive_examples=@hayashi.zip" 
   -F "beefstew_positive_examples=@beefstew.zip" 
   -F "negative_examples=@katsu.zip" 
   -F "name=food”   
   "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classifiers?api_key=e975c36e9f57b22bf8abb80b8a07c8946934ec62&version=2016-05-20"

{
    "classifier_id": "food_887927262",
    "name": "food",
    "owner": "1e47904a-82ad-4605-a939-b55280bf0438",
    "status": "training",
    "created": "2016-09-21T15:48:39.549Z",
    "classes": [
        {"class": "hayashi"},
        {"class": "curry"},
        {"class": "beefstew"}
    ]
}

オプション ”-F 名前_positive_examples” により、分類する種類を指定している。
今回のように複数の positive_examples (カレー、ハヤシライス、ビーフシチュー) を並べることも可能で、判別時にはそれぞれに確からしさを出力する。

学習の進行状況確認は以下のRESTを実行。

> curl -X GET "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classifiers/food_887927262?api_key=e975c36e9f57b22bf8abb80b8a07c8946934ec62&version=2016-05-20"

{
    "classifier_id": "food_887927262",
    "name": "food",
    "owner": "1e47904a-82ad-4605-a939-b55280bf0438",
    "status": "ready",
    "created": "2016-09-21T15:48:39.549Z",
    "classes": [
        {"class": "hayashi"},
        {"class": "curry"},
        {"class": "beefstew"}
    ]
}

status が ready となると実際に判別を実行できる状態であり、この分類機で検出できるのは class にある hayashi、curry、beefstew であることがわかる。
今回の場合、学習は数十秒で終了した。画像ファイルの数が多い場合には、もっと時間がかかるのかもしれない。
なお、結果の classifier_id が分類機の名前であり、以後の問い合わせにはこれを利用する。

ステップ3:判別したい画像で確認

自分で作成した分類器を使った分類の実行や、実行時のしきい値の指定はjsonファイルを作る必要がある。例えば、自分の作成した分類器を使って、結果表示のしきい値を 0.2 にするには以下のようなjsonファイルを作成する。

> cat params.json

{"classifier_ids": ["food_887927262"],"threshold": 0.2 }

このjson(条件ファイル)を使って実行した結果は以下の通り。
この画像の場合、カレーである確率を表すscoreは 0.73471 であり、ハヤシライスやビーフシチューのscoreは 0.2 を下回っているため出力されていないことがわかる。

> curl -X POST
   -F "images_file=@分類したい画像.jpg" 
   -F "parameters=@params.json" 
   'https://watson-api-explorer.mybluemix.net/visual-recognition/api/v3/classify?api_key=e975c36e9f57b22bf8abb80b8a07c8946934ec62&version=2016-05-20'

{
    "custom_classes": 3,
    "images": [
        {
            "classifiers": [
                {
                    "classes": [
                        {
                            "class": "curry",
                            "score": 0.73471
                        }
                    ],
                    "classifier_id": "food_887927262",
                    "name": "food"
                }
            ],
            "image": "curry1.jpg"
        }
    ],
    "images_processed": 1
}

確認に使った画像ファイルと結果は以下の通り。

画像 正解 Watsonの結果
curry1 カレー カレー=0.73  
curry3 カレー カレー=0.43、ハヤシ=0.49
hayashi1 ハヤシライス ビーフシチュー=0.52、ハヤシ=0.54
hayashi3 ハヤシライス ハヤシ=0.91
beef1 ビーフシチュー ビーフシチュー=0.91
beef2 ビーフシチュー ビーフシチュー=0.53
curryN カレーうどん すべて反応せず

まとめ

少数の画像ファイルで作った分類機にもかかわらず、意外にもなかなか検討しているように感じる。
。。。でもまぁ、お母さんに「晩御飯はなに?」と聞くのが一番近道だよ、ということで今回はおわり。

18
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?