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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

3016閲覧

CloudVisionAPIでOCR(DOCUMENT_TEXT_DETECTION)

yamato_user

総合スコア2321

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1グッド

1クリップ

投稿2018/04/18 09:06

CloudVisionAPIのDOCUMENT_TEXT_DETECTIONを用いて画像から文字を抽出しています
使用言語:Python3

問題点:レスポンスにconfidenceという情報が含まれ、confidenceはすべてのblock/paragraph/word/symbolに含まれています。しかし、symbolにconfidenceが含まれないことが稀に起こります。確率的には48036文字中67文字です。あらゆる角度から検証しましたが、理由がわかりません。

確認に用いたコード

python3

1import json 2import glob 3json_path_from_list=glob.glob('./RawJSON/*') 4#confidenceが含まれなかった回数 5no_confidence_number=0 6#総文字数 7char_number=0 8for json_path_from in json_path_from_list: 9 with open(json_path_from) as fr: 10 json_data = json.load(fr) 11 for response_j in json_data["responses"]: 12 for page_j in response_j["fullTextAnnotation"]["pages"]: 13 for block_j in page_j["blocks"]: 14 x=block_j["confidence"] 15 for paragraph_j in block_j["paragraphs"]: 16 x=paragraph_j["confidence"] 17 for word_j in paragraph_j["words"]: 18 x=word_j["confidence"] 19 #confidenceを保持しない文字の信用度格納 20 symbol_confidence_list=[] 21 #confidenceを保持しない文字が作る単語格納 22 word="" 23 #symbolsのループが終わって、confidenceを保持しない文字が含まれていた場合、諸々表示のフラグ 24 flag=0 25 for symbol_j in word_j["symbols"]: 26 #総文字数カウント 27 char_number+=1 28 try: 29 #confidenceをとってこれるか 30 x=symbol_j["confidence"] 31 #単語生成 32 word=word+symbol_j["text"] 33 #信用度格納 34 symbol_confidence_list.append(symbol_j["confidence"]) 35 except: 36 #単語生成 37 word=word+symbol_j["text"] 38 #confidenceを保持しなかった文字を記憶 39 no_confidence_text=symbol_j 40 #printフラグを立てる 41 flag=1 42 #symbolsの中にconfidenceを持たない文字があった時だけ詳細情報を表示 43 if flag==1: 44 #confidenceがなかった文字数カウント 45 no_confidence_number+=1 46 #ファイル名 47 print(json_path_from) 48 #単語 49 print(word) 50 #confidenceを保持していなかった文字 51 print(no_confidence_text) 52 #上位Wrapperの信用度 53 print(word_j["confidence"]) 54 print(paragraph_j["confidence"]) 55 print(block_j["confidence"]) 56 #信用度を保持していなかった文字を除く文字たちの信用度 57 print(symbol_confidence_list) 58 print("________________________________________________") 59 else:pass 60#confidenceがなかった文字数 61print(no_confidence_number) 62#総文字数 63print(char_number)

念のためにCloudVisionAPIに投げたリクエストも見てください
DOCUMENT_TEXT_DETECTIONに対して、日本語の指定をしただけです

python3

1import json 2import base64 3import requests 4#base64エンコード関数 5def convert_img_to_base64(img_path): 6 img_data = open(img_path, 'rb').read() 7 img_base64 = base64.b64encode(img_data).decode() 8 return img_base64 9#OCRクラスの定義 10class OCR: 11 def __init__(self,api_key): 12 self.api_key=api_key 13 def get_json_responce_from_img(self,img_base64,json_request): 14 json_request['requests'][0]['image']['content']=img_base64 15 url="https://vision.googleapis.com/v1/images:annotate?key="+self.api_key 16 result=requests.post(url,json.dumps(json_request),headers={'Content-Type': 'application/json'}) 17 return result.text 18#APIキー 19API_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 20#画像のパス 21img_path="./test.jpg" 22#JSONリクエスト文 23json_request={'requests':[{'image':{'content':""},'features': {'type': "DOCUMENT_TEXT_DETECTION"},'imageContext':{'languageHints':"ja"}}]} 24#img_base64に変換後の画像を保存 25img_base64=convert_img_to_base64(img_path) 26#OCRクラスのインスタンス生成 27ocr=OCR(API_KEY) 28#JSONレスポンス 29data=json.loads(ocr.get_json_responce_from_img(img_base64,json_request)) 30#JSONレスポンスを保存 31with open("./test.json",'w') as fw: 32 json.dump(data,fw,indent=4)
HayatoKamono👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

その他にも、矩形領域が抜け落ちるなど、ちらほら不具合がありましたので、バグと認定しまして、対策を講じました

投稿2018/05/29 04:33

yamato_user

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

https://cloud.google.com/vision/docs/reference/rest/v1/images/annotate

confidence

携帯からなので間違ってたらすいません。confidenceは廃止に見受けられますが、違いますかね?

投稿2018/04/18 15:54

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamato_user

2018/04/18 16:05

そちらの写真はtextAnnotationのレスポンスの説明と思われます。fullTextAnnotationはconfidenceは健在です。回答してくださったページをもう一度詳しく見てみましたが、やはり、confidenceがレスポンスに付与されないことは考えられないです。。。。どういうことなんでしょうか???
YouheiSakurai

2018/04/18 16:12

それは失礼しました。これ以上は私から何もありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問