Azure Cognitive Services Computer Vision API と Bluemix Watson Visual Recognition API を見てみよう

どもです。まーやです。

今日は最近話題のAzure Cognitive Services と Blumix Watsonについてちょっぴり調べた内容＆使って見た雑感などを並べて記載して見たいと思います。

# Agenda
- Azure Cognitive Services と Bluemix Watson
- Azure Cognitive Services Computer Vision APIとは
- Bluemix Watson Visual Recognition API とは
- 似ているところ・違うところ・その他雑感
- まとめ

# Azure Cognitive Services と Bluemix Watson
[Azure Cognitive Services](https://azure.microsoft.com/ja-jp/services/cognitive-services/) と [Bluemix Watson](https://www.ibm.com/smarterplanet/jp/ja/ibmwatson/?lnk=hmmpr_buwa_jpja&lnk2=learn#api)はどちらも「システムにxxを認知させる・認識させる」もしくは「認識させた結果、何か別の形にしてくれる」ことを目的としたPaaS APIサービスです。「xxを認知させる」と書いたのは、認知・認識させる対象が様々存在するためです。
例えば以下のようなイメージです。

- 画像を認識させ、その画像に写っている人の表情を認識させる
- 音声を認識させ、翻訳してもらう
- 文字列を認識させ、音声化してもらう

AzureやBluemixの他にも、[GCP(Googe CloudPlatform)](https://cloud.google.com/products/)や[AWS(Amazon Web Servicies)](https://aws.amazon.com/jp/amazon-ai/?nc2=h_l3_ai)にも認識系・機械学習系のサービスがあります。クラウド界隈で最近チカラが入っている分野と言えるでしょう。

AzureもBluemixも20を超えるAPIが用意されているため、全てを網羅して書くのは難しいので、今回は画像認識系APIのComputer Vision API(Azure)と Visual Recognition API(Bluemix)を並べて見ていきたいと思います。

# Azure Cognitive Services Computer Vision APIとは
### 概要
[Computer Vision API](https://azure.microsoft.com/ja-jp/services/cognitive-services/computer-vision/)は画像を渡すと写っているものを解析し、以下情報を返却・作成してくれるサービスです。

- 写っているもの判別
- その写真に合わせたキャプション
- その写真に合わせたタグ
- アダルト判定
- 人判定
    - 年齢
    - 性別
    - 顔の位置
    - (有名人の場合)バイネームで判定される
- 写真の色味分析
    - モノクロ写真判定
    - アクセントカラー・ベースカラーの抽出
- 写真のサムネイル作成
- 文字認識

その他機能要件は以下の通り。

- 利用可能画像フォーマット： JPEG, PNG, GIF, BMP
- 画像最大サイズ： 4MB
- 画像最小サイズ： 50px × 50px

アダルト判定機能は、その名の通り、画像がアダルト画像なのかを判定してくれる指標です。アダルト写真判定が必要なシステムは結構存在すると思っているので、うまく使えば大変有用な指標です。

キャプション機能もいじっているとなかなか面白かったですね。「a man standing in front of a television」みたいな感じでちゃんと文章になって出てくるので、confidence（信頼度)が高い場合はそのまま使っても差支えなさそうです。ただ、残念なのは、このキャプションは英語でしか出てきません。。。求む、日本語対応。ちなみに文字認識も日本語は認識できない様子。

また、写真のサムネイル作成機能は地味に嬉しい機能なんじゃないかな、と思っています。画像分析の技術で画像のどの部分が「その写真の伝えたい部分なのか」を判定できていることを利用して、伝えたい部分を残したサムネイルを自動作成してくれます。OpenCVとか使って自作できなくはないですが、API叩いてぺろっと作成してくれるのであればこれ使うのも検討しちゃうな、とか思ってしまったり。まぁ、画像のサイズ感や形が合えば、ですけどね。頻繁に呼び出すのであればコスト高ですしね。

意外と気をつけなければいけないのは、画像の最大サイズ。4MB以上のファイルサイズの写真を送ることができないので、例えば一眼レフで撮った写真とかであれば送付前に一度小さくしてやる必要があります。

### 料金
- Freeプラン
    - 5000呼び出し/月
- Standardプラン
    - 1000呼び出し$1.5のstandardプランがあります。

料金体系はわかりやすくて良いですね。

# Bluemix Watson Visual Recognition API とは
### 概要
[Visual Recognition API](https://www.ibm.com/smarterplanet/jp/ja/ibmwatson/developercloud/visual-recognition.html)もまた、同様に画像認識APIです。こちらは「画像の分類」に特化したAPIで、分類以外の機能は少ないです。

- 写っているもの判別
- 人判定
    - 年齢
    - 性別
    - 顔の位置
    - (有名人の場合)バイネームで判定される
- 文字認識
- 類似写真抽出
- 教師データ作成機能

その他機能要件は以下の通り。

- 利用可能画像フォーマット： JPEG, PNG
- 画像最大サイズ： 特に記載なし。ただし、教師データ作成時は別途指定あり。
- 画像最小サイズ： 200px × 200px

Visual Recognition APIの特出すべき機能はズバリ「教師データの作成ができる」こと。このような分析系のPaaS APIサービスは判定元となる教師データって自分で作成することができないことが多く、ニッチな判定(例えば冷蔵庫が2ドアなのか3ドアなのか判別させたいとか）には使えなかったんですが、Visual Recognition APIは教師データの作成(=判定カテゴリの新規作成)ができるので、ある程度ニッチな判定にも利用することが可能です。これは画期的。教師データの作成には50枚以上のposiデータ(正解写真)が必要です。このAPIの教師データ精度検証については最近結構細かいところまでやってみたので、近々別途[ブログ](https://hotchpotchj37.wordpress.com/)にでも書こうと思います。お楽しみに。

類似写真抽出機能も楽しい機能です。事前にコレクションデータと呼ばれる教師データを登録しておくと、判定させたい写真に似ている画像を選んで返却してくれます。例えば、赤いスカートの写真を判定させると、同じスカートの色違いスカートを抽出してくれたりするわけです。この機能、使い込むとWEBショッピングサイトとかで簡単にレコメンドシステムとか作れるんじゃないのかなー？今度試してみようと思っています。

また、Visual Recognitionでは特にファイルの最大サイズで怒られたことがありません。ただ、Visual Recognition のドキュメントには「私たちは320px × 320px程度の写真の判定が得意です」みたいな文章があるので、そんなに大きな写真を送る必要はないのでしょう。

### 料金
- Freeプラン
    - １カスタムクラスのみ作成可能
    - カスタムクラスのupdate/deleteができない
    - 1組織アカウントにつき1つまで
    - 教師データの登録も含め250画像/日まで実行可能
- Standardプラン
    - イメージ分類 $0.002/画像
    - 顔検出　$0.004/画像
    - カスタム種別トレーニング　$0.25/画像 
    - カスタム・イメージ分類　$0.004/画像
    - カスタム種別の保管　$10.00/月/クラス

若干Azureより高いかな？と言うイメージですが、1画像ずつで課金されるので、 使い方によっては嬉しい形態ですね。顔検出のAPIとイメージ分類のAPIが別々になっているので、コストの押さえ方も利用者に委ねられているイメージを受けます。

# 似ているところ・違うところ・その他雑感
### 似ているところ
人の年齢判定・性別判定などは機能としては大きな差異はありません。Azureは年齢を言い切りますが(e.g.44歳etc.)Bluemixはrangeで示してくる(e.g.40〜49etc.)などのresponce方法がちょっと違うくらいかなと思います。精度については二つを比べながら細かくやってみたわけではないので提言は避けておきます。多分得意不得意はそれぞれあると思います。

文字の認識についても精度的にもそんなに大きな差はないのではないかなと思っています。使う側としてはいち早く日本語に対応した方に食いつきたい、くらいの気分です。

### 違うところ
似ているサービスとして比べられがちですが、実際に調べて使ってみると大部分が異なっているなぁと感じることです。
タグ付け（分類処理）をする、ということ自体はどちらも同じですが、帰ってくる値は異なります。

Azureはタグ付け以外の機能はどちらかというと「使う先」をイメージされたものが多いのではないかなと感じました。例えばアダルト判定なんてそのままアダルト制御に使えるわけですから。逆に、Visual Cognitionはなるべく使う場所のイメージを排除された形で提供されているように感じます。タグ付けするだけ、類似写真を返却するだけ。その代わりうまくつかえばどこにでも使える形です。どっちが便利と感じるかは自分自身がやりたいことに依存すると思うので、人によってまちまちだと思います。

個人的にはVisual Recognitionの教師データを作成できるのでかなり自由度高いので「推し」です。
キャプションやサムネイル処理、メインカラー抽出など、便利機能がついているComputer Visionは用途によっては抜群の効力を発揮しますので、うまく両方を使い分けていけたらいいなぁと思う今日この頃です。

### 雑感
Azure Cognitive Services / Bluemix Watson 両者全体に言えることですが、まだまだ英語での判定が主流となっているため、日本語に弱い(というか使えないことも)です。文章や音声で日本語を扱う場合はよく利用方法を検討しましょう。翻訳系APIも日本語が入ってくるとイマイチなレスポンスもそこそこあります。日本語は難しいとよく言われるので仕方ないと思いますが、現在では「綺麗な文章にはならない」と覚えておくといいと思います。

# まとめ
金子みすゞではないですが、「みんな違ってみんないい」がうまくハマるな、と言う印象です。ニッチな分類をしたい、類似画像抽出などをしたい場合はBluemix、細かな便利機能を余すところなく使いこなしたいならAzure、などなど、今やりたいことは何か、と言うことを考えながら取捨選択して行くことが大事であり、楽しい部分になって行くのかなと思います。