はるみちゃんのてっくぶろぐ

はるみちゃんのブログだよ。主に技術系の記事を書くよ。

Google Cloud Vision APIでOCRを試してみる

なんか前回か前々回か忘れたけど、日本語全然認識できひんかったから、Google様の力を借りるで・・。

毎月1000回以上のリクエストやったら無料や。
あ、正確には1000unitやな。例えば文字認識と物体認識を同時にやったら1リクエスト2unitsや。
1000unitsを超えたら1000units毎に2.5ドルとかするんや、たっかいなあ・・・。俺何万毎とOCRかけたいんやけどなあ・・。

使い方はめっちゃ簡単や!

Cloud Vision API Requests and Responses  |  Google Cloud Vision API Documentation  |  Google Cloud Platformソースコードも含めて全部書いてあるわ!!

ちなみに、特定の画像に対してリクエストを送ってレスポンスを受け取るのはこんな感じでできるで。

import requests
import base64
import json
image_data = open(‘image_file_path’, ‘rb’).read()
req_body = json.dumps({
    ‘requests’: [{
    ‘image’: {
        ‘content’: base64.b64encode(image_data).decode(‘UTF-8’)
        },
        ‘features’: [{
        ‘type’: ‘TEXT_DETECTION’,
        ‘maxResults’: 10,
        }] }] })
response = requests.post(
    url=‘https://vision.googleapis.com/v1/images:annotate?key=API_KEY’,
    data=req_body,
    headers={‘Content-Type’: ‘application/json’}
    )
print(response.text)

type:のところにTEXT_DETECTIONってしてるから文字認識やな。
他には顔認識とかランドマーク認識とかいろいろあるんやなあ。。。

さて、色々試していくで。
あ、その前にさっきのコードのまんまやったら、json形式のresponseがそのまま表示されて見にくいからちょっと修正せんとな。
responseのtextAnnotations->descriptionっていうとこに文字が入ってるっぽいし、こことlocaleだけ表示するようにしとこか。

res = json.loads(response.text)
try:
    print(res[‘responses’][0][‘textAnnotations’][0][‘locale’])
    print(res[‘responses’][0][‘textAnnotations’][0][‘description’].replace('\n',""))
except:
    print("could not be recognized")

こんなんでええか。実験するで。
今回は以下の21種類の画像でやるわ。

(1)
f:id:deeptoneworks:20160919233235p:plain
(2)
f:id:deeptoneworks:20160919233236p:plain
(3)
f:id:deeptoneworks:20160919233237p:plain
(4)
f:id:deeptoneworks:20160919233238p:plain
(5)
f:id:deeptoneworks:20160919233240p:plain
(6)
f:id:deeptoneworks:20160919233241p:plain
(7)
f:id:deeptoneworks:20160919233242p:plain
(8)
f:id:deeptoneworks:20160919233243p:plain
(9)
f:id:deeptoneworks:20160919233244p:plain
(10)
f:id:deeptoneworks:20160919233245p:plain
(11)
f:id:deeptoneworks:20160919233246p:plain
(12)
f:id:deeptoneworks:20160919233247p:plain
(13)
f:id:deeptoneworks:20160919233248p:plain
(14)
f:id:deeptoneworks:20160919233249p:plain
(15)
f:id:deeptoneworks:20160919233250p:plain
(16)
f:id:deeptoneworks:20160919233251p:plain
(17)
f:id:deeptoneworks:20160919233252p:plain
(18)
f:id:deeptoneworks:20160919233253p:plain
(19)
f:id:deeptoneworks:20160919233254p:plain
(20)
f:id:deeptoneworks:20160919233255p:plain
(21)
f:id:deeptoneworks:20160919233256p:plain

結果

画像番号 認識結果-言語 認識結果-文字 正負
1 x
2 x
3 x
4 ja 持家う x
5 ja 公営の借家 o
6 ja 公団·公社の借家 o
7 zh-Hant 長屋建 o
8 ja 一戸建 o
9 ja 総数 o
10 ja その他 o
11 ja 間借 x
12 ja (再掲) 世帯が住んでいる階 o
13 ja 全体の階数 o
14 ja 住宅の所有の関係(6区分) o
15 en 38 o
16 x
17 en 31.4 o
18 en 36.0 o
19 en Rented rooms o
20 en Owned houses o
21 pt-PT Principal households o

ええ感じやん!!日本語もかなりの精度でとれてると思うで!
間借りと間借とかもう正解でええしな。
さすがgoogle様や!
zh-Hantは中国語、pt-PTはポルトガル語やな!ここがあってるかどうかはどうでもええわ!!

ただなあ、数字のセルを全部このAPIにかけてたら金がいくらあっても足りひんで・・ 。何万とデータがあるからな・・・。
文字のセルはともかく、数字のセルだけでもこっちで認識させてあげられへんかなあ??