5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

国会図書館OCRにAI補正機能を追加した - NDLOCR-Lite × AWS Bedrock

5
Posted at

以下の環境を補強します。
AWS Bedrock(ClaudeやNova)とAPI連携して、OCRの出力を補正します。

リポジトリ

料金について

AWS Bedrockは従量課金です。Claude Haiku 4.5の場合:

  • 入力: $0.80 / 1M tokens
  • 出力: $4.00 / 1M tokens

目安: A4契約書1枚(約2000文字)の補正で約0.5円程度

参考: AWS Bedrock料金

モデル比較

Novaは約1/10のコスト!
Nova Liteで動作上問題ないなら金銭的にもこっちでしょうかね・・・
精度最重視ならHaiku等を使う感じで・・・

モデル 入力 出力 A4 1枚あたり
Claude Haiku 4.5 $0.80/1M $4.00/1M 約0.5円
Nova Micro $0.035/1M $0.14/1M 約0.02円
Nova Lite $0.06/1M $0.24/1M 約0.04円

手順

AWS Bedrockと連携する。

AWS Bedrockと連携するためのアクセスキー・シークレットアクセスキーを発行します。

キーやBedrockのモデルIDを.envファイルに書き込みます。.env.exampleからコピペします。
リージョンはus-east-1を設定しておきます。Bedrockのモデルを幅広く用意しているリージョンだからです。

# .env.example
# このファイルは git に入れる(テンプレート)
# 実際の値は .env に書く(gitignore 済み)

# LLM プロバイダ(現在は bedrock のみ対応)
LLM_PROVIDER=bedrock

# 使用モデル(Bedrock のモデル ID)
LLM_MODEL=us.anthropic.claude-haiku-4-5-20251001-v1:0

# AWS 認証情報(Bedrock 使用時に必須)
AWS_ACCESS_KEY_ID={アクセスキーを記載}
AWS_SECRET_ACCESS_KEY={シークレットアクセスキーを記載}
AWS_REGION=us-east-1

# NDLOCR-Lite API URL(docker-compose 内では変更不要)
# NDLOCR_URL=http://ndlocr:8080

Claudeの場合はユースケース申請をしないといけないので申請します。Novaの場合は申請せずとも使用可能です。
us-east-1リージョンに切り替えた上で、Bedrockの管理画面を開きます。Claude Haiku4.5を開きSubmit use case detailsを押下します。

CloudShellを起動して以下のように表示されれば申請が通って使用できる状態になったことを示します。

~ $ aws bedrock list-inference-profiles --region us-east-1

~中略~

        {
            "inferenceProfileName": "Global Anthropic Claude Haiku 4.5",
            "description": "Routes requests to Anthropic Claude Haiku 4.5 globally across all supported AWS Regions.",
            "createdAt": "2025-10-13T20:55:08+00:00",
            "updatedAt": "2026-04-22T19:34:33.299983+00:00",
            "inferenceProfileArn": "arn:aws:bedrock:us-east-1:535002847634:inference-profile/global.anthropic.claude-haiku-4-5-20251001-v1:0",
            "models": [
                {
                    "modelArn": "arn:aws:bedrock:::foundation-model/anthropic.claude-haiku-4-5-20251001-v1:0"
                },
                {
                    "modelArn": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-haiku-4-5-20251001-v1:0"
                }
            ],
            "inferenceProfileId": "global.anthropic.claude-haiku-4-5-20251001-v1:0",
            "status": "ACTIVE", ★ここがACTIVEになっていると申請が通った証らしい。
            "type": "SYSTEM_DEFINED"
        },

コンテナイメージのビルド

PS C:\Users\ohtsu\Documents\アプリ\ndlocr-lite-app> docker compose -f .\docker-compose.phase03.yml build

#38 [backend] resolving provenance for metadata file
#38 DONE 0.0s
[+] Building 3/3
 ✔ ndlocr-lite-app-frontend  Built                                                                                    0.0s 
 ✔ ndlocr-lite-app-ndlocr    Built                                                                                    0.0s 
 ✔ ndlocr-lite-app-backend   Built  

PS C:\Users\ohtsu\Documents\アプリ\ndlocr-lite-app> docker image ls
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
ndlocr-lite-app-backend    latest    5ab6aa6042b8   26 seconds ago   207MB
ndlocr-lite-app-frontend   latest    0bb7260449bc   7 minutes ago    62.6MB
ndlocr-lite-app-ndlocr     latest    9b60426f227e   4 hours ago      1.37GB

コンテナのデプロイ

PS C:\Users\ohtsu\Documents\アプリ\ndlocr-lite-app> docker compose -f docker-compose.phase03.yml up -d  
[+] Running 4/4
 ✔ Network ndlocr-lite-app_default       Created                                                                      0.0s 
 ✔ Container ndlocr-lite-app-ndlocr-1    Healthy                                                                      6.0s 
 ✔ Container ndlocr-lite-app-backend-1   Healthy                                                                      6.0s 
 ✔ Container ndlocr-lite-app-frontend-1  Started                                                                      6.2s 

動作確認

http://localhost:5173/にWebブラウザでアクセスします。
OCRを実行した後、文書のタイプと補正ボタンを押下できるようになっています。
タイプを選択しボタンを押下してみます。

補正結果タブと構造化JSONタブが表示されます。
それぞれAIモデルで解析した結果が表示されます。

JSONの結果サンプルを出力してみます。

{
  "document_type": "契約書",
  "title": "業務委託契約書",
  "contract_number": null,
  "date": "令和○年○月○日",
  "effective_date": "令和◦年◦月◦日",
  "expiry_date": "令和◦年◦月◦日",
  "party_a": {
    "role": "委託者(甲)",
    "company": "○○○○",
    "representative": null,
    "address": null
  },
  "party_b": {
    "role": "受託者(乙)",
    "company": "○○○○",
    "representative": null,
    "address": null
  },
  "amount": null,
  "payment_terms": "委託期間満了の翌月○日までに請求、請求書受領日の翌月○日までに支払い",
  "currency": "JPY",
  "governing_law": "日本法",
  "jurisdiction": "〇〇地方裁判所",
  "corrections": [
    "第5条第1項: 「甲の代理人かのごとく」→「甲の代理人のごとく」",
    "第9条: 「上現として」→「上限として」",
    "第9条: 「放意」→「故意」",
    "第12条第2項: 「第6条(成果及びその帰属)」→「第6条(知的財産権の帰属)」",
    "第13条第1項: 「かかるこれに違反した」→「かかることに違反した」",
    "第14条第1項④: 括弧の位置を修正"
  ]
}

Ubuntuへのデプロイ

root@ocr-dev-env:~/ndlocr-lite-app# git pull
root@ocr-dev-env:~/ndlocr-lite-app# ls -a
.  ..  backend  docker-compose.phase01.yml  docker-compose.phase02.yml  docker-compose.phase03.yml  docs  .env.example  frontend  .git  .gitattributes  .gitignore  ndlocr  README.md
root@ocr-dev-env:~/ndlocr-lite-app# cp -p .env.example .env
root@ocr-dev-env:~/ndlocr-lite-app# vi .env
root@ocr-dev-env:~/ndlocr-lite-app# cat .env
# .env.example
# このファイルは git に入れる(テンプレート)
# 実際の値は .env に書く(gitignore 済み)

# LLM プロバイダ(現在は bedrock のみ対応。将来: ollama)
LLM_PROVIDER=bedrock

# 使用モデル(Bedrock のモデル ID)
# Claude 3.5以降の新モデルは "us." プレフィックスのクロスリージョン推論プロファイルIDが必要
LLM_MODEL=us.anthropic.claude-haiku-4-5-20251001-v1:0

# AWS 認証情報(Bedrock 使用時に必須)
AWS_ACCESS_KEY_ID={アクセスキーを記載}
AWS_SECRET_ACCESS_KEY={シークレットアクセスキーを記載}
AWS_REGION=us-east-1

# NDLOCR-Lite API URL(docker-compose 内では変更不要)
# NDLOCR_URL=http://ndlocr:8080

# docker-compose.phase02.ymlを立ち上げている場合は下げたあとにphase03を立ち上げる
root@ocr-dev-env:~/ndlocr-lite-app# docker compose -f docker-compose.phase02.yml down
root@ocr-dev-env:~/ndlocr-lite-app# docker compose -f docker-compose.phase03.yml up --build -d

root@ocr-dev-env:~/ndlocr-lite-app# docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                    PORTS                                         NAMES
2f3747dbba6a   ndlocr-lite-app-frontend   "/docker-entrypoint.…"   22 seconds ago   Up 14 seconds             0.0.0.0:5173->80/tcp, [::]:5173->80/tcp       ndlocr-lite-app-frontend-1
a77d8615eaca   ndlocr-lite-app-ndlocr     "uvicorn server:app …"   26 seconds ago   Up 20 seconds (healthy)   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   ndlocr-lite-app-ndlocr-1
1bc99e9c35d2   ndlocr-lite-app-backend    "uvicorn main:app --…"   26 seconds ago   Up 20 seconds (healthy)   0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp   ndlocr-lite-app-backend-1

http://{サーバのIPアドレス}:5173/にアクセスして、機能が使用できるか確認します。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?