Skip to content

全文OCR(NDL OCR-Lite)

登録済みのアイテム画像に対して、あとから OCR(文字認識)をかけて全文検索できるようにする機能です。国立国会図書館(NDL)が公開する軽量 OCR モデルを同梱しており、追加のクラウド費用なしに、自ホストのまま全文テキストを生成できます。

認識したテキストは各アイテムの本文(body)に書き込まれ、そのまま既存のサイト内検索の対象になります(Postgres の全文検索インデックス、Elasticsearch 索引を使うサイトではそちらにも自動反映)。

2 つのモデル(資料に応じて選ぶ)

資料の性質に合ったモデルを選ぶことが重要です。取り違えると認識精度が大きく落ちます。

flavourモデル対象
ndl-ocrNDLOCR-Lite近代活字資料(活版印刷の書籍・雑誌など)
ndl-kotenocrNDL古典籍OCR-Liteくずし字・古典籍(手書き・木版など)

古典籍モデルは TEI XML も出力でき、TEI 取り込み(本文表示・固有表現抽出)へつなげられます。

サイトの既定モデルを決める

サイトごとに既定モデルを settings.ocr.flavour として保存できます。ダッシュボードの設定、または API で設定します。

bash
curl -X PATCH "$BASE/api/$ACCOUNT/databases/$DB" \
  -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
  -d '{"settings":{"ocr":{"flavour":"ndl-ocr"}}}'

OCR をかける

OCR エンジンは本体とは別のコンテナ(services/ndl-ocr)で動きます。運用者が次の手順で実行します。

bash
# 1) OCR サービスを起動(CPU で動作、モデル同梱)
docker compose --profile ocr up -d

# 2) 対象サイトにバッチをかける(まず数件で精度を確認)
npm run ocr:db -- --account=<アカウント> --db=<サイト> --flavour=ndl-ocr --limit=3

# 3) 問題なければ全件
npm run ocr:db -- --account=<アカウント> --db=<サイト>
  • 冪等・再開可能:本文がすでに入っているアイテムはスキップします(--force で再実行)。
  • ドライラン--dry-run で書き込みをせず、認識文字数だけ確認できます。
  • 実行後は該当サイトの検索窓で、認識された語が引けるようになります。

処理の流れ・環境変数(ローカル / 本番の切り替え)など技術的な詳細は、開発者向けドキュメントの API を使うscripts/ocr-db.ts の冒頭コメントを参照してください。

注釈(OCR)の表示スタイル

OCR で認識したテキストは、各コマの画像上に「注釈」として重ねて表示できます。ビューア右側の「注釈」タブから、閲覧者が表示スタイルを切り替えられます。

  • — 認識した各行を矩形で囲みます。マウスを重ねる(タッチ端末はタップ)と、その行のテキストがポップアップ表示されます。
  • オーバーレイ — 認識したテキストを画像上の該当領域に直接描画します。縦長の領域は縦書き、横長の領域は横書きに自動で切り替わります。文字色・背景色・背景の不透明度を調整できます。

「表示 / 非表示」で注釈全体の表示を切り替えられます。閲覧者が選んだスタイルはブラウザのセッション内で記憶されます。

サイトの既定表示を決める

サイトごとに初期表示を settings.annotationDisplay として保存できます。閲覧者がまだ切り替えていない場合に、この既定が使われます。

bash
curl -X PATCH "$BASE/api/$ACCOUNT/databases/$DB" \
  -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
  -d '{"settings":{"annotationDisplay":{"default":"overlay","overlay":{"textColor":"#111111","backgroundColor":"#ffffff","backgroundOpacity":0.85}}}}'
  • defaultoff(非表示)/ boxes(枠)/ overlay(オーバーレイ)。省略時は off
  • overlay.textColor / overlay.backgroundColor#rrggbb 形式の色。
  • overlay.backgroundOpacity — 0〜1 の数値(背景の不透明度)。

認識したテキストを外部に開く(DTS)

OCR したテキストは、そのまま**テキスト API(DTS)**から取り出せるようにできます。 研究者が全文を機械的に取得したり、他のツールに読み込ませたりする入口です。

サイト設定の「DTS で本文を配信する」を入にしてください(API では settings.dtsText)。

bash
curl -X PATCH "$BASE/api/$ACCOUNT/databases/$DB" \
  -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
  -d '{"settings":{"dtsText":true}}'
  • 出るのはテキストを持つ公開資料だけです。非公開のサイト・非公開の資料は出ません。
  • 資料そのものに本文が無くても、コマに OCR があれば出ます。 資料の下にコマが ぶら下がる構成では、コマが取り出しの単位になります。
  • 取り出す単位は自動で決まります。OCR はコマ・ページ単位、音声・動画の文字起こしは 発話単位(再生位置つき)、手がかりが無い資料は全文がひとまとまりになります。
  • TEI として取り込んだサイトは、この設定を入れなくても既に DTS から取り出せます。

詳しくは相互運用(開発者向け)を参照してください。

注意点

  • 精度は資料に依存します。近代活字は良好ですが、劣化資料・複雑なレイアウト・くずし字では誤りが残ります。校正の下地として位置づけるのが実務的です。
  • 処理は重いです。数百〜数千ページは相応の時間がかかります(夜間バッチ等を想定)。
  • ライセンス:OCR モデル・コードはいずれも CC BY 4.0(出典:国立国会図書館)。生成物を公開する場合は出典を明記してください。

執筆中

ダッシュボードからワンクリックで OCR をかける UI は準備中です。現在は上記のバッチ実行が入口です。