IBM BluemixのAlchemyAPIで超簡単に画像認識する

まとめ

  • AlchemyAPIに画像をアップロードすると識別結果を返してくれる
  • 無料で使える
  • ライブラリも豊富
  • 画像認識がAPIで呼び出せる世界の可能性凄い
    • 画像認識ライブラリすら必要ない世界…

AlchemyAPIで画像認識が凄い簡単にできる

先日のABPro2015でこんな発表をしました

ここで画像の判定にAlchemyAPIを利用しています。
Twitterの画像URLをAPIに投げるだけでかなり精度のいい識別結果を返してくれるため、とても便利です。

AlchemyAPIとは?

http://www.alchemyapi.com/
IBMが買収した機械学習によるデータ分析会社です。
画像認識や自然言語処理に強い会社だったらしく、その一部をIBM Bluemixで提供しています。

IBM Bluemixは最小構成なら無料で使え、
(おそらく)AlchemyAPIの使用権はアカウントを持っていれば1日1000件まで無料らしいので、
回数は限られますが無料で画像認識ができます。

どうやらIBM Bluemixは単なるクラウドサービスではなく、
音声認識や機械翻訳、データ処理等複雑な処理をサービスとして簡単にセットアップできるようになっているらしく、
その中の1つにAlchemyAPIが含まれているようです。
なお、IBMが用意した画像認識サービスもあるらしく、そちらの方はBetaですが制限はないようです。

使い方

IBM Bluemixのアカウントを作り、適当なアプリケーションを1つ作成します(仮想マシンを一個作る感じ)。
その後、サービスからAlchemyAPIを選んで作ったアプリケーションに登録するだけです。

登録が終わると作ったアプリケーションの環境変数としてapikeyが設定されるので、
それを利用して画像のURLやデータをAPIに投げれば認識結果が帰ってきます。

ライブラリ

公式がいくつかの言語のライブラリを提供しています。
https://github.com/AlchemyAPI

golangによる画像認識APIは無かったため、ライブラリを作りました。
使いたい方はどうぞ。
https://github.com/ota42y/go-alchemyapi

サンプルコード

package main

import (
	"os"
	"fmt"
	
	alchemyapi "github.com/ota42y/go-alchemyapi"
)

func main() {
	token := os.Getenv("ALCHEMYAPI_TOKEN")
	if token == "" {
		fmt.Println("skip this test because no token")
		return
	}

	client := alchemyapi.New(token)
	res, err := client.URLGetRankedImageKeywords("https://pbs.twimg.com/media/CQ7ENtOUwAAZyNF.jpg", false, false)
	if err == nil {
		for _, keyword := range res.ImageKeywords {
			fmt.Println(keyword.Text, keyword.Score)
		}
	} else {
		fmt.Println(err)
	}
}

結果

% go run test.go
food 0.832018
sushi 0.5

感想

件数は限定的とはいえ、投げるだけで画像認識できるとか相当凄いです。
しかも食べ物かそうじゃないかだけでなく、寿司かどうかまで判定しているので、学習精度もかなり良いです。
ここ1年ぐらいでディープラーニングによる画像識別が流行り、便利なライブラリがたくさん出た印象ですが、
もう自前でやらずにAPIとして使うのが当たり前になってしまいそうです。

また、Bluemixについては初めて知りましたが、単にサーバを提供するだけでなく、
こういった高度なサービスを提供するのは上手いなぁ…と思いました。
使う側はセットアップや教師データの収集を考えずに使えてしまうので、
画像認識を使う敷居がぐっと下がるのではないかと思います。
(制限を超えたときの料金が書いてないのでお値段がどれくらいかはわかりませんが…)