発生している問題・エラーメッセージ
Google Cloud Vision (以下GCV) の DOCUMENT_TEXT_DETECTION を利用しています。
OCR にて文字列は正しく検知されているにもかかわらず、文字分割の認識領域がズレているように見られます。
単独文字の confidence
も高いため、検知箇所を間違えているということも考えづらいです。
以下の仮説を検証中していますが、詰まってしまいました。
- 私が書いた描画関数がポンコツ
- GCV の character segmentation がポンコツ
- GCV の 内部で画像に何かしらの補正をかけている。
- その他
実現したいこと
Cloud Vision の 文字分割の結果を元に、画像中の文字から1文字ずつトリミングした画像郡を生成したいと思いっています。
そのためになぜ矩形の位置がズレているのか、補正する方法があるのかを知りたいです。
よろしくお願いします。
入力画像
Cloud Vision API から帰ってきた Json ファイル
文字分割の認識領域を描画した画像
描画関数
現在試しに書いているソースから描画に関するところだけ抜いてきたので
至らないところは目をつぶっていただけると助かります。
py
1import argparse 2import cv2 3import glob 4import json 5 6def get_coordinate_list(json_data): 7 json_list = json_data['responses'][0]['fullTextAnnotation']['pages'] 8 coordinate_list = [] 9 10 for pages in json_list: 11 for blocks in pages['blocks']: 12 for paragraphs in blocks['paragraphs']: 13 for words in paragraphs['words']: 14 for symbols in words['symbols']: 15 coordinate_list.append(symbols['boundingBox']) 16 17 return coordinate_list 18 19 20def read_image(img_file): 21 image_file = img_file 22 image = cv2.imread(str(image_file)) 23 cv2.destroyAllWindows() 24 return image 25 26 27def get_rectangle(img, lists, file_path): 28 for box in lists: 29 cv2.destroyAllWindows() 30 cv2.rectangle(img, (box['vertices'][0]['x'], box['vertices'][0]['y']), (box['vertices'][2]['x'], box['vertices'][2]['y']), (255, 255, 0), 4) 31 32 ext = ("_rectangle" + get_extension(file_path)) 33 cv2.imwrite(file_path + ext, img) 34 return file_path + ext 35 36 37if __name__ == '__main__': 38 parser = argparse.ArgumentParser() 39 parser.add_argument("--input", type=str) 40 args = parser.parse_args() 41 input_dir = args.input 42 43 # 描画対象のファイルを取得 44 file_list = list(glob.glob(input_dir + '/*.jpg') + glob.glob(input_dir + '/*.png')) 45 for file_path in file_list: 46 json_file = file_path + '.json' 47 f = open(json_file, 'r') 48 json_data = json.load(f) 49 rect_list = get_coordinate_list(json_data) 50 51 # 矩形を描画 52 img = read_image(file_path) 53 54 get_rectangle(img, rect_list, file_path) 55
補足情報
Python 3.6.5

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/20 05:28
2018/09/21 06:20
2018/09/21 10:02