NDL古典籍OCR-Liteを用いて、IIIFマニフェストファイルからTEI/XMLファイルを作成する

概要 NDL古典籍OCR-Liteを用いて、IIIFマニフェストファイルからTEI/XMLファイルを作成するGradioアプリの紹介です。 以下のURLからアクセスできます。 https://nakamura196-ndlkotenocr-lite-iiif.hf.space/ 背景 以下の記事の続きです。 これまでは、2つのアプリを使用する必要がありましたが、今回の改修により、単独のGradioアプリで変換作業が完結するようにしました。 また画像のコマ数が多いマニフェストファイルを処理する場合、進捗がわかりにくいことや、処理結果をコピーできない、といった不具合があったので、これらを修正しています。 画面の例 以下のように、「ページ 111/129 を処理中… - 79.7%」といった進捗を表示するように修正しました。 実装にあたっては、Progressを使用しています。 https://www.gradio.app/docs/gradio/progress またOCR完了後は、TEI/XMLファイルをダウンロードするためのリンクが表示されるようにしました。 まとめ Hugging Faceの無料で利用可能なCPUの制約上、OCRに時間がかかることがありますが、参考になりましたら幸いです。

2025年6月12日 · 1 分 · Nakamura

NDL古典籍OCR-Liteを用いたアノテーション付きIIIFマニフェストファイルとTEI/XMLファイルの作成

お知らせ 本記事で紹介する流れをわかりやすくした記事を作成しました。以下も参考にしてください。 概要 NDL古典籍OCR-Liteを用いたアノテーション付きIIIFマニフェストファイルとTEI/XMLファイルの作成を行うツールを試作したので紹介します。 アノテーション付きIIIFマニフェストファイルの作成 まず、NDL古典籍OCR-Liteを用いて、IIIFマニフェストファイルを入力として、アノテーション付きIIIFマニフェストファイルを出力するGradioアプリを作成しました。Hugging FaceのSpaceを用いて公開しています。 https://nakamura196-ndlkotenocr-lite-iiif.hf.space/ 出力結果として、以下のようなアノテーション付きIIIFマニフェストファイルが得られます。 { } " " " " } " ] @ i t l , i c d y a " ] t { } { } o " p b n e , n : e e o " m " " " " " } " ] " ] " " " " " } " ] " ] t " l n 校 s i t w h l , i , a i t w h l , i , a e " : " e 異 " d y i e a " ] t { } n { } d y i e a " ] t { } n { } x h : " 源 : " p d i b n e n " p d i b n e n t t " : 氏 : e t g e o " m " " " ] o " " " ] : e t g e o " m " " " ] o " " " " t M { 物 [ " h h l n 1 s i t i t i t i " h h l n 2 s i t i t i t i : p a [ 語 " : " t " e " " d y t { } a d y t { } { } { } { } { } { } { } " : " t " e " " d y t { } a d y t s n . h : " : " : " p e t " p e , , , , , , h : " : " : " p e t " p e " : i t " : : : e m " " " " " } i : e m " " " " " } " " " " " } " " " " " } " " " " " } " " " " " } " " " " " } " " " " " } t " : : : e m " " " " " } i : e m h / f 巻 t C 6 { [ " s i t m t b o " s i t m t b i t m t b i t m t b i t m t b i t m t b i t m t b i t m t b t C 6 { [ " s i t m t b o " s t / e 一 p a 8 4 [ " : " d y o a o " " " " " " ] n " : " d y o a o " " d y o a o " " d y o a o " " d y o a o " " d y o a o " " d y o a o " " d y o a o " " p a 8 4 [ " : " d y o a o " " " " " " ] n " : " t d s " s n 9 7 h : " p t r d i t f w h s s h : " p t r d t v " p t r d t v " p t r d t v " p t r d t v " p t r d t v " p t r d t v " p t r d t v s n 9 7 h : " p t r d i t f w h s s h : p l t : 0 0 t " : e i g y d y o i e e { } " t " : e i g y y a : e i g y y a : e i g y y a : e i g y y a : e i g y y a : e i g y y a : e i g y y a : 0 0 t " : e i g y d y o i e e { } " t " : . " / a , 6 t A [ " v e " " p r d i r : t A [ " v e " p l " v e " p l " v e " p l " v e " p l " v e " p l " v e " p l " v e " p l / a , 6 t A [ " v e " " p r d i r : t A [ n , / s , p n " : a t : : e m t g v " " " p n " : a t : e u " : a t : e u " : a t : e u " : a t : e u " : a t : e u " : a t : e u " : a t : e u / s , p n " : a t : : e m t g v " " " p n ] / d d " s n h t " " a h h i i t p [ s n h t " " e h t " " e h t " " e h t " " e h t " " e h t " " e h t " " e d " s n h t " " a h h i i t p [ s n i l l , : t " i : { " : t " t c d y r : t " i : { : " t " i : { : " t " i : { : " t " i : { : " t " i : { : " t " i : { : " t " i : { : " l , : t " i : { " : t " t c d y r : i . . t t A o h " : " e " p o t t A o : t A o : t A o : t A o : t A o : t A o : t A o : . t t A o h " : " e " p o t i g n / a p n n " t " : : " : e f / a p n n " " p n n " " p n n " " p n n " " p n n " " p n n " " p n n " " n / a p n n " t " : : " : e f / a f o d d t s n " h t I 6 : " i d t s n " h T " s n " h T " s n " h T " s n " h T " s n " h T " s n " h T " s n " h T " d d t s n " h t I 6 : " i d t . . l l i : : t p m " 8 4 " : l l i : : t e 一 : : t e ○ : : t e 一 : : t e ス : : t e □ : : t e 〇 : : t e 同 l l i : : t p m " 8 4 " : l l i i j . . o t t s a i 9 7 [ h e . o t t x ・ t t x 〇 t t x 一 t t x 〇 t t x 琉 t t x 〇 t t x 校 . . o t t s a i 9 7 [ h e . o o p g n n / a " p : g m 0 0 t " " n n / a " p t 〇 / a " p t " / a " p t " / a " p t 〇 / a " p t 球 / a " p t 〇 / a " p t 異 g n n / a " p : g m 0 0 t " " n n / / o d P d t s s / e a , 6 t I : d P d t c s u ・ d t c s u d t c s u d t c s u 〇 d t c s u □ d t c s u 〇 d t c s u 源 o d P d t s s / e a , 6 t I : d P a a . l a l i c : / " g , p m l a l i o : a ・ l i o : a l i o : a l i o : a 六 l i o : a □ l i o : a 〇 l i o : a 氏 . l a l i c : / " g , p m l a p p j . g . o : / d , e s a " . g . o m / l ・ . o m / l . o m / l . o m / l 〇 . o m / l □ . o m / l 〇 . o m / l 物 j . g . o : / d , e s a " . g i i p g e n n p / l / : g l g e n n m / B ・ n n m / B n n m / B n n m / B 〇 n n m / B □ n n m / B 〇 n n m / B 巻 p g e n n p / l / : g l g e / / / o " d " a d . j / e e o " d " e d o ・ d " e d o d " e d o d " e d o 〇 d " e d o □ d " e d o 〇 d " e d o 一 / o " d " a d . j / e e o " p i a . , l , i l n p / S v . , l , n l d ・ l , n l d l , n l d l , n l d 一 l , n l d □ l , n l d 〇 l , n l d " a . , l , i l n p / S v . , r i p j . n . d e d e e j . t . y 一 . t . y . t . y . t . y 〇 . t . y □ . t . y 〇 . t . y p j . n . d e d e e j e i i p g t n l g l r l p g i n " 一 g i n " g i n " g i n " 〇 g i n " □ g i n " 〇 g i n " i p g t n l g l r l p s f / / o i d . " . v 2 / o n d , 一 o n d , o n d , o n d , 〇 o n d , □ o n d , 〇 o n d , / / o i d . " . v 2 / e / i a . n l g , n i " a . g l 一 . g l . g l . g l 〇 . g l □ . g l 〇 . g l i a . n l g , n i " a n 3 i p j g . o d c p j " . ・ j " . j " . j " . 〇 j " . □ j " . 〇 j " . i p j g . o d c p t 4 i i p " g . l e i p , g ・ p , g p , g p , g 〇 p , g □ p , g 〇 p , g i i p " g . l e i a 3 f / / , o j . 2 / / o ・ / o / o / o 〇 / o □ / o 〇 / o f / / , o j . 2 / t 7 / i a . p g " i a . ・ a . a . a . 一 a . □ a . 〇 a . / i a . p g " i i 6 3 i p j / o , i p j ・ p j p j p j 一 p j □ p j 〇 p j 3 i p j / o , i o 8 4 i i p a . i i p ・ i p i p i p 一 i p □ i p 〇 i p 4 i i p a . i n 6 3 f / / p j f / / ・ / / / / / / 〇 / / □ / / 〇 / / 3 f / / p j f / / 7 / i a i p / i a ・ i a i a i a 〇 i a " i a 〇 i a 7 / i a i p / 3 m 6 3 i p / / 3 i p ・ i p i p i p 〇 i p i p 〇 i p 6 3 i p / / 3 / a 8 4 i i i a 4 i i ・ i i i i i i 一 i i i i 〇 i i 8 4 i i i a 4 c n 6 3 f / i p 3 f / ・ f / f / f / 一 f / f / 〇 f / 6 3 f / i p 3 o i / 7 / i i i 7 / i ・ / i / i / i 一 / i / i 〇 / i / 7 / i i i 7 n f c 6 3 i f / 6 3 i ・ 3 i 3 i 3 i 一 3 i 3 i 一 3 i c 6 3 i f / 6 t e a 8 4 i / i 8 4 i ・ 4 i 4 i 4 i 〇 4 i 4 i 〇 4 i a 8 4 i / i 8 e s n 6 3 f 3 i 6 3 f ・ 3 f 3 f 3 f 〇 3 f 3 f 〇 3 f n 6 3 f 3 i 6 x t v / 7 / 4 i / 7 / ・ 7 / 7 / 7 / 〇 7 / 7 / 一 7 / v / 7 / 4 i / t . a c 6 3 3 f c 6 3 ・ 6 3 6 3 6 3 〇 6 3 6 3 〇 6 3 a c 6 3 3 f c . j s a 8 4 7 / a 8 4 ・ 8 4 8 4 8 4 〇 8 4 8 4 〇 8 4 s a 8 4 7 / a j s / n 6 3 6 3 n 6 3 ・ 6 3 6 3 6 3 〇 6 3 6 3 〇 6 3 / n 6 3 6 3 n s o 1 v / 7 8 4 v / 7 ・ / 7 / 7 / 7 〇 / 7 / 7 " / 7 2 v / 7 8 4 v o n " a c 6 6 3 a c 6 ・ c 6 c 6 c 6 〇 c 6 c 6 c 6 " a c 6 6 3 a n " , s a 8 / 7 s a 8 ・ a 8 a 8 a 8 〇 a 8 a 8 a 8 , s a 8 / 7 s " , / n 6 R 6 / n 6 ・ n 6 n 6 n 6 〇 n 6 n 6 n 6 / n 6 R 6 / , 1 v / 0 8 1 v / ・ v / v / v / 一 v / v / v / 2 v / 0 8 2 / a c 0 6 / a c ・ a c a c a c 一 a c a c a c / a c 0 6 / p s a 0 / a s a ・ s a s a s a ・ s a s a s a p s a 0 / a a / n 0 R n / n ・ / n / n / n 〇 / n / n / n a / n 0 R n g 1 v 0 0 n 1 v ・ 1 v 1 v 1 v 〇 1 v 1 v 1 v g 2 v 0 0 n e / a 0 0 o / a ・ / a / a / a ・ / a / a / a e / a 0 0 o " p s 1 0 s a s ・ a s a s a s ・ a s a s a s " p s 2 0 s , a / / 0 " n / ・ n / n / n / ・ n / n / n / , a / / 0 " g 1 f 0 , n 1 ・ n 1 n 1 n 1 ・ n 1 n 1 n 1 g 2 f 0 , e " u 0 o # ・ o # o # o # ・ o # o # o # e " u 0 / , l 1 s x ・ s x s x s x ・ s x s x s x / , l 2 i l " / y ・ / y / y / y ・ / y / y / y i l " m / , 0 w ・ 1 w 2 w 3 w の 4 w 5 w 6 w m / , a f " h ・ " h " h " h 〇 " h " h " h a f g u , = ・ , = , = , = 〇 , = , = , = g u e l 5 ・ 5 5 4 ・ 4 4 6 e l a l 2 ・ 2 0 3 ・ 3 2 9 a l n / 7 ・ 9 9 7 ・ 7 8 4 n / n 0 0 ・ 3 2 5 ・ 5 3 , n 0 o / , ・ , , , 一 , , 4 o / " d 2 ・ 2 3 3 ・ 2 2 9 " d , e 7 ・ 0 2 0 ・ 8 7 9 , e f 5 ・ 0 7 4 ・ 5 5 , f a , ・ 9 2 , " 3 6 3 a u 1 ・ , , 1 , , 1 u l 1 ・ 2 6 0 4 6 0 l t 4 ・ 1 3 3 5 3 , t . , ・ 8 , , , , 2 . j 9 ・ , 8 1 5 2 9 j p 3 ・ 4 0 4 2 5 9 p g 5 ・ 2 " 7 2 2 1 g " " ・ 4 , 5 " " " " , , ・ " " , , , , ・ , , " TEI/XMLファイルの作成 上記で得られたアノテーション付きIIIFマニフェストファイルを入力として、TEI/XMLファイルを作成するライブラリを作成しました。 ...

2025年5月27日 · 42 分 · Nakamura

校異源氏物語に対する類似テキスト検索アプリを作成しました。

概要 校異源氏物語に対する類似テキスト検索アプリを作成しました。以下のURLからお試しいただけます。 https://huggingface.co/spaces/nakamura196/genji_predict 本アプリの使用方法などについて紹介します。 データ 以下の校異源氏物語DBで公開されているテキストデータを使用します。 https://kouigenjimonogatari.github.io/ アプリの内容 仕組みは単純で、校異源氏物語の巻毎・ページ毎のテキストを用意しておき、入力された文字列との編集距離を算出し、類似度が高いテキスト(+巻とページ)を返却します。 ソースコードは以下です。 https://huggingface.co/spaces/nakamura196/genji_predict/tree/main 応用例 例えば、以下の「[源氏物語] [4](東京大学総合図書館所蔵)」では、1つのIIIFマニフェスト内に複数の巻が含まれており、何コマ目から何コマ目までが何巻に属するのか、素人には判断が難しい場合があります。 https://da.dl.itc.u-tokyo.ac.jp/portal/assets/b90bbddc-509d-7c12-0fb9-af409a90a487 そこで、上記に資料に対してコマ毎のOCRテキストを取得し、今回作成したアプリに問い合わせることで、ページ毎に推定される巻数が提示され、巻の変わり目を知る手助けを行うことができます。 OCR OCRにあたっては、NDL古典籍OCR-Liteを使用します。 https://github.com/ndl-lab/ndlkotenocr-lite OCR結果を修正して、以下のようなTEI/XMLを作成しました。 < < < < ? ? ? T x x x E < < m m m I t / t l l l e < t e < - - x i f / e x b v m m m H i < < < f i t o < < < e o o l e l t / p / s / i H > d a / a / a r d d n a e i < t u < < p o < s l e y b < < < < < < < < a b < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < a b < < < < < < < < < < < < s e e s d D t t i b p d u u b / o e a > l s l s l s l s b l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s b l s l s l s l s l s l s i l l = e e l i t l u a b r i < b u D d n b e b e b e b e > n b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e > n b e b e b e b e b e b e o " r s e t l i b t l c b p i r e e = / g / g / g / g = / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g = / g / g / g / g / g / g n h h h > c S l e c l e i e l t b c s r " > > > > " > > > > > > > > > > > > > > > > > > > " > > > > > > = r r t > t e S a i > c D > r l e c > 1 t t t t 2 t t t t t t t t t t t t t t t t t t t 3 t t t t t t " e e t m > t t s 2 a e > D > " y y y y " y y y y y y y y y y y y y y y y y y y " y y y y y y 1 f f p t O m i h 0 t s t e p p p p p p p p p p p p p p p p p p p p p p p p p p p p p . = = : > C t o e 2 i c a s t e e e e t e e e e e e e e e e e e e e e e e e e t e e e e e e 0 " " / R > n r 5 o > r c y = = = = y = = = = = = = = = = = = = = = = = = = y = = = = = = " h h / 結 S > - n g > p " " " " p " " " " " " " " " " " " " " " " " " " p " " " " " " t t w 果 t N 0 S e e 本 本 本 本 e 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 e 本 本 本 本 本 本 e t t w : m D 1 t t = 文 文 文 文 = 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 = 文 文 文 文 文 文 n p p w t L - m = " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " c : : . h > 古 2 t " p p p o / t t 典 9 > h a n n n n a n n n n n n n n n n n n n n n n n n n a n n n n n n d / e t 籍 < t g = = = = g = = = = = = = = = = = = = = = = = = = g = = = = = = i w w i p O / t e " " " " e " " " " " " " " " " " " " " " " " " " e " " " " " " n w w - s C d p " 1 3 4 5 " 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 " 1 2 3 4 5 6 g w w c : R a s " " " " " " " " " " " " " 0 1 2 3 4 5 6 7 8 9 " " " " " " = . . . / - t : f f " " " " " " " " " " f " t t o / L e / a c c c c a c c c c c c c c c a c c c c c c U e e r i i > / c o o o o c o o o o o o o o o c c c c c c c c c c c o o o o o o T i i g i t i s r r r r s r r r r r r r r r o o o o o o o o o o s r r r r r r F - - / i e i = r r r r = r r r r r r r r r r r r r r r r r r r = r r r r r r - c c n f < i " e e e e " e e e e e e e e e r r r r r r r r r r " e e e e e e 8 . . s . / f h s s s s h s s s s s s s s s e e e e e e e e e e h s s s s s s " o o / d p . t p p p p t p p p p p p p p p s s s s s s s s s s t p p p p p p ? r r 1 l u d t = = = = t = = = = = = = = = p p p p p p p p p p t = = = = = = > g g . . b l p " " " " p " " " " " " " " " = = = = = = = = = = p " " " " " " / 0 i l . s # # # # s # # # # # # # # # " " " " " " " " " " s # # # # # # r r " t i i : z z z z : z z z z z z z z z # # # # # # # # # # : z z z z z z e e > c s t / o o o o / o o o o o o o o o z z z z z z z z z z / o o o o o o l l . h c / n n n n / n n n n n n n n n o o o o o o o o o o / n n n n n n e e u e . i e e e e i e e e e e e e e e n n n n n n n n n n i e e e e e e a a - r u i - - - - i - - - - - - - - - e e e e e e e e e e i - - - - - - s s t > - i 1 1 1 1 i 2 2 2 2 2 2 2 2 2 - - - - - - - - - - i 3 3 3 3 3 3 e e o t f - - - - f - - - - - - - - - 2 2 2 2 2 2 2 2 2 2 f - - - - - - / / k o . 1 3 4 5 . 1 2 3 4 5 6 7 8 9 - - - - - - - - - - . 1 2 3 4 5 6 x x y k d " " " " d " " " " " " " " " 1 1 1 1 1 1 1 1 1 1 d " " " " " " m m o y l > > > > l > > > > > > > > > 0 1 2 3 4 5 6 7 8 9 l > > > > > > l l . o . 国 紅 は あ . O □ 源 / あ ろ か が を " " " " " " " " " " . ろ 上 詠 ち か ひ / / a . i 外 葉 な ふ i O □ 氏 朱 ま か た り あ > > > > > > > > > > i く 達 は と ほ か t t c a t < の の ひ t O □ 十 雀 り る 〴 給 か 前 青 火 と み に お し 詠 一 t 哀 部 て り の る e e . c c / か え < c < □ 七 院 な べ 〵 。 ず に 海 と な や さ も ぶ な 後 c な み ゝ た 色 と i i j . . s < ん / . / □ 才 の り き 物 う お て 波 の る ま し し み ど 順 . る こ 初 る あ 見 / / p j u e / < s u s □ ノ 行 。 た 見 へ ぼ せ を ゝ を ば た ろ お し 伽 u に た う が ひ え c c / p - g s / e - e □ 十 幸 よ び 給 も さ さ ぞ 頭 。 な る き も 給 の - 。 ち ち く ま 給 u u r / t > e s g t g □ 月 ば の の は な る せ ま 中 立 り に ほ ゝ へ こ t み も な の さ 。 s s e r o g e > o > < よ 。 つ こ ぬ つ れ 給 ひ 将 な 。 。 ど ち る ゑ o か み を に り 春 t t p e k > g k / り 神 ね と こ ぼ ば ふ 給 が ら 入 が に 。 は な k と な し ぎ て 宮 o o o p y > y s 四 無 な 成 と の 。 。 け た び が く 。 よ こ ら y 泪 な 給 は つ の m m / o o o e 年 月 ら け を 。 誠 源 る ち て た の お に れ ん o お き へ ゝ ね 女 / / i / . . g の の ず れ 口 み 楽 氏 。 よ は の こ な 見 や と . と 給 る し よ 御 s s i i a a > 十 十 。 ば お 給 を の か う 。 日 ゑ じ え 仏 聞 a し ぬ に き り 。 c c i i c c 月 日 お 。 し は 御 中 た い 花 か ま ま ぬ の ゆ c 給 < ま に も か h h f i . . 迄 < も 御 < ざ < 将 て 人 の げ さ ひ さ 御 。 . 。 / < < < く e e / f j j 有 / し < / ら / は に に か さ り の ま 迦 お j < s / / / < m m b / p p < s < / s ん s 。 は こ た や 。 あ な < も p / e s s s / a a 9 b / / / e / s e < e < 。 < は か 物 < り / し / s g e e e s / / 0 9 i i s g s e g / g / < / ら < の / 。 s < i e > g g g e r r b 0 i i e > e g > s > s / s の / < s < e / i g > > > g e e b b i i g g > e e s e < s / e / g s i > > l l d b f f > > g g e g / e s g s > e f a a d d / / > > g > s g e > e g / x x c d s s > e > g g > s n n - c o o g > > o g g 5 - t t > t / / 0 5 o o o t t 9 0 _ _ _ e e d 9 o o o i i - d g g g _ _ 7 - a a a a a c 7 i i i l l 1 c _ _ _ l l 2 1 2 2 2 . . - 2 0 0 0 r r 0 - 2 2 2 n n f 0 3 3 3 g g b f 1 1 1 " " 9 b 0 0 0 - 9 / / / t t a - A A A y y f a 0 0 0 p p 4 f 5 5 5 e e 0 4 _ _ _ = = 9 0 4 4 4 " " a 9 / / / a a 9 a 0 0 0 p p 0 9 0 0 0 p p a 0 4 4 4 l l 4 a / / / i i 8 4 A A A c c 7 8 0 0 0 a a / 7 5 5 5 t t m / _ _ _ i i a m 4 4 4 o o n a _ _ _ n n i n 0 0 0 / / f i 0 0 0 x x e f 4 4 4 m m s e _ _ _ l l t s 0 0 0 " " < t 0 0 0 / " 0 0 0 s s t / 1 2 3 c c i > . . . h h t t t t e e l i i i m m e f f f a a > / / / t t f f f y y u u u p p l l l e e l l l n n / / / s s f f f = = u u u " " l l l h h l l l t t / / / t t 0 0 0 p p / / / : : d d d / e e e / f f f r p a a a e u u u u l r l l l a l t t t x . . . . n o j j j g c p p p . l g g g o c " " " r . > > > g r n g s d s s t d r l u / c s t c u h r e e m / a 1 t . r 0 o " n ? " > ? > 推定 上記のXMLファイルを入力として、先に紹介したGradioアプリのAPIを利用します。 ...

2025年1月29日 · 25 分 · 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

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

NDL古典籍OCR-Liteを用いたGradio Appを作成しました。

概要 NDL古典籍OCR-Liteを用いたGradio Appを作成しました。 以下でお試しいただけます。 https://huggingface.co/spaces/nakamura196/ndlkotenocr-lite 「NDL古典籍OCR-Lite」ではデスクトップアプリケーションが提供されているため、Gradioのようなウェブアプリがなくても簡単に実行可能な環境が用意されています。 そのため、本ウェブアプリの用途としては、スマホやタブレット等からの利用や、ウェブAPIを介して利用などが考えられます。 作成時の工夫や不具合対応 サブモジュールの利用 本家のndlkotenocr-liteをサブモジュールとして導入しました。 [ s p u u a r b t l m h o = d = u h l n t e d t l p " k s n o : d t / l e / k n g o o i t c t e r h n - u o l b c i . r t c - e o l m i / t n e d " l ] - l a b / n d l k o t e n o c r - l i t e . g i t そして、ビルド時に以下を実行します。 ...

2024年12月4日 · 19 分 · Nakamura

YOLOv5モデル(文字領域検出)を使った推論アプリ

概要 以下で文字領域の検出アプリを公開しています。 https://huggingface.co/spaces/nakamura196/yolov5-char 上記アプリが動作しなくなっていたので、以下の記事と同じ手順で修正しました。 なお、本アプリで使用しているモデルの構築にあたっては、「『日本古典籍くずし字データセット』(国文研ほか所蔵/CODH加工) doi:10.20676/00000340」を使用しています。 この修正において、細かい改善も加えたので、紹介します。 gr.JSONの高さ設定 返却結果のJSONデータが大きくなると、結果が見づらいことがありました。 そこで、以下のように、demo.cssを設定することにより、 d d . } " d e e j " e m m s " m o o o o . n h . = c - e v l s h i e a g s o g r u r l h f n . = d t l c I e : o h n " r w ( t " 3 : ) e " { 0 r 0 a f p u a x t c ; o e ; ( y o l o , i n p u t s , o u t p u t s , t i t l e = t i t l e , d e s c r i p t i o n = d e s c r i p t i o n , a r t i c l e = a r t i c l e , e x a m p l e s = e x a m p l e s ) 以下のように、スクロールバーとともに結果を表示できるようになりました。 ...

2024年5月23日 · 3 分 · Nakamura

Hugging Face SpacesとYOLOv5モデル(NDL-DocLデータセットで学習済み)を使った推論アプリの修正

概要 以下の記事でHugging Face Spacesと、以下の記事で紹介したYOLOv5モデル(NDL-DocLデータセットで学習済み)を使った推論アプリを紹介しました。 このアプリが動作しなくなっていたため、動作するように修正しました。 https://huggingface.co/spaces/nakamura196/yolov5-ndl-layout この修正で行なった対応についてメモします。 修正点 修正を加えたapp.pyは以下です。 i f i i m d i o ] t d a e ] d d m r m m o e n u i e r x e e p o p p d f p t t s t a m m o m o o e u p l c i m o o r r r l y r d r i # o r ] t u g g e r c p [ [ [ . t P t t o e f e m u e s t r r i l l ' ' ' = l I = l s s _ C t t s . . = p e e 『 『 『 a g L y j o u = w o p u = I J t s 源 源 平 g u r o s y ( l = i n u r o r = m S " i = 氏 氏 家 r n a i l o o i t r t v t n u e g a O Y o = 物 物 物 . c d m o n l m s e j h e _ t s r [ g N O n " 語 語 語 I h i p v o ) s s _ r i [ p . e ( L < [ 』 』 』 n ( o o 5 v : = u o b t m u I ( ) O = p ( ( ( t s r 5 l n o a t m t v 東 京 国 e h a t . m t . x t g _ a y 5 " s 京 都 文 r a s l o s l e h e i g p Y t 大 大 学 f r I o d . o s e m e e N O y 学 学 研 a e g m a e p a = a ( = D L l 総 所 究 c = r a d l a d = n g t " L O e 合 蔵 資 e F g ( ( n s u I e y p - v = 図 ) 料 ( a e " i d ( r m m , p i D 5 ' 書 . 館 y l n m a d e p a e l o t 館 j 提 o s a ) s f s y g = " c N e 所 p 供 l e k ( ) u e ' , L D x 蔵 g ) o ) a ) l a . p L t ) ' . , m # . t r f i l D - - . ] j u x s r r l a a D a j , p i r i y . a o ' b t o l p g n a n x r y m , e a c i g ' p 1 f y e a l s L g ' ] u 9 e [ n b r l = e n ] t 6 r 0 d a r a " t D : , s / e ] e c a b O s a , y n . r k y e u " t c o c t ( ( l t a e o l e o ) t i = p s n u o _ [ o m " u e t t v j 0 _ O t t e p 5 s ] a w r s r u - o n i i I ' t n n t g m G > s d ( # i h i a r Y , l o m _ n g a O - r r a b a e d L t l i e g o l " i O i a e s e x ) o v t y n u e I , 5 l o t l s m d e u = t ) a e N = t " s g m D t " r . e o L i ) e r " - t c e ) f D l o n o o e r d r c , d e L s r o d " ( b D e ) ) j a s e t c r c a r e t s i t e p u d t t r e s i n t o s e i n c s = a t d i a e l o n s i n c s . o r t b i U j p o p e t f l c i o t o i a n m d d , a e g a t a e n e r s c t i t i m i c a o l g n e e = m a o o r r d t e i c l c l l i t e c r , k a i e a n x n e a d m e p x o l a n e m s p t = l h e e e x a i < m m a p a l g h e e r s e ) t f = u " s h e t . t " p s : / / g i t h u b . c o m / n d l - l a b / l a y o u t - d a t a s e t \ " > N D L - D o c L D a t a s e t s < / a > . < / p > " まず、Gradioのバージョンアップに伴い、gr.inputs.Imageをgr.Imageなどに変更しました。 ...

2024年5月20日 · 5 分 · Nakamura

LlamaIndex+GPT4+gradio

概要 LlamaIndexとGPT4、gradioを組み合わせて使う機会がありましたので、備忘録です。 使用したテキストのサイズが小さいので、結果もそれなりですが、渋沢栄一のチャットボットを試作しました。 背景 以下の記事を参考にしました。 https://qiita.com/DeepTama/items/1a44ddf6325c2b2cd030 上記をもとに、2024年4月20日時点のライブラリで動作するように修正しています。ノートブックを以下で公開しています。 https://github.com/nakamura196/000_tools/blob/main/LlamaIndex%2BGPT4%2Bgradio.ipynb 以下のデータを使用しています。 TEIを用いた『渋沢栄一伝記資料』テキストデータの再構築と活用 まとめ 参考になりましたら幸いです。

2024年4月20日 · 1 分 · Nakamura

学習指導要領コード推薦アプリのAPIを使用する

概要 以下の記事で、学習指導要領コードの推薦アプリについて紹介しました。 今回は、GradioのAPIを使って、上記の推薦アプリを使用する方法について紹介します。 使い方 ライブラリをインストールします。 p i p i n s t a l l g r a d i o _ c l i e n t 例えば、以下のデータを使用してみます。 テキスト 学校種別 空気鉄砲や水鉄砲、ペットボトルロケットなどのしくみを調べ、空気はおし縮められ体積が小さくなるにつれて反発する力が大きくなるが、水はおし縮められないことに気づく。 小学校 JSONデータは実行結果の配列の2つ目の要素に格納されているため、result[1]で取得します。 f c r j r l e s o i s t c a o m e u e o p n n l x u i _ g t t t r _ d r = s n a a = = " e a t d 空 O m a i C c 気 f e o l l 鉄 S = = _ i i 砲 t " c e e や u / r l n n 水 d p e i t t 鉄 y r s e ( . 砲 = e u n " p 、 [ d l t n r ペ " i t a e ッ 小 c [ i k d ト 学 t 1 m a i ボ 校 " ] p m c ト " o u t ル ] r r ( ロ , t a ケ 1 ッ C 9 ト l 6 な i / ど e j の n p し t - く c み o を s 調 " べ ) 、 空 気 は お し 縮 め ら れ 体 積 が 小 さ く な る に つ れ て 反 発 す る 力 が 大 き く な る が 、 水 は お し 縮 め ら れ な い こ と に 気 づ く 。 " , 結果、以下のようなJSONデータが得られます。 ...

2024年4月16日 · 6 分 · Nakamura

学習指導要領コードの推薦アプリの試作

概要 学習指導要領コードの推薦アプリを作成しましたので、その紹介です。以下のhuggingfaceのspaceでお試しいただけます。学習指導要領LODを利用しました。 https://huggingface.co/spaces/nakamura196/jp-cos 使い方 テキストフォームに任意のテキストを入力します。「学校種別」は任意項目です。 結果が画面右側に表示されます。 サンプルも用意していますので、お試しください。NHK for Schoolの情報を利用しています。 仕組み 以下の記事を参考に、学習指導要領のテキストをベクトル化し、同様にベクトル化した質問文と類似する学習指導要領を返却します。 https://zenn.dev/yumefuku/articles/llm-langchain-rag 上記の記事の通り、ベクトル検索ライブラリには「FAISS」、埋め込みモデルには「multilingual-e5-large」を使用しています。 https://huggingface.co/intfloat/multilingual-e5-large 推論部分のソースコードは以下でご確認いただけます。 https://huggingface.co/spaces/nakamura196/jp-cos/blob/main/app.py 工夫点 「学校種別」などを用いたフィルタリング 「学校種別」が指定された場合、langchainのFAISS.similarity_search_with_scoreによる類似度検索において、フィルタリングを行っています。 具体的には、以下のfilterを用いています。 m i t e e f r x t y c a g : e d r m d p p r a a e o t r e t d t c i t a e a s E n u : d _ x t r = a a c ( n t n e f { a d p " [ } [ _ t E ] " s i r 学 c o r 校 o n o 種 r r 別 e a " s s d ] u = e r = : i i n g n g r d a e s d x e e . a s r i c m h i : l a { r e i } t " y ) _ s e a r c h _ w i t h _ s c o r e ( i n p u t _ t e x t , f i l t e r = m e t a d a t a ) 今後 「教科等」による絞り込み 「学校種別」による絞り込みに加えて、「教科等(理科、社会、数学など)」も追加予定です。 ...

2024年4月16日 · 2 分 · Nakamura