請求書自動化サービスで使われている技術ご紹介(OCRエンジンについて)

先週ご紹介しました「請求書自動化サービス」を構成する主要な技術はChatGPTですが、もう一つ重要な技術を使用しています。

それはPDFやJPEGファイルからテキスト部分を取り出すOCR機能です。私はGoogle社のGoogle cloud Document AI機能が提供するOCR機能を使用しています。

敏感な方は既にお気づきだと思いますが、この組み合わせで画像やPDFファイルの中にある文字や数字といった今までプログラムからは直接アクセスしづらいオブジェクトにアクセスが比較的簡単にできるようになります。

ですので、もしあなたが手作業でなく、自動的にPDFや画像データから文字情報を取り出し加工したいというニーズをお持ちであれば、私が試したことがお役に立てるのではないかと思い、何回かに分けてこのコラムでご紹介しようと思います。

内容は、GoogleOCRとChatGPTのAPIの使用についての採用の経緯や、コードを書く上で時間のかかった個所等についてをメインにしたいと思っています。

今回の話は、私のテスト環境での経験に基づくものであることをご理解ください。また、個々の製品やバージョンについての詳細は省略します。これらは既に多くのサイトで紹介されています。ここでは、プログラミング言語Pythonのバージョン3.11.0環境が前提です。

まず初めは、OCR機能についてです。この仕組みを考えた際にまず迷ったのがPaddleOCRか、Google社のGoogle cloud Document AIのどちらを使うかでした。(以降GoogleOCRと書きます。)

決め手となるきっかけなのですが、OCR機能で取得した文字列をChatGPTのAPIに読ませるわけですが、PaddleOCRで取得された文字列をChatGPTで処理した結果がGoogleOCRを使った結果に比べ、その精度が良くありませんでした。

それでそれら2つの方法で取得した文字列情報を比べると、明らかにGoogleOCRの方が精度が良く、かつ取得する文字列も意味が通る文字列の塊として取得できていることが分かりました。

PaddleOCRの方は、取得した文字列そのものの精度もですが、意味を成す文字列の途中で区切って、別の文字として取得している印象でした。

それで今回はGoogleOCRの使用を決めました。

ちなみにPaddleOCRをpythonで使うためのコードは以下の通りです。

from paddleocr import PaddleOCR

# 日本語モデルを指定
ocr = PaddleOCR(use_angle_cls=True, use_gpu=False, lang="japan")
# OCR処理を実行
results = ocr.ocr(image, cls=True)

GoogleOCRですが、ご存じの方も多いと思いますが、読み取る内容によって色々な種類があります。

APIからこれらの機能を使用するために、まずは「プロセッサー・タイプ」を選択する必要があります。「プロセッサー・タイプ」には、請求書の情報を取得することに特化した「Invoice Parser」もありますが、私が使用しているのは「Document OCR」です。

他にも、「Expense Parser」、「Utility Parser」、「Form Parser」、「Custom Extractor」をテストしましたが、最終的にはほぼ無料と言えること、そして何より今回はChatGPTの機能を最大限使おうという理由で、「Document OCR」というプロセッサー・タイプを選択しました。

次回はこれらのプロセッサータイプの選択で私が迷った事を中心にお話ししたいと思います。

Follow me!