⚠️ 重要な利用上の注意 本記事で紹介するシステムは、外部サーバーに負荷をかける可能性があります。利用時は十分ご注意ください。
サーバー負荷 : 並列リクエストは対象サーバーに負荷を与えます DoS攻撃のリスク : 大量の同時アクセスはDoS攻撃と誤解される可能性があります 推奨アプローチ : 事前に画像をローカルにダウンロードし、OCR処理のみを並列実行することを推奨します 利用規約の確認 : 対象サーバーの利用規約を必ず確認し、必要に応じて事前許可を取得してください 適切なレート制限 : 実運用では慎重な並列数設定(5-10並列程度)を強く推奨します 責任ある利用 : サーバー管理者や他の利用者への配慮を忘れずに 本記事は技術的な実証実験の記録です。読者の皆様には責任を持った利用をお願いします。
はじめに 本記事では、国立国会図書館(NDL)が開発したNDL古典籍OCR Liteを活用し、Azure Container AppsでスケーラブルなOCR処理システムを構築した事例を紹介します。クラウドネイティブなアーキテクチャにより、従量課金とオートスケーリングを実現したシステムの設計と実装について解説します。
システム概要 アーキテクチャ I I I F 画 像 → A オ ( z ー 0 u ト - r ス 3 e ケ 0 ↓ ー レ C リ プ o ン リ n グ カ t ) a i n e r A p p s → N D L 古 典 籍 O C R → T E I X M L 出 力 主要コンポーネント OCRエンジン : NDL古典籍OCR Lite(日本古典籍特化) インフラ : Azure Container Apps(サーバーレスコンテナ) API設計 : REST API(画像URL → OCR結果) 出力形式 : TEI P5準拠XML スケーリング : 需要に応じた自動スケーリング NDL古典籍OCR Liteの特徴 日本古典籍に最適化されたOCR 縦書きレイアウト対応 : 古典籍特有の縦書き文書構造 読み順序最適化 : 右から左、上から下の日本語読み順 古典文字認識 : くずし字や変体仮名への対応 軽量実装 : Docker化によりクラウドデプロイ対応 Azure Container Appsの選択理由 サーバーレスコンテナの利点 # s c ス a m m c ケ l i a o ー e n x o リ : R R l ン e e d グ p p o 設 l l w 定 i i n 例 c c P a a e s s r : : i o 0 3 d 0 : 3 0 0 # # # ア 需 5 イ 要 分 ド 時 で ル : ス 時 ケ : 自 ー 動 ル コ 拡 ダ ス 張 ウ ト ン 0 コスト最適化 従量課金 : 使用した分のみ課金 0レプリカ : アイドル時は完全にコスト0 自動スケーリング : 需要に応じたリソース調整 システム実装 サーバーサイド実装 # f f f a a @ c r r r p p a l F o o o p i p a l m m m i s a = = . s d s f f s r e k l l i F A o I f a a m l p u m + s s p a i t a g i # r r k k l s ( e g e m e e N _ e k a ( e t a N s t D i r _ ( p ' O ( g D u u L m e o _ p / C s e L l r p s c _ , a R e _ t n O o t r n p ( l u O C r x _ a d i R f r C = r R t s m o / e ) l R e 統 i e e c i s : で o s 合 F m r _ = m o = 画 c u l p v _ ' a u 像 r l a o i ) / g r r 処 _ t s r c d e c e 理 s k t e o ' e q e , c ) ) u r A i s : e v r p m / s i e i p ' t c q , o ) . e u r a . e R t r p s e g r t s O s o , o C . c u R g e j r S e s s c e t s o e r ( _ n v ' s i i i i f c m n y e a g g l e e _ _ u i r m l a ' g ) e ( i m a g e _ u r l ) 読み順序アルゴリズム d e f s " r o " e r " t t 日 u _ 本 r - l j 古 n l i a 典 i n p 籍 s n e a の o e [ n 読 r [ " e み t " b s 順 e b b e 序 d b o _ ソ ( o x r ー l x " e ト i " ] a " n ] [ d " e [ 1 i " s 0 ] n , ] g , _ k o e r y # # d = e l x y r a 座 座 ( m 標 標 l b 降 昇 i d 順 順 n a ( ( e 右 上 s l → → ) i 左 下 : n ) ) e : ( TEI XML出力 < < ? T / x E < < < T m I t / f / t / E l e < t a < f e < t I x i f / e c s / a x b / e > v m H i < < f i s u < s c t o < b x e l e l t / r / i H i r z u s > d d / o t r n a e i < t e < < r l e m f o r i y i < < い d d > s s d D t t i s r n / e e a i a n f m > v p l づ i y i = e e l i t p e a N n s D d l c e a i b b れ v > o " r s e t l S s m D a p e e e e c l t の > n h > c S l e t p e L m S s r > x l e e y n n 御 = t > t e S m > 古 e t c > x m r > > p = = 時 " t m > t t A r 典 > m > m l x e " " に 1 p t 桐 m > u e 籍 t l : = = 1 1 か . : > 壺 t t f O > : i " " " . 0 / < > o = C i d 3 t 1 " / / m " R d = 7 r f " w t a h = " 2 a a e w i t t L " z 7 n c c n w t e t i s o " s s o c . l d p t u n c = r o t e s e r e l r " r d e > T : f - r i # e i i r / a 1 y p s s n - a / c - = t u p g c n g e 1 " i r = = . s i - " 2 o f " " o c t 1 9 n a # U r r h " u 2 " c z T g i u > l 4 > e o F / p b x " - n - n t . = 1 e 8 s i c " c " - " / o o 3 e / 1 ? 1 n m 3 r > - > . < 9 t 1 0 n 1 = " " r d " " > e l 0 c s - u . e p l l 7 r > a y 9 t b = 9 = / " " " n 1 / h d 1 > i l 4 g k 1 h o " " t / e > n o c r - l i t e " > 処理結果事例 小規模テスト処理(桐壺) 対象 : 東京大学所蔵「桐壺」 ページ数 : 32ページ 処理時間 : 約30秒 成功率 : 100% 並列数 : 10並列 コスト : 約$0.05 パフォーマンス特性 処 コ ス 理 ス ケ 時 ト ー 間 効 リ 率 ン = グ = 約 = 1 $ 秒 1 数 / . 秒 ペ 5 で ー 〜 0 ジ 2 → ( . 2 並 0 0 列 / レ 処 1 プ 理 0 リ 時 0 カ ) 0 ペ ー ジ システムの技術的特徴 1. コールドスタート対応 a s y n c " f " o d " r e コ f ー a t e ル t r x p ド t y c r ス e : e o タ m i r p i c ー p f e t f e ト t t s 時 a u ( a s の i t w a r H t r _ 自 n t a w n T t a w 動 e i a T e i i リ r m t i a P m s t ト a p _ t w E p e h ラ n t t a r t _ イ g i a i r e r " e > m s t o = e " ( e y r = t " m 0 n o , r a : = c c m y x i r T a ( _ 2 o _ i x i r . r m _ m e s e e r a t l q o e g r e u u t e i ( e e t r _ e a p s E i u s t ( t r e r t w ( r s l + e a i o : , m i m r 1 p t a ) m ) t _ g a : t e a x - i _ s _ m u r 1 e r e e ) ) l : t ) r i e s = 3 ) : 2. 設定の外部化 # O D D D C E E E 環 R F F F 境 _ A A A 変 A U U U 数 P L L L に I T T T よ _ _ _ _ る U M C O 設 R A O U 定 L X N T = _ F P h C I U t O D T t N E _ p C N F s U C O : R E R / R _ M / E T A y N H T o T R = u = E x r 1 S m - 0 H l o O c L r D - = s 0 e . r 3 v i c e . a z u r e c o n t a i n e r a p p s . i o 3. Swagger UI統合 # a p A i P I = v t d d 仕 e i e o 様 A r t s c の p s l c = 自 i i e r ' 動 ( o = i / 生 a n ' p d 成 p = N t o p ' D i c , 1 L o s . 古 n / 0 典 = ' ' 籍 ' , O 日 C 本 R 古 典 A 籍 P 専 I 用 ' O , C R 処 理 A P I ' , デプロイメント Azure Container Appsデプロイ # a z コ ン c - - - - - - - - - - テ o n r e i t i m m c m ナ n a e n m a n i a p e ア t m s v a r g n x u m プ a e o i g g r - - o リ i u r e e e r r 2 r 作 n o r o t s e e . y 成 e c c n r - s p p 0 r r e m e p l l 4 a - - e g o e i i \ G p s g n i r x c c i p e r t s t t a a r o t e s s c v u c r 8 r r i p o y 0 n 0 3 e c n . a 0 a e r t a l t g a z e - i u \ n r \ c e e r r c - r \ e . n i v o / o c r - a p p : l a t e s t \ Docker化 # s c ス a m m c ケ l i a o ー e n x o リ : R R l ン e e d グ p p o 設 l l w 定 i i n 例 c c P a a e s s r : : i o 0 3 d 0 : 3 0 0 # # # ア 需 5 イ 要 分 ド 時 で ル : ス 時 ケ : 自 ー 動 ル コ 拡 ダ ス 張 ウ ト ン 0 0
...