質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.22%

Google Cloud Vision APIのOCRで文字種を制限する方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,073

ponponta

score 1

前提・実現したいこと

Google CloudのVisionAPIでOCRを使用したいが、出力する文字の種類をアルファベットと数字だけに制限したい

該当のソースコード

GOOGLE_CLOUD_VISION_API_URL = 'https://vision.googleapis.com/v1/images:annotate?key='
API_KEY = '******'

# APIを呼び、認識結果をjson型で返す
def request_cloud_vison_api(image_base64):
    api_url = GOOGLE_CLOUD_VISION_API_URL + API_KEY
    req_body = json.dumps({
        'requests': [{
            'image': {
                # jsonに変換するためにstring型に変換する
                'content': image_base64.decode('utf-8')
            },
            'features': [{
                # ここを変更することで分析内容を変更できる
                'type': 'TEXT_DETECTION',
                'maxResults': 10,
            }]
        }]
    })
    res = requests.post(api_url, data=req_body)
    return res.json()

# 画像読み込み
def img_to_base64(filepath):
    with open(filepath, 'rb') as img:
        img_byte = img.read()
    return base64.b64encode(img_byte)
# 文字認識させたい画像を設定
img_base64 = img_to_base64('./test.png')
result = request_cloud_vison_api(img_base64)
# 認識した文字を出力
text_r = result["responses"][0]["textAnnotations"][1]["description"]
print(text_r)

試したこと

ドキュメントを読みましたが該当の機能を見つけられませんでした

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

以下のリンクの感じだと、TEXT_DETECTIONも言語指定の対応してそうな感じですね・・・。
英語指定すると、アルファベットと数字に制限したのと同じ意味になる気がします。
記号はもしかすると混入してしまうかも・・・。

画像内のテキストを検出する - 言語を指定する

言語を指定する(省略可)
どちらのタイプの OCR リクエストも 1 つ以上の languageHints をサポートしています。これにより、画像内のテキストの言語を指定します。しかし、ほとんどの場合、値を空にして自動言語検出を有効にしておくと最善の結果が得られます。ラテン アルファベット系の言語の場合、languageHints の設定は不要です。画像中のテキストの言語がわかっている場合などに、ヒントを設定すると結果が少し良くなります(逆に、ヒントを間違えると大きな障害となります)。サポートされる言語以外の言語が 1 つでも指定されていると、テキスト検出でエラーが返されます。
言語のヒントを指定する場合は、リクエストの本文(request.json ファイル)を変更し、以下の imageContext.languageHints フィールドにサポート対象言語の文字列を指定します。

    {
      "requests": [
        {
          "image": {
            "source": {
              "imageUri": "image-url"
            }
          },
          "features": [
            {
              "type": "DOCUMENT_TEXT_DETECTION"
            }
          ],
          "imageContext": {
            "languageHints": ["en-t-i0-handwrit"]
          }
        }
      ]
    }

言語ヒントの仕組み
languageHint の形式は、BCP47 言語コード形式のガイドラインに準拠しています。BCP47 指定の形式は次のとおりです。

language ["-" script] ["-" region] *("-" variant) *("-" extension) ["-" privateuse]

たとえば、言語ヒント「en-t-i0-handwrit」は、英語(en)、変換拡張シングルトン(t)、入力方法エンジン変換の拡張コード(i0)、手書き入力変換コード(handwrit)を指定しています。簡単にまとめると、「手書き入力から変換された英語」ということになります。スクリプト コードの指定は必要ありません。Latn は en 言語に含まれています。

参考までに
OCR言語のサポート

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る