デジタル化の第一歩 Amazon Textract を使った簡易Web登録画面を作ってみた
はじめに
この記事は クラスメソッド発 製造業 Advent Calendar 2024 の15日目の記事です。
製造業の抱える課題については、マクロ視点において、CX(コーポレート・トランスフォーメーション)や大規模なDXの取り組みの必要性などが挙げられています。
しかし、個人的には、まだまだ多くの製造業の現場においては「個別工程のカイゼン」もままならない状況ではないだろうか、と感じています。
ドラスティックに製造プロセスを再検討して変更することは、多くの現場にとって頭で考えるほど簡単ではない苦労があるように思います。もちろん、それで大規模なDXも諦めるわけにもいかないのですが、産業規模、全社規模でのDXを検討しつつも、並行して目の前のマイクロな業務も楽にしていきたいところです。
参考
やりたいこと
紙媒体を効率的にデジタル化したいです。
Amazon Textract は、OCR(光学文字認識)技術を使用して、スキャンしたドキュメントからテキスト、手書き文字、レイアウト要素、データを自動的に抽出する機械学習 (ML) サービスです。
DevIO の読者ともなれば、何度も見たことのある枯れたサービスかもしれませんが、今回は、この Textract を利用して、紙媒体データをデジタル化するアプリケーションを簡易的に作成してみることにしました。
やったこと/構成
以下フローで、ユーザーは文書の画像をアップロードして、結果を取得するまでの一連の流れを自動化します。
実利用にあたり検討すべき点
- 現状(2024年12月)、日本語の文字抽出には対応していないため、対象言語の文書(English, German, French, Spanish, Italian and Portuguese)にする必要があります。
- Textract の精度は比較的に高いように感じますが、抽出結果の目視確認と修正対応のプロセスを加えるのは必須です。
- 以下の検証ではその場で結果を目視確認して更新できるように同期的に Textract の結果を返すようにしていますが、検出項目数が多いと待機時間が長くなるかもしれません。一つのドキュメントにどれだけの検出項目を設けるかは要検討です。また項目数を多くすると、文字サイズは小さくなっていくはずなので、検出精度が下がる可能性があります。
- それでも検出に問題がある場合は、撮影ライブラリを選定し直す必要もあるかもしれません。
なお、コストについては、今回の利用方法であれば、1ページ $0.015 なのでそれほどコストは高くならないと考えます。
参考
やってみた
画像撮影には、人気の高そうな react-webcom を利用しました。
N. Virginia の Textract のコンソールのサンプルにある paystub のイメージを対象としました。
手っ取り早く値を取得したいと思ったので、Analyze-Document の FeatureType Query を利用しました。
ユーザーは、Gross Pay(総支給額) と Net Pay(手取り額) を入力することを想定した業務プロセスとしています。
サンプルアプリは https://github.com/cm-kato-moqrin/demo-ocr-web-app にあります。
# Amazon Textract は日本リージョンで対応していないため
export CDK_DEFAULT_REGION=us-east-1
npm i && npm run cdk deploy -w iac -- --all
# CDKのデプロイが完了したら出力された値を環境変数に設定
export S3_BUCKET_NAME=${AWS_ACCOUNT_ID}-us-east-1-demo-react-app
export CLOUDFRONT_DISTRIBUTION_ID=${CLOUDFRONT_DISTRIBUTION_ID}
# S3にデプロイ
npm run deploy -w frontend
カメラに対象ドキュメントを写します。
画像アップロードして、しばらくすると、モーダルが開きます。
Textract からの推論値が戻ってきてテーブルに入力されています。
ドキュメント画像が結構粗めで見にくいような印象でしたが、やはり誤検出してます。
Net Pay の真の値は 291.90 です。
このように目視確認を挟みつつ、編集ボタンから修正します。
また信頼性が表示されていますので、修正の有無の参考とします。(今回は高い信頼性で誤っていますが)
そして登録します。
とはいえ、今回は DB などによる保存処理は対応していません。
また、リソースを増やすのが億劫だったため、検証用に Function URL で対応しましたが、実利用の際は、APIGW や然るべきバックエンドリソースを用意して認証認可も対応するのが適切です。
お片付けするときは下記コマンドです。
npm run cdk destroy -w iac -- --all
さいごに
Amazon Textract を利用した簡易アプリケーションを作ってみましたが、Textract については短時間で雰囲気で触っていたため、もっと適切な利用アプローチがあるかもしれません。
また機会があれば試してみようと思います。
なお、コードについてはあくまで検証用のコードであり、プロダクション水準のコードではありません。
どなたかのお役に立てば幸いです。