Slide 1

Slide 1 text

最近試したLinuxのOCRツー ル(NDL古典籍OCR-Lite/YomiToku) Kenichiro Matohara(matoken) 1

Slide 2

Slide 2 text

matoken @ 鹿児島の右下の山奥から参加 好きなLinuxディストリビューションはDebian GNU/Linux map: © OpenStreetMap contributors Kenichiro Matohara(matoken) https://matoken.org [email protected] 2

Slide 3

Slide 3 text

これまで使っていたLinux上でのOCR tesseract-ocr を利用 デスクトップ利用時にショートカットで矩形選択,スクリーンショット,OCR,クリップボードに結 果を出力 動画内の文字列をOCRしたりといったことに利用 日本語の精度はもう一つ → kagolug-2022.05 「OCRで画像文字を 文字データに」 3

Slide 4

Slide 4 text

最近知ったOCRソフトウェア どちらもオフラインでCPUのみで動作しそうなので少し試してみました. NDL古典籍OCR-Lite NDL古典籍OCR-Liteは、江戸期以前の和古書、清代以前の漢籍と いった古典籍資料のデジタル化画像からテキストデータを作成する OCRです。 GPUを必要としないOCR処理に特徴があり、ノートパ ソコン等の一般的な家庭用コンピュータやOS環境において高速に実 行可能です。 YomiToku YomiToku は日本語に特化した AI 文章画像解析エンジン (Document AI)です。画像内の文字の全文 OCR およびレイアウ ト解析機能を有しており、画像内の文字情報や図表を認識、抽出、変 換します。 4

Slide 5

Slide 5 text

NDL古典籍OCR-Lite ndl-labを眺めてみるとndl-kotenocr-liteという新しいリポジトリが出来ていました. GPUがなくても動作する古典籍資料のOCRが出来るツールのよう 古典は読まないのですが面白そうと思い試してみました. https://github.com/ndl-lab/ndlocr_cli NDL古典籍OCR-Liteは、江戸期以前の和古書、清代以前の漢籍と いった古典籍資料のデジタル化画像からテキストデータを作成する OCRです。 GPUを必要としないOCR処理に特徴があり、ノートパ ソコン等の一般的な家庭用コンピュータやOS環境において高速に実 行可能です。 Windows(Windows 10)、Intel Mac(macOS Sequoia)及びLinux(Ubuntu 22.04)環境において動作確認し ています。 5

Slide 6

Slide 6 text

NDL古典籍OCR-Lite GUI版の利用 Windows, macOS,Linux(amd64のみ)のGUI版バイナリがreleasesにある  README.mdにはIntel Mac(macOS Sequoia)とあるが,ndlkotenocr- lite_v1.0.1_macos_m1.tar.gzというものもあるのでarm版macOSでも動くのかもし れない. 1 Linux版をreleasesからダウンロード 2 展開 3 ndlkotenocr_liteの起動 https://github.com/ndl-lab/ndlkotenocr-lite/releases $ wget2 -v -c https://github.com/ndl-lab/ndlkotenocr-lite/releases/download/1.0.1/ndlkotenocr-lite_v1.0.1_linux.tar.gz $ tar tvf ndlkotenocr-lite_v1.0.1_linux.tar.gz $ tar xf ndlkotenocr-lite_v1.0.1_linux.tar.gz $ file linux/ndlkotenocr_lite linux/ndlkotenocr_lite: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1] $ linux/ndlkotenocr_lite 1 2 3 6

Slide 7

Slide 7 text

画面はシンプルで対象の画像もしくはディレクトリと,結果の出力ディレクトリを指定してOCRボ タンを押すだけ 自分は元画像では全然読めないが,OCR結果を見るとなんとなくわかるので面白い 7

Slide 8

Slide 8 text

認識箇所が青枠で囲まれている 8

Slide 9

Slide 9 text

認識結果(XML) 9

Slide 10

Slide 10 text

NDL古典籍OCR-Lite cli版 Python 3.10以降が必要 sourceをcloneしてPythonの依存パッケージを導入する必要がある 1 sourceのclone 2 venvでPython仮想環境を設定 3 venvの環境に入る 4 依存パッケージを導入  Raspberry Pi OS bookworm armhfでも試したところonnxruntimeのarmhf版が 無いようで導入に失敗.自分でbuildすれば動かせるかもしれない. $ git clone https://github.com/ndl-lab/ndlkotenocr-lite $ cd ndlkotenocr-lite $ python3 -m venv venv $ source venv/bin/activate $ pip install -r requirements.txt $ cd src 1 2 3 4 10

Slide 11

Slide 11 text

コマンドラインオプション確認 $ python3 ./ocr.py --help usage: ocr.py [-h] [--sourcedir SOURCEDIR] [--sourceimg SOURCEIMG] --output OUTPUT [--viz VIZ] [--det-weights DET_WEIGHTS] [--det-classes DET_CLASSES] [--det-score-threshold DET_SCORE_THRESHOLD] [--det-conf-threshold DET_CONF_THRESHOLD] [--det-iou-threshold DET_IOU_THRESHOLD] [--rec-weights REC_WEIGHTS] [--rec-classes REC_CLASSES] [--device {cpu,cuda}] Arguments for NDLkotenOCR-Lite options: -h, --help show this help message and exit --sourcedir SOURCEDIR Path to image directory --sourceimg SOURCEIMG Path to image directory --output OUTPUT Path to output directory --viz VIZ Save visualized image --det-weights DET_WEIGHTS Path to rtmdet onnx file --det-classes DET_CLASSES Path to list of class in yaml file --det-score-threshold DET_SCORE_THRESHOLD --det-conf-threshold DET_CONF_THRESHOLD --det-iou-threshold DET_IOU_THRESHOLD --rec-weights REC_WEIGHTS Path to parseq-tiny onnx file --rec-classes REC_CLASSES Path to list of class in yaml file --device {cpu,cuda} Device use (cpu or cuda) 11

Slide 12

Slide 12 text

cli版実行例 --sourcedirか—​ sourceimgで処理対象ディレクトリか処理対象ファイルを指定,--output で結果の出力先を指定,--viz Trueで可視化画像を有効にして実行(オプション) CUDAに対応したGPUの利用できる環境であれば—​ deviceでcudaを指定できるが現時点 ではベータ $ python3 ./ocr.py --sourceimg ./digidepo_12282447_0001-000.png --output . --viz True ['./digidepo_12282447_0001-000.png'] [INFO] Intialize Model [INFO] Inference Image [INFO] Saving result on ./viz_digidepo_12282447_0001-000.png $ ls -ltrA 合計 21964 drwxr-xr-x 2 matoken matoken 4096 11月 29 05:40 config drwxr-xr-x 2 matoken matoken 4096 11月 29 05:40 model -rw-r--r-- 1 matoken matoken 35776 11月 29 05:40 ndl_parser.py -rw-r--r-- 1 matoken matoken 2988 11月 29 05:40 parseq.py -rw-r--r-- 1 matoken matoken 8911 11月 29 05:40 ocr.py -rw-r--r-- 1 matoken matoken 5744 11月 29 05:40 rtmdet.py drwxr-xr-x 6 matoken matoken 4096 11月 29 06:10 reading_order drwxrwxr-x 2 matoken matoken 4096 11月 29 06:10 __pycache__ -rw-rw-r-- 1 matoken matoken 11209450 11月 29 06:12 digidepo_12282447_0001-000.png -rw-rw-r-- 1 matoken matoken 11131912 11月 29 06:13 viz_digidepo_12282447_0001-000.png -rw-rw-r-- 1 matoken matoken 13917 11月 29 06:13 digidepo_12282447_0001-000.xml -rw-rw-r-- 1 matoken matoken 3635 11月 29 06:13 digidepo_12282447_0001-000.txt -rw-rw-r-- 1 matoken matoken 46375 11月 29 06:13 digidepo_12282447_0001-000.json 12

Slide 13

Slide 13 text

OCR結果 シンプルな画像だとテキストファイルだけで良さそう 複雑な順番がわからないようなものはOCRされたテキストがどの部分のものか分かりづらい 座標情報の含まれるJSONファイルやXMLファイルを参照 文字部分にマウスカーソルを移動するとポップアップするようなビュワーを作ると便利かもしれ ない 13

Slide 14

Slide 14 text

現代活字を読ませると……駄目です 例えばこのスライドの5ページ目はまったく認識されない 以下の書籍は少し認識しているが縦で読もうとしている 14

Slide 15

Slide 15 text

GUI?/CLI? GUI版と速度を比較してみようと同じものを処理してみると,10コマでGUI版30秒,CLI版 32秒,あまり変わらないのでおそらく誤差 GUI版のほうがダウンロードして展開するだけで使えて容量も小さいので試しに使うにはGUI 版のほうが良さそう. CLI版はCUDA対応環境だったり,プログラムから呼んで一括処理や前処理後処理などをした いときに便利そう.  GUI版の容量は展開時で258MB程,CLI版の容量は依存パッケージ導入後で520MB程 だった. 15

Slide 16

Slide 16 text

YomiToku レイアウト解析機能,Linux対応,CPU対応が個人的に刺さった YomiToku YomiToku は日本語に特化した AI 文章画像解析エンジン (Document AI)です。画像内の文字の全文 OCR およびレイアウ ト解析機能を有しており、画像内の文字情報や図表を認識、抽出、変 換します。 16

Slide 17

Slide 17 text

YomiTokuインストール Python3.9+, Pytorch が実行に必要  vu, Dockerにも対応  初回実行時にモデルデータがダウンロードされる $ python3 -m venv venv $ source venv/bin/activate $ pip install yomitoku 1 2 3 $ du -Hs ~/.cache/huggingface/hub/*yomitoku* | awk '{ sum+=$1} END {print sum}' 630456 $ du -Hs . 5733652 . 17

Slide 18

Slide 18 text

help $ yomitoku --help usage: yomitoku [-h] [-f FORMAT] [-v] [-o OUTDIR] [-d DEVICE] [--td_cfg TD_CFG] [--tr_cfg TR_CFG] [--lp_cfg LP_CFG] [--tsr_cfg TSR_CFG] [--ignore_line_break] [--figure] [--figure_letter] [--figure_width FIGURE_WIDTH] [--figure_dir FIGURE_DIR] arg1 positional arguments: arg1 path of target image file or directory options: -h, --help show this help message and exit -f FORMAT, --format FORMAT output format type (json or csv or html or md) -v, --vis if set, visualize the result -o OUTDIR, --outdir OUTDIR output directory -d DEVICE, --device DEVICE device to use --td_cfg TD_CFG path of text detector config file --tr_cfg TR_CFG path of text recognizer config file --lp_cfg LP_CFG path of layout parser config file --tsr_cfg TSR_CFG path of table structure recognizer config file --ignore_line_break if set, ignore line break in the output --figure if set, export figure in the output --figure_letter if set, export letter within figure in the output --figure_width FIGURE_WIDTH width of figure image in the output --figure_dir FIGURE_DIR directory to save figure images 18

Slide 19

Slide 19 text

基本的な利用方法 --formar 出力フォーマット(json, csv, html, md) --vis(option) レイアウト解析結果画像出力 --outdir 結果の出力先ディレクトリ $ yomitoku --format json --vis --outdir <対象ファイル or ディレクトリ> 19

Slide 20

Slide 20 text

OCRに掛けてみる 少し古い雑誌(1978年) 国立国会図書館デジタルコレクションより「 」から 一部を 最近の雑誌 漫画 少し粗い漫画 スマホで撮った商品パッケージ : デモにて エンサイクロペディア・アスキー volume 1 20

Slide 21

Slide 21 text

Tips:PDFを画像に 国立国会図書館デジタルコレクションからダウンロードしたPDFファイルなどをOCRするために 画像に変換 poppler-utilsのpdfimagesを使う パスワードで保護されたPDF 総当り……最近のPDFはセキュリティが厳しくなり難しく諦めている pdfファイルから画像を抜き出し( pdfimages or LibreOffice ) – matoken’s meme 21

Slide 22

Slide 22 text

SEE ALSO 要NVIDIA GPU NDL古典籍OCR-LiteのようにNDLOCR-Liteが出ないかな? iOS/Windows Wine? NDLOCR bunkoOCR 22

Slide 23

Slide 23 text

まとめ 今回Linuxにも対応したCPU&オフラインで動作するNDL古典籍OCR-LiteとYomiTokuを 試した どちらもさくっと動いて精度も結構良さそう NDL古典籍OCR-Liteについてはこれまで古典は読まなかったが世界が広がる感じ YoMitokuはかなり実用性も高いしサービスに組み込むことも容易そう ただし公開時はライセンスに注意→ CC BY-NC-SA 4.0 個人的に雑誌などのOCRはWindowsのアプリケーションを使っていたので脱Windowsがま た1つ進みそう 23

Slide 24

Slide 24 text

奥付 発表 2024-12-15(sun) 発表者 利用ソフトウェア + ライセンス 鹿児島Linux勉強会 2024.12(オンライン開催) Kenichiro Matohara(matoken) Neovim Asciidoctor Reveal.js CC BY 4.0 24