投稿

3月, 2021の投稿を表示しています

Vision APIのレスポンスデータとJSONやディクショナリを相互変換する(Proto Plus for Python、google.protobuf.json_format)

本記事では、Proto Plus for Pythonやgoogle.protobuf.json_formatのメソッドを利用して、主にVision APIのレスポンスデータをJSONやディクショナリと相互に変換する方法を見ていきます。 【目次】 [1]はじめに [2]Vision APIのレスポンスデータ [3]Proto Plus for Pythonのメソッド(to_json,from_json,to_dict)を利用した変換 (1)Proto Plus for Python (2)JSONとの相互変換 (3)ディクショナリとの相互変換 [4]google.protobuf.json_formatを利用した変換 (1)google.protobuf.json_format (2)MessageToJson:レスポンスデータ=>JSON 変換 (3)Parse:JSON=>レスポンスデータ 変換 (4)MessageToDict:レスポンスデータ=>ディクショナリ 変換 (5)ParseDict:ディクショナリ=>レスポンスデータ 変換 [5](参考?)V1.0.0との違いなど [1]はじめに Google Vision APIのPythonクライアントライブラリを利用して画像から情報検出を行うと、そのレスポンスデータ(検出結果)は、 Protocol Buffers で定義された形式で返却されます。 型付けされたProtocol Buffersのデータは、プログラムで扱うのには便利なのですが、JSON形式やディクショナリと相互に変換したい場合もあります。 例えば、以下のようなケースです。 JavaやJavaScript等の他の言語でも処理しやすいように、JSON形式で保存しておきたい。 Vision APIのAsyncBatchAnnotateImagesとAsyncBatchAnnotateFilesのレスポンスは、Cloud StorageにJSON形式で格納される。一方で、プログラムでの処理はProtocol Buffersのオブジェクトで処理したい。 データの可視化ツールやライブラリを利用したり、データベースなどに格納するとき、JSONあるいはディクショナリのデータ形式に変換したい場合がある。 要求される形式がJSONやディクショナリ以外

Google Document AIで画像から表形式データを抽出する(Vision API OCRとの違い)

イメージ
本記事では、GoogleのDocument AIを利用して、表形式(テーブル形式)で記載された画像から、表形式の情報を抽出してみます。また、GoogleのVision API OCRを利用した場合との違いについてもみておきます。 【目次】 [1]はじめに [2]Document AIとVision API(OCR)の違い [3]テスト用の表形式画像 (1)英語版表形式画像(shoppinglist.jpg) (2)日本語版表形式画像(okaimonolist.jpg) (3)PDFファイルへの変換 [4]Vision APIによる表形式画像の認識 (1)実験方法 (2)英語版表形式画像の認識結果 (3)日本語版表形式画像の認識結果 [5]Document AIによる表形式画像の認識 (1)実験方法 (2)英語版表形式画像の認識結果 (3)日本語版表形式画像の認識結果 [6]最後に [1]はじめに Google Vision APIを利用すると、画像から文字を抽出(OCR)できます。 https://cloud.google.com/vision/ Vision APIは、本などの文章の画像や、風景の画像から文字を抽出するといったケースでは、かなりいい感じで文字を抽出してくれます。文章が書かれているような画像の場合は、画像から文字を抽出するだけでなく、大雑把に文書の構造も得ることができます。 しかし、Vision API OCRでは期待した抽出が難しい例もあります。 例えば、下図のような、よくある表形式で書かれた書類です。 文章の画像は、隣接する文字の塊を抽出するだけでも、期待した文章が抽出できることが多いと思います。 しかし、上図のような表形式の書類は、隣接した文字の塊を抽出するだけでは利用価値が低い場合が多く、表形式のデータとして認識する必要があります。 表形式の書類は、人間が見れば、表組の意味を理解して要点を把握しやすい表現だと思います。例えば、「2021/2/2のお菓子の値段は300円であり、同日のお弁当は1,000円」云々と文章でつらつら書かれるより分かりやすいです。 一方で、これを機械的に認識しようとすると、単語レベルの文字列が散らばって配置されているレイアウトのようにも見えて、解釈が難しい場合が多いです。実際、汎用目的の機械的な表の認識を行