Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

発表: 鹿児島Linux勉強会 2024.12(オンライン開催) - connpass https://kagolug.connpass.com/event/339794/
source: https://codeberg.org/matoken/kagolug-2024.12/src/branch/main/slide/slide.adoc

Kenichiro MATOHARA

December 15, 2024
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. 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
  2. 認識結果(XML) <OCRDATASET> <PAGE IMAGENAME="0004_0000.jpg" WIDTH="2048" HEIGHT="1351"> <LINE TYPE="本文" X="1726" Y="202"

    WIDTH="23" HEIGHT="172" CONF="0.599" ORDER="0" STRING="むかし〳〵三うらや" /> <LINE TYPE="本文" X="1701" Y="200" WIDTH="25" HEIGHT="138" CONF="0.614" ORDER="1" STRING="嶋太郎といふ" /> <LINE TYPE="本文" X="1673" Y="199" WIDTH="27" HEIGHT="195" CONF="0.671" ORDER="2" STRING="おとこありよの人" /> <LINE TYPE="本文" X="1653" Y="199" WIDTH="24" HEIGHT="182" CONF="0.620" ORDER="3" STRING="かれがいゑなの" /> <LINE TYPE="本文" X="1630" Y="199" WIDTH="22" HEIGHT="174" CONF="0.703" ORDER="4" STRING="三うらやと名の" /> <LINE TYPE="本文" X="1603" Y="200" WIDTH="27" HEIGHT="172" CONF="0.712" ORDER="5" STRING="嶋太郎を一つにして" /> <LINE TYPE="本文" X="1564" Y="200" WIDTH="21" HEIGHT="164" CONF="0.439" ORDER="6" STRING="よひけるが此" /> <LINE TYPE="本文" X="1537" Y="203" WIDTH="25" HEIGHT="165" CONF="0.641" ORDER="7" STRING="うらねずいぶん" /> <LINE TYPE="本文" X="1513" Y="202" WIDTH="23" HEIGHT="172" CONF="0.618" ORDER="8" STRING="きようものにて" /> <LINE TYPE="本文" X="1485" Y="204" WIDTH="27" HEIGHT="141" CONF="0.711" ORDER="9" STRING="何をさせても" /> <LINE TYPE="本文" X="1459" Y="204" WIDTH="27" HEIGHT="132" CONF="0.706" ORDER="10" STRING="くもかねぬは" /> <LINE TYPE="本文" X="1431" Y="203" WIDTH="26" HEIGHT="134" CONF="0.756" ORDER="11" STRING="男なれとも" /> <LINE TYPE="本文" X="1404" Y="204" WIDTH="25" HEIGHT="157" CONF="0.744" ORDER="12" STRING="かんじんのうんじ" /> <LINE TYPE="本文" X="1379" Y="205" WIDTH="26" HEIGHT="106" CONF="0.563" ORDER="13" STRING="いふものが" /> <LINE TYPE="本文" X="1352" Y="202" WIDTH="28" HEIGHT="125" CONF="0.768" ORDER="14" STRING="つたなく只" /> <LINE TYPE="本文" X="1329" Y="203" WIDTH="21" HEIGHT="117" CONF="0.470" ORDER="15" STRING="ぶら〳〵と" /> <LINE TYPE="本文" X="1302" Y="203" WIDTH="23" HEIGHT="124" CONF="0.544" ORDER="16" STRING="くらしけるが" /> <LINE TYPE="本文" X="1276" Y="204" WIDTH="26" HEIGHT="125" CONF="0.740" ORDER="17" STRING="ころは六月" /> <LINE TYPE="本文" X="1254" Y="204" WIDTH="23" HEIGHT="137" CONF="0.704" ORDER="18" STRING="朔日の事にて" /> <LINE TYPE="本文" X="1226" Y="204" WIDTH="27" HEIGHT="121" CONF="0.776" ORDER="19" STRING="あさくさの" /> <LINE TYPE="本文" X="1198" Y="205" WIDTH="26" HEIGHT="146" CONF="0.761" ORDER="20" STRING="ふじへさんけいし" /> 9
  3. 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
  4. コマンドラインオプション確認 $ 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
  5. 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
  6. 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
  7. 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