⚠️ 重要な利用上の注意

本記事で紹介するシステムは、外部サーバーに負荷をかける可能性があります。利用時は十分ご注意ください。

  • サーバー負荷 : 並列リクエストは対象サーバーに負荷を与えます
  • DoS攻撃のリスク : 大量の同時アクセスはDoS攻撃と誤解される可能性があります
  • 推奨アプローチ : 事前に画像をローカルにダウンロードし、OCR処理のみを並列実行することを推奨します
  • 利用規約の確認 : 対象サーバーの利用規約を必ず確認し、必要に応じて事前許可を取得してください
  • 適切なレート制限 : 実運用では慎重な並列数設定(5-10並列程度)を強く推奨します
  • 責任ある利用 : サーバー管理者や他の利用者への配慮を忘れずに

本記事は技術的な実証実験の記録です。読者の皆様には責任を持った利用をお願いします。

はじめに

本記事では、国立国会図書館(NDL)が開発したNDL古典籍OCR Liteを活用し、Azure Container AppsでスケーラブルなOCR処理システムを構築した事例を紹介します。クラウドネイティブなアーキテクチャにより、従量課金とオートスケーリングを実現したシステムの設計と実装について解説します。

システム概要

アーキテクチャ

IIIFA(z0u-r3e0Cont)ainerAppsNDLOCRTEIXML

主要コンポーネント

  • OCRエンジン : NDL古典籍OCR Lite(日本古典籍特化)
  • インフラ : Azure Container Apps(サーバーレスコンテナ)
  • API設計 : REST API(画像URL → OCR結果)
  • 出力形式 : TEI P5準拠XML
  • スケーリング : 需要に応じた自動スケーリング

NDL古典籍OCR Liteの特徴

日本古典籍に最適化されたOCR

  • 縦書きレイアウト対応 : 古典籍特有の縦書き文書構造
  • 読み順序最適化 : 右から左、上から下の日本語読み順
  • 古典文字認識 : くずし字や変体仮名への対応
  • 軽量実装 : Docker化によりクラウドデプロイ対応

Azure Container Appsの選択理由

サーバーレスコンテナの利点

#scammcliaoenxo:RRleedppollwiinccPaaessr::io03d0:300###5::0

コスト最適化

  • 従量課金 : 使用した分のみ課金
  • 0レプリカ : アイドル時は完全にコスト0
  • 自動スケーリング : 需要に応じたリソース調整

システム実装

サーバーサイド実装

#fffaa@crrrppalFooopipalmmmisa==.sdsffsreklliFAoIfaamlpum+sspaitagi#rrkkls(egemeeN_eka(etaNstDir_(p'O(gDuuLmeo_p/CseLlrpsc_,aRe_tnOotrnp(luOCrx_adiRfrC=rRtsmo/e)lReieecis:osFmr_=mo=culpv_'aurlaoi)/grr_tsrcdeceskteo'eqe,c))urAis:evrpm/sieip'tcq,o).eura.eRtrpsegrtsOso,oC.cuRgejrSesscetsoer(_nv'siiiifcmnyeagglee__uirmla'g)e(image_url)

読み順序アルゴリズム

defs"ro"er"ttu_r-ljnliainpsneaoe[nr["et"bsebbedbo_(oxrlx"ei"]a"n][d"e[1i"s0]n,]g,_koery##d=elxyra(mlbidnaesl)i:ne:(

TEI XML出力

<<?T/xE<<<TmIt/f/t/Ele<ta<fe<tIxif/ecs/axb/e>vmHi<<fisu<scto<bxelelt/r/iHirzus>dd/otrnaei<te<<rlemforiyi<<dd>ssdDttisrn/eeaianfm>vpliyi=eelitpeaNnsDdlceaibbv>o"rsetlSsmDapeeeeclt>nh>cSletpeLmSsr>xleeynn=t>teSm>etc>xmr>>p=="tm>ttAr>m>mlxe""1ptm>uetl:==11.:>ttfO>:i""".0/<>o=Cid3t1"//m"Rd=7rf"wtah="2aaewittL"z7nccnwtetiso"ssoc.ldptunc=roteserelr"rde>T:f-ri#eiir/a1ypssn-a/c-=tupgcnge1"ir==.si-"2of""oct19na#Urrh"u2"czTgiu>l4>eoF/pbx"-n-nt.=1e8sic"c"-"/oo3e/1?1nm3r>->.<9t10n1=""rd"">el0cs-u.epll7r>ay9tb=9=/"""n1/hd1>il4gk1ho""t/e>nocr-lite">

処理結果事例

小規模テスト処理(桐壺)

  • 対象 : 東京大学所蔵「桐壺」
  • ページ数 : 32ページ
  • 処理時間 : 約30秒
  • 成功率 : 100%
  • 並列数 : 10並列
  • コスト : 約$0.05

パフォーマンス特性

===1$1/.502.200/1000

システムの技術的特徴

1. コールドスタート対応

async"f"od"refatetrxptycre:eomirpicpfetfettsau(asitwarHtr_ntawnTtaweiaTeiirmtiaPmstap_twEpehnttart_giairer"e>msto=e"(eyr=t"m0no,ra:=ccmyxirTa(_2o_ixir.rm_meseeratlqoegreuutei(eetr_eapsEiust(trertw(rsl+eaio:,mimr1pta)m)t_ga:teax-i_s_mur1eree))l:t)ries=3):

2. 設定の外部化

#ODDDCEEERFFF_AAAAUUUPLLLITTT____UMCORAOULXNT=_FPhCIUtODTtNE_pCNFsUCO:RER/R_M/ETAyNHToTR=u=Exr1Sm-0HloOcLrD-=s0e.r3vice.azurecontainerapps.io

3. Swagger UI統合

#apAiPI=vtddeieoArtscpslc=iier'(o=i/an'pdp=Ntop'Dic,1Los.n/0=''',OCRAPI'O,CRAPI',

デプロイメント

Azure Container Appsデプロイ

#azc----------onreitimmcmnaenmaniapetmsvargnxumaeoiggr--oiureeerr2rnorotsee.yeccnr-spp0rremepll4a--egoeii\Gpsgnirxccipertsttaarotesscvucr8rripoy0n03ecn.a0aertaltgaze-iu\nr\ceerrc-r\e.nivo/ocr-app:latest\

Docker化

#scammcliaoenxo:RRleedppollwiinccPaaessr::io03d0:300###5::0

0

運用とモニタリング

パフォーマンスメトリクス

  • レスポンス時間 : 平均2-3秒/画像
  • スループット : 10-15画像/秒(20レプリカ時)
  • 成功率 : 99%以上
  • コスト効率 : アイドル時$0、処理時のみ課金

ログ監視

#scammcliaoenxo:RRleedppollwiinccPaaessr::io03d0:300###5::0

1

今後の展望

技術的改善点

  • 画像キャッシュ : 重複処理の削減
  • バッチ処理 : 効率的な大量処理
  • GPU対応 : OCR処理の高速化
  • メトリクス強化 : 詳細な性能分析

応用可能性

  • デジタルアーカイブ : 図書館・博物館での活用
  • 研究支援 : 人文学研究のデジタル化
  • 教育分野 : 古典文献の教材化
  • 文化保存 : 貴重資料のデジタル保存

まとめ

NDL古典籍OCR LiteとAzure Container Appsを組み合わせることで、コスト効率とスケーラビリティを両立した古典籍OCRシステムを構築できました。サーバーレスアーキテクチャにより、従量課金と自動スケーリングを実現し、実用的なデジタルヒューマニティーズツールとして活用可能です。

キーポイント

  • コスト最適化 : 使用時のみ課金
  • 自動スケーリング : 需要に応じたリソース調整
  • TEI P5準拠 : 標準的なXML出力
  • 古典籍特化 : 日本古典籍に最適化されたOCR
  • API設計 : シンプルで拡張しやすい設計

本システムは技術実証として開発されました。実運用では対象サーバーへの負荷を十分考慮し、適切なレート制限と利用規約の遵守をお願いします。

参考資料