画像から文字列を取得するAPIは他にもいろいろやったことあるが、どれもイマイチだった記憶。Google先生ということで期待してGoogle Cloud Vision API試してみた。
API KEY を Google Developers Consoleで作成する
Google Developers Console
プロジェクト作成する
お支払い方法を設定する
これ設定しないとAPI叩けない
Cloud Vision API を有効
API KEY を取得
「認証情報」⇒「Create Credentials」⇒「APIキー」⇒「ブラウザキー」でAPI KEY を作成する
検証
検証する画像
サンプルプログラム
- ドキュメントを参考にパラメータ設定
require 'base64'
require 'json'
require 'net/http'
require 'uri'
require 'open-uri'
VISION_API_URL = "https://vision.googleapis.com/v1/images:annotate"
API_KEY = "Google Developers Consoleで作成したキー"
URL = "#{VISION_API_URL}?key=#{API_KEY}"
INPUT_IMG_FILE = 'http://blog-imgs-42-origin.fc2.com/k/o/t/kotomona/20101125183059615.jpg'
begin
uri = URI.parse(URL)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
req = Net::HTTP::Post.new(uri.request_uri)
req["Content-Type"] = "application/json"
param = {
"requests" =>
[
{
"image" =>
{
"content" => Base64.strict_encode64(open(INPUT_IMG_FILE).read)
},
"features" =>
[
{
"type" => "LABEL_DETECTION",
"maxResults" => 10
},
{
"type" => "TEXT_DETECTION",
"maxResults" => 10
}
]
}
]
}
req.body = param.to_json
res = https.request(req)
case res
when Net::HTTPSuccess
puts res.body
else
res.error!
end
rescue => e
puts "error = #{e.message}"
end
レスポンス
{
"responses": [
{
"labelAnnotations": [
{
"mid": "/m/0215n",
"description": "cartoon",
"score": 0.93569827
},
{
"mid": "/m/05qdh",
"description": "painting",
"score": 0.75862324
},
{
"mid": "/m/0dgsmq8",
"description": "artwork",
"score": 0.71173751
},
{
"mid": "/m/012h24",
"description": "comics",
"score": 0.63047028
},
{
"mid": "/m/01kr8f",
"description": "illustration",
"score": 0.62665105
}
],
"textAnnotations": [
{
"locale": "ja",
"description": "た\nC&as\nパスケが\nしたいです……\n",
"boundingPoly": {
"vertices": [
{
"x": 236,
"y": 143
},
{
"x": 395,
"y": 143
},
{
"x": 395,
"y": 502
},
{
"x": 236,
"y": 502
}
]
}
}
]
}
]
}