RからGoogle Cloud Vision APIを使う
Google Cloud Vision APIが高性能らしいので使いたいのだが私はRしか使えないのでRから使う。
とりあえず手持ちのこの画像のOCRをしたい。
前準備としてAPIキーの取得などがあるので以下を参考にされたし。
http://qiita.com/takaheraw@github/items/e2d8ac9edad4655596a2
コードは以下の通り。
getResult <- function(f, type = "TEXT_DETECTION"){ library("httr") library("base64enc") CROWD_VISION_KEY <- "あなたのキー" u <- paste0("https://vision.googleapis.com/v1/images:annotate?key=", CROWD_VISION_KEY) img <- readBin(f, "raw", file.info(f)[1, "size"]) base64_encoded <- base64encode(img) body <- list(requests = list(image = list(content = base64_encoded), features = list(type = type, maxResults = 10)) ) res <- POST(url = u, encode = "json", body = body, content_type_json()) }
結果は以下の通り。ちょっと訛ってる。
f_satoyanagi <- "satoyanagi.png" res <- getResult(f_satoyanagi, "TEXT_DETECTION") content(res)$responses[[1]]$textAnnotations[[1]]$description [1] "データ芝イ ンテ\nさどようへいさん\n丁\n"
ほかにも色々できる
たとえば物体認識もできる。
お好み焼きを認識させてみよう。
f_okonomiyaki <- "okonomiyaki.jpg" res2 <- getResult(f_okonomiyaki, "LABEL_DETECTION") jsonlite::fromJSON(content(res2, as = "text"))$responses$labelAnnotations
ちゃんとお好み焼きが候補にでてくる。
[[1]] mid description score 1 /m/02q08p0 dish 0.9867435 2 /m/02wbm food 0.9811904 3 /m/02ln79 yakisoba 0.8415857 4 /m/0dxn2 roasting 0.7471840 5 /m/0772h spaghetti 0.7463352 6 /m/012x_n okonomiyaki 0.7116117 7 /m/09y2k2 italian food 0.6926621 8 /m/0f4s2w vegetable 0.5964628 9 /m/07xgrh ingredient 0.5623973
一応もんじゃ焼きも認識させてみる。
f_gero <- "monjayaki.jpg" res3 <- getResult(f_gero, "LABEL_DETECTION") jsonlite::fromJSON(content(res3, as = "text"))$responses$labelAnnotations
信じられないことにもんじゃ焼きですら食べ物として認識され、さらに候補にさえ出てくる。
すげえなGoogle。
[[1]] mid description score 1 /m/018_z5 meat pie 0.9999765 2 /m/02wbm food 0.9927497 3 /m/02q08p0 dish 0.9914593 4 /m/0krfg meal 0.9097335 5 /m/02ln79 yakisoba 0.8457233 6 /m/01_545 jambalaya 0.7069302 7 /m/0hz4q breakfast 0.6837853 8 /m/020t4k stuffing 0.6493556 9 /m/0f010_ monjayaki 0.6427853 10 /m/09y2k2 italian food 0.6076508
Enjoy!!