Azure OpenAI GPT-4 vs Document Intelligence: 日本語縦書きOCRの比較検証

概要 Microsoft Azureが提供する2つのOCRサービス(Azure OpenAI GPT-4 VisionとAzure Document Intelligence)を使用して、日本語の縦書き原稿用紙のOCR処理を実施し、その結果を詳細に比較検証しました。 検証対象画像 画像ソース : Canvaテンプレート(400字詰め原稿用紙) URL : https://www.canva.com/ja_jp/templates/EAFbqUoH7P8/ 画像の特徴 : 20×20の400字詰め原稿用紙 縦書きレイアウト 薄いグリッド線(マス目) タイトル欄と本文欄の区別 正解データ(Ground Truth) 原 佐 原 こ 稿 藤 稿 の の ち 用 テ タ あ 紙 キ イ き に ス ト 書 ト ル く を テ 使 キ 用 ス す ト る が 場 入 合 り は ま 、 す 日 。 本 作 語 文 の や 全 小 角 論 を 文 使 を う 作 こ っ と た で り マ 、 ス 小 に 説 あ を っ 書 た い 文 た 字 り を な 打 ど つ に こ ご と 活 が 用 で く き だ ま さ す い 。 。 手 書 き で 使 用 し た い 場 合 は 、 こ の テ キ ス ト を 削 除 し 、 印 刷 し て ご 使 用 く だ さ い 。 1. Azure OpenAI GPT-4.1 による認識結果 認識されたテキスト 原 佐 原 こ 稿 藤 稿 の の 用 テ タ ち 紙 キ イ あ に ス ト き 書 ト ル く を テ 使 キ 用 ス す ト る が 場 入 合 り は ま 、 す 日 。 本 作 語 文 の や 全 小 角 論 を 文 使 を う 作 こ っ と た で り マ 、 ス 小 に 説 あ を っ 書 た い 文 た 字 り を な 打 ど つ に こ ご と 活 が 用 で く き だ ま さ す い 。 。 手 書 き で 使 用 し た い 場 合 は 、 こ の テ キ ス ト を 削 除 し 、 印 刷 し て ご 使 用 く だ さ い 。 評価 GPT-4.1は縦書きの原稿用紙に対して以下の特徴を示しました: ...

2025年9月29日 · 3 分 · Nakamura

Azure Container AppsでNDL古典籍OCR Liteを用いたスケーラブルOCR処理システム

⚠️ 重要な利用上の注意 本記事で紹介するシステムは、外部サーバーに負荷をかける可能性があります。利用時は十分ご注意ください。 サーバー負荷 : 並列リクエストは対象サーバーに負荷を与えます 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 ...

2025年8月31日 · 12 分 · Nakamura

Cantaloupeでdelegate scriptを使ってAzure Storage上のファイルパスを動的に変換する方法

はじめに IIIFサーバーのCantaloupeでAzure Storageを使用している際、IIIF URLのidentifierと実際のAzure Storage上のファイルパスが異なる場合があります。本記事では、この問題をdelegate scriptを使って解決する方法を詳しく解説します。 課題 以下のようなファイル構造で画像を管理しているとします: A ├ │ │ │ │ │ │ │ z ─ u ─ r e i ├ │ │ │ │ └ m ─ ─ S a ─ ─ t g o e c ├ │ └ c └ r s ─ ─ o ─ a l ─ ─ l ─ g l l e e i └ i └ e c t ─ t ─ c C t e ─ e ─ t o i m m i n o 0 i 0 i o t n 0 t 0 t n a 1 1 e 2 e 2 i / / m / m / n 0 0 e 0 0 r 1 2 : _ _ 0 0 m 0 0 y 1 1 c . . o j j n p p t g g a i n e r しかし、IIIF URLでは以下のようにアクセスしたい: ...

2025年8月12日 · 14 分 · Nakamura

Azure Logic Appsを試す

概要 ノーコードまたはローコード開発の調査を目的として、Azure Logic Appsを試してみましたので備忘録です。 成果物 以下は、ロジックアプリデザイナーの画面です。HTTPリクエストを受信し、Cosmos DBにデータを保存し、成功時にメールを送信するワークフローを作成します。 Azure Cosmos DBの作成 「アカウント名」以外はデフォルトにしました。「my-first-azure-cosmos-db-account」という名前で作成しました。 「Items」コンテナを作成します。 「データエクスプローラ」を使って、データベース「ToDoList」の下に、コレクション「Items」が作成されていることを確認できます。 ロジック アプリの作成 ロジック アプリの作成を行います。 「my-first-logic-app」を作成しました。 「ロジックアプリデザイナー」に移動します。 HTTPリクエスト まず、「Request」を選びます。 そして、以下を入力します。今回は単純に「url」と「code」という項目を管理します。 { } " " } " ] t p , r y r e p o q e p " } " } u " " " e u , c i u c : r r o r r o t l d e l d " i " " e " d " e o e : t " t " , " b s y : y : j " { p p e : e { e [ c " " t { : : " , " " s s t t r r i i n n g g " " ...

2025年1月7日 · 2 分 · Nakamura

Azure OpenAI Assistants APIを用いたアプリをGradioとNext.jsで作成する

概要 Azure OpenAI Assistants APIを用いたアプリをGradioとNext.jsで作成したので、備忘録です。 対象データ Zennで公開している記事を対象にしました。まず以下により、一括ダウンロードしました。 i f i f p u w f m r m r a r h o p o p o g l i r o m o m e s l r r e u r d a i f p u t i r s h t o w t b t t = = r e a r f o a r e f e o t x s i s q 1 l s t t r g l x s u m t . t r 4 o d 1 [ : p a i l e t o p p l m h e s m ] = o c e b a u i _ s c o = a f q i n = l n r r r + n o . o n = = k o . u m i f s e ( e t l = p p n s h e p w e p m " e r s a a i s t a a t e B s t d e r s o p h e r k c . 1 q t t i e o m i n i t r o t = s = t l a d h h n = a u l r ( t s t r t p i e p m . u u p . s t e t p r o d c p ( = e e r t . g ( e ( B s e n a l i e u x e i f e o x t e t : q s t e n n r f i q f i t s t x a q / u e a s d l " s u u n _ . _ t u d / e . [ ) a ( s d t e l d t p o ) t m z s j ' r " ) a s s S ( e a p i e t s a = t h : t ( t o c x t a f n s o r = i t a t s u l t h t u n . n t c t / e . p a ( . h l . g ( i 0 l p t x g ( s ) d , S d e ) c : e s e t e r s i o e t l s : x _ t e _ r " u v ( e : / t ( s = n w p / u s / p u p " a " a r ' z { a r o z m ) p l ] e u t l n n e i ) n r h ) s c ( a / n l ) e " t s a . . : . ) e r d s t x f t e p e t : i v l x _ c " i t o l t , p e + ( a s ' " t ? a / h h u r ' t ) s t ) m , e i [ l r c - . e n l 1 p x a e ] a i m [ } r s e ' . s t = p t e _ n a x r o a t t " k k h " ) = a ' T m ] r u ) u r e a ) 1 9 6 & p a g e = { p a g e } " ベクトルストアへの登録 以下のようなコードにより、データファイルをアップロードします。 ...

2025年1月6日 · 12 分 · Nakamura

Cantaloupe: Microsoft Azure Blob Storageに格納した画像を配信する

概要 IIIFイメージサーバの一つであるCantaloupe Image Serverについて、Microsoft Azure Blob Storageに格納した画像を配信する方法の備忘録です。 以下のMicrosoft Azure Blob Storage版です。 方法 今回はDocker版を使用します。 以下のリポジトリをクローンしてください。 https://github.com/nakamura196/docker_cantaloupe 特に、.env.azure.exampleを.envにリネームして、環境変数を設定します。 # C C C # C L A A A A E F N N N F N T o T T T o T S r A A A r A _ L L L L E M O O O T O N i U U U r U C c P P P a P R r E E E e E Y o _ _ _ f _ P s A A A i H T o Z Z Z k O _ f U U U S E t R R R T M E E E = A A S S S I z T T T L u O O O = r R R R e A A A G G G B E E E l S S S o O O O b U U U R R R S C C C t E E E o _ _ _ r A A C a C C O g C C N e O O T U U A N N I T T N _ _ E N K R A E _ M Y N E = A = M E = 下の二つは、Traefikを用いたHTTPS化の設定も含めています。 ...

2024年12月23日 · 2 分 · Nakamura

Azureの仮想マシンを用いたNDLOCRのGradioアプリ構築

概要 以下の記事で、Azureの仮想マシンとNDLOCRを用いたGradioアプリについて紹介しました。 本記事では、このアプリの構築方法に関する備忘録です。 仮想マシンの構築 GPUを使用するにあたり、クォータの要求を行う必要がありました。 要求後、今回は「NC8as_T4_v3」を使用します。 Docker環境の構築 以下の記事を参考にします。 https://zenn.dev/koki_algebra/scraps/32ba86a3f867a4 Secure Boot の無効化 以下のように記載されています。 Secure Boot を無効化しないと NVIDIA Driver が正しくインストールされない. 実際、無効化しなかった場合、以下の画面が表示され、前に進めませんでした。 以下で、Secure Bootを無効化します。 NVIDIA Driver のインストール ubuntu-drivers コマンドのインストールを行い、インストール可能な NVIDIA Driver を確認する。 s s u u u b d d u o o n t a a u p p - t t d - r g i i e n v t s e t r u a s p l d l d a e t u v e b i u c n e t s u - d r i v e r s - c o m m o n 以下が結果です。 ...

2024年12月23日 · 15 分 · Nakamura

ndlocr_cli(NDLOCR(ver.2.1)アプリケーションを試すことができるGradioアプリを作成しました。

概要 ndlocr_cli(NDLOCR(ver.2.1)アプリケーションを試すことができるGradioアプリを作成しました。 以下のURLからお試しください。 https://ndlocr.aws.ldas.jp/ 補足 現在は1枚の画像アップロードのみに対応しています。今後、PDFのアップロード機能などのオプションも追加したいと思います。 Azureで使用可能なVMである「NC8as_T4_v3」に搭載されている「NVIDIA Tesla T4 GPU」を使用しています。 まとめ いつまでこの形で提供できるかはわかりませんが、ndlocr_cli(NDLOCR(ver.2.1)アプリケーションの精度の確認などにあたり、ご利用いただけますと幸いです。

2024年12月22日 · 1 分 · Nakamura

Azure OpenAIとLlamaIndexとGradioを用いたRAG型チャットの作成

概要 Azure OpenAIとLlamaIndexとGradioを用いたRAG型チャットの作成を試みたので、備忘録です。 Azure OpenAI Azure OpenAIを作成します。 その後、「エンドポイント:エンドポイントを表示するには、ここをクリックします」をクリックして、エンドポイントとキーを控えておきます。 その後、Azure OpenAI Serviceに移動します。 「モデルカタログ」に移動して、「gpt-4o」と「text-embedding-3-small」をデプロイします。 結果、以下のように表示されます。 テキストのダウンロード 今回は、青空文庫で公開されている源氏物語を対象とします。 https://www.aozora.gr.jp/index_pages/person52.html 以下により、一括ダウンロードします。 i f i u r s f m r m r e e o p o p l s l r o m o p e r r = o c s m f t b t n t e e o s " s i l m r r 4 o h e o e b e s t n c e m a f f q i t = s t r e o o o u m p i s m z r r e p s r = o b o s o : e n = e r m i a f o i r r s d t o w t r / q r r a e f o i p f e e o i x s i s t / u e i s _ t z l a s s u v t . t g e s n e i u a m o e t o p p p m h B e s p l n r d e a r n h s c # o o = = a f e n t o s e l a t o a a . o n n = k o . a j s n e c m s t a z _ m = p n p s s s d e p w u i . s l t e a d o u e a t a e e B o i d e r t . g e e i m = a r r f t i s . e u v i n i i d e [ c o b i t a l = " h n s = e a p . r ( t f l t " t n e [ n a _ d . u n u . g s o e u . ( s i [ r ] [ u i a a e e r c t f e ( p ( l i u e o " s m " r n o t x e o i i t o a t S t r l n m : e l l z a i q d f n _ s t x o c l e s e m a s a o / s u i u d t . h t u . ) c : m b b o r t t e n l ( e p , ) p u . t b e e = z a e s s g S " x a - j i e r l o _ x ( t o d t t " t s o r [ " m r u t o s = u i ( h w o o n s " ] e a r / p . p v ) . " k n s " m t _ l { a g r ( " . d ) y ( " ] e = a u . f t e e r , s i o ) ] t = d r s i h t s e t r a . a a l p l ) ( p s c r n s a d " t s l e : a o p l i a c a a a : i n o n o a p m f . t o [ t a z s n s ( e : j a z " ( m o e s s ) ( p " o v " e r . e _ o / ] r a / } a a . = p d : a l " . _ p t " a a " u ) t u p e m t t : e [ x r a x a h a " - t l r t i ) / ] 1 " ) e , n , i . ] n _ n s . t " t e f p s _ h e x o l p e t x i . i l n m t s j t i c l " t s ( t o . ) _ o " ( d p o n , " i a k " . n r = " " g s T ) ) e r [ r u 0 " e ] ) ) Indexの作成 環境変数を用意します。 ...

2024年12月16日 · 15 分 · Nakamura