よしたく blog

ほぼ週刊で記事を書いています

Google Cloud Vision APIを使って、トリミングしたレシートから文字を取得してみた

前回からの続きです

yoshitaku-jp.hatenablog.com

Google Cloud Vision APIを使って、前回トリミングした画像に書いてある文字を取得してみようと思います。 OCRと呼ばれる技術を使うことで実現できます。

前回トリミングした画像です。 画像にある、「領収書」とか「購入金額」という文字を取得します。 どれぐらい正確にやってくれるものなのだろうか。

環境

  • Python3.6.4
  • certifi==2018.1.18
  • chardet==3.0.4
  • idna==2.6
  • requests==2.18.4
  • urllib3==1.22

準備

# 仮想環境を作成
python3 -m venv ocr-demo

#仮想環境の立ち上げ
cd ocr-demo
source bin/activate

# requestsのインストール
# requestsをインストールすれば、他のツールもインストールされます
pip install requests

# Python3の起動
python3

ocr-demo配下にトリミングしたreceipt_rect.jpgを配置します。

下は実際のソースコードです。 str_api_keyは、Google Cloud Visionで取得したAPIのKEYを設定しましょう。

import base64
import json
import requests

bin_captcha = open("receipt_rect.jpg", 'rb').read() #OCRにかけたい、ファイル名を指定
str_encode_file = base64.b64encode(bin_captcha).decode('ascii')
str_url = "https://vision.googleapis.com/v1/images:annotate?key="
str_api_key = "KEY"
str_headers = {'Content-Type': 'application/json'}
str_json_data = {
    'requests': [
        {
            'image': {
                'content': str_encode_file
            },
                'features': [
                    {
                        'type': "TEXT_DETECTION",
                        'maxResults': 10
                    }
                ]
            }
    ]
}
response = requests.post(str_url + str_api_key,
    data=json.dumps(str_json_data),
    headers=str_headers
)
json_response = json.loads(response.text)
print(json_response["responses"][0]["textAnnotations"][0]["description"])

出力されたコンソールの内容(最後のprint文だけになります)

前回トリミングした画像

すごい!!!!!!ほぼ正確に取れてます! 英語の全角半角ぐらいしか間違い(これを間違いとまで言っていいのか?)ぐらいしか無いのでは???

クラウドサービスでOCRの精度を比較しようとしたけど、ここまで正確だと比較しようのない気もしてきました。

まとめ

  • トリミングした画像から、文字を取得してみた。
  • 日本語でも100%に近い正確性で、画像の文字を認識できた。