【画像解析 API を使ってみる】食べ物の画像は解析できるのか?

概要

最近、食べ物の写真を撮って SNS にシェアする人が増えています。

自分も SNS に食べ物の写真をアップロードした経験があります。

ラーメン屋に行くと、サラリーマンのおっちゃんまで写真を撮っている時代です。( ˙灬˙ ) 

そんな時代背景もあってか、友達にもっと食べ物を美味しそうに見えるフィルターや、食べ物専用のスタンプが充実したアプリを作りたいと相談されたことがあります。

当時、作りたかったアプリはこれに近いのかなと思います。

linecorp.com

最終的にアプリをリリースするまでに至らなかったのですが、開発中に食べ物の画像を解析したいと思った部分があり、画像解析 API を使ってみたので、その時のことをまとめました。

画像解析 API

当時、使ってみた画像解析 API は以下の 3 つです。

  1. Google Cloud Vision API
  2. IBM Visual Recognition API
  3. Microsoft Computer Vision API

それぞれの API で出来ることを示しておきます。(サイトから引用しました)

Google Cloud Vision API

cloud.google.com

  • ラベル検出
    乗り物や動物など、画像に写っているさまざまなカテゴリの物体を検出できます。
  • 不適切なコンテンツの検出
    アダルト コンテンツや暴力的コンテンツなど、画像に含まれる不適切なコンテンツを検出できます。
  • ロゴ検出
    画像に含まれる一般的な商品ロゴを検出できます。
  • ランドマーク検出
    画像に含まれる一般的な自然のランドマークや人工建造物を検出できます。
  • 光学式文字認識(OCR)
    画像内のテキストを検出、抽出できます。幅広い言語がサポートされており、言語の種類も自動で判別されます。
  • 顔検出
    画像に含まれる複数の人物の顔を検出できます。感情や帽子の着用といった主要な顔の属性についても識別されます。 ただし、個人を特定する顔認識には対応していません。
  • 画像属性
    画像のドミナント カラーや切り抜きのヒントなど、画像の一般的な属性を検出できます。
  • ウェブ検出
    類似の画像をインターネットで検索できます。

IBM Visual Recognition API

www.ibm.com

  • 大量の画像・映像コンテンツに対して、自動的にタグ付けや分類を行う
  • 食事や食品に関する画像を検出し、写っている料理や食べ物を分析する (食べ物に特化した機能あり)
  • 画像に写っている人物の顔を検出し、年齢層・性別や名前をタグ付けする
  • 画像認識により書類やエビデンスを仕分けする
  • 製造ラインにおける画像検査により不良品を検出する
  • ドローンが撮影した画像を使って、家屋や鉄塔の破損箇所を検出する
  • 人工衛星が撮影した画像から、知見を得るための分析・分類を行う
  • 自社サイトに顧客がアップロードした画像から、不適切な画像を検出する
  • SNS等の画像から自社製品を探し出し、コメントをマーケティングに使用する

Microsoft Computer Vision API

azure.microsoft.com

  • 画像内のテキストの読み取り
    光学式文字認識 (OCR) により画像内のテキストを検出し、認識した語句をマシンに抽出して、判読可能な文字ストリームに変換します。画像を分析して埋め込みテキストを検出し、文字ストリームを生成し、検索を有効にします。テキストをコピーする代わりに写真を撮ることで、時間と労力を節約します。

  • 著名人およびランドマークの認識
    ドメイン固有モデルの例として、著名人モデルおよびランドマーク モデルがあります。著名人認識モデルでは、ビジネス、政治、スポーツ、エンターテイメント分野での 200,000 人の著名人を認識できます。ランドマーク認識モデルでは、世界中の 9000 種類の自然物や人工物のランドマークを認識できます。ドメイン固有モデルは Computer Vision API で継続的に進化を遂げている機能です。

  • ほぼリアルタイムでビデオを分析
    ほぼリアルタイムでビデオを分析。ご使用のデバイスでビデオのフレームを抽出し、それらのフレームをお好きな API 呼び出しに送信することで、任意の Computer Vision API をビデオ ファイルに使用できます。ビデオの結果はすぐに返ってきます。

  • サムネイルの生成
    あらゆる入力画像に基づいて、高品質でストレージ効率の高いサムネイルを生成します。サムネイル生成機能を使用して、サイズ、形、スタイルのニーズに最も適したものに画像を変更できます。スマート トリミングを適用すれば、元の画像とは異なる縦横比であるものの、関心領域を維持したサムネイルを生成できます。

API の実行結果

それぞれプロモページでデモが試せるので、『ハンバーグ』の写真を読み込ませて実行結果を確認します。

 Google Cloud Vision API

f:id:kyamanak83:20171104144530p:plain 

IBM Visual Recognition API

f:id:kyamanak83:20171104144601p:plain

Microsoft Computer Vision API

f:id:kyamanak83:20171104145337p:plain

3 つの API 共に食べ物であることは問題なく認識してくれます。

API によっては、実行結果に『Salisbury steak』とあるのでハンバーグであることも認識してくれます。

更に『Garnish』とあるので、ハンバーグがメインで、ポテトやサラダがつけ合わせというところまで認識してくれる API もありました!

当時、ハンバーグの画像を API に読み込ませた時は『カレー』って認識されていたのですが、今回は『カレー』の項目がなくなっていたので、認識精度は日々上がっているんだなと感じました。

食べ物の画像解析だけで言えば、Google と IBM の API が良さそうだと感じました。

まとめ

食べ物の画像を解析することは出来ました!

写真に食べ物が写っているかどうかの判定は高確率で成功すると思います。

写真に写っている食べ物を正確に判定できる確率は 60 % ぐらいかなと感じました。

ただし、認識精度は日々上がっているので、今後もっと良くなることが期待出来ます。

ラーメン・餃子セットのように複数のメニューが並んでいる場合にも対応してくれます。

なので、概要で話したアプリを作る場合、食べ物が写真に写っている場合、特別なフィルターを適用する仕組みなどは実装できそうです。

ただし、暖かい食べ物が写っていたら赤系のフィルターを、冷たい食べ物が写っていたら青系のフィルターを出し分けて適用する仕組みなどはちょっと難しいかなと感じました。

また、写真の何処に食べ物が写っているのかの位置情報は取れないので、食べ物を中心に(焦点を当てて)フィルターを適用する仕組みなども難しいと感じました。

まぁ、ここら辺はユーザーが自分自身で選択するアプリにすれば良いのですが。

最後に

アプリを開発中に有識者に相談したところ、本格的に画像解析をやりたいのであれば OpenCV を使えと言われました。

opencv.jp

ただし、画像解析の精度を上げるにはたくさんのサンプル画像を集める必要があると言われました。

ハンバーグのサンプル画像が 100 枚と 1000 枚では、1000 枚の画像を機会に認識(学習)させた方が解析する時の精度は上がるそうです。

これは個人では時間と労力がかかり過ぎてキツそうなのでやめました。