📑

NDLOCR 日本語 OCR を Windows で動かすメモ

2023/04/22に公開

NDLOCR で日本語 OCR できます.

ただ, そのままでは Windows で動きません...

Windows で動くようにしました!(たぶん)

repo

https://github.com/syoyo/ndlocr_cli

を使います.

https://github.com/ndl-lab/ndlocr_cli/pull/15

が取り込まれれば本家を使うのが理想ですが... どうももう NDLOCR は開発サポートされていない雰囲気があります.
(将来的には OCR は, active に開発続いている PaddleOCR で日本語学習頑張って行うのがいいかもしれません https://github.com/PaddlePaddle/PaddleOCR )

まず, CPU version の pytorch 使う.

https://github.com/ndl-lab/ndl_layout/tree/7565c208b6dfa2eb4d54711617efed40c60f5fb0

では CUDA での説明になっていますが, 今回は面倒なので CPU 版にしておきます.

mmdetection で torch のカスタム Op ビルドが必要ですが, この時 pytorch の構成(CUDA 版入れると CUDA ビルドしてしまう)ので, pytorch インストール時点で cpu 版を使う必要があることに注意です.

MMCV

ndlocr_cli では MMVC 1.3.2 ~ 1.4.0 で作成されてます.

mmcv は執筆時点(2023/04/15)では 2.0 がリリース版になっています.
これに伴うのか, pip パッケージの名前が mmcv-full から mmcv に変わっています.

ただ mmcv 2.0 では動かないので(たぶん),

$ python -m pip install "mmcv-full==1.4.0"

として 1.4.0 をインストールします.
(https://github.com/ndl-lab/mmdetection/blob/b9fbbafbd438e7272def13a06b6c4034f294bb2a/mmdet/init.py#L19 を変えれば, 1.x 系で最新の 1.7.1 でも動くとは思われる)

もしくは mim 経由でインストール

https://github.com/open-mmlab/mmcv

mim とかへんな独自パッケージマネージャ(?)使うのやめてほしい...

とりま普通に pip で入るようです.
(prebuilt は無いようなので, ビルドが必要にはなる)

pip install -U openmim
mim install mmcv==1.4.0
# or python -m mim install mmcv==1.4.0

でもいけるかもです!

NDLOCR のビルド

あとは

https://zenn.dev/nakamura196/articles/a8227f4524570c

あたりを参考にして ndlocr のビルドすればいけます!

CUDA 版(うまくいかない)

2023/04/22 時点での pytorch CUDA stable 版を使います.

まず, Visual Studio or VS C++ Build Tools(MSVC C++ コンパイラ単体) 入れておきます
(https://qiita.com/syoyo/items/3b830194fbd119de5003 で Visual Studio C++ Build Tools は OSS コンパイルであれば商用でも使えます!)

vs tool 有効のコマンドラインでターミナル開くか,

https://stackoverflow.com/questions/43372235/vcvarsall-bat-for-visual-studio-2017

で vcvarsall で VC コンパイラへのパス設定し, miniconda で python 3.8 環境を作っておきます.

また, pytorch の cuda バージョンと合う開発環境を conda で入れます.

https://qiita.com/ktokey/items/7e083c43d83e21545bd8

を参照ください.

ただ, cuda-toolkit=11.8.0 としても最新バージョンがインストールされてしまいます. 最近は label 指定で特定のバージョンがインストール必要のようです.

今回は cuda 11.8 だったので,

> conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit 

としました. ほかに available なバージョンは

https://anaconda.org/nvidia/cuda-toolkit

で確認ください.

> python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

mmcv は prebuilt は 2.0 からのようなので, 1.x はソースコードからビルドします...
(古い CUDA と torch を使ったのは prebuilt があるが... ほかの python module との兼ね合いもあるので...)

> python -m pip install mmcv-full==1.4.0

複数の VC バージョンがインストールされている場合は,

 UserWarning: It seems that the VC environment is activated but DISTUTILS_USE_SDK is not set.This may lead to multiple activations of the VC env.Please set `DISTUTILS_USE_SDK=1` and try again.

とエラーが出る場合があります. その場合 cmd で

set DISTUTILS_USE_SDK=1

としてから pip install します.

最後のほうは

> python -m pip install -e .

でもいいかもしれません.

ただ,

running build_ext
error: [WinError 2] The system cannot find the file specified

という謎エラーで詰みました.

https://github.com/google/mediapipe/issues/3101#issuecomment-1053214940

pytorch の CUDAExtension で, python.exe か nvcc.exe がうまく呼ばれないっぽいようだが...
(python 3.7 ではうまくいくのかもしれません)

一応 pytorch 1.13 までは prebuilt があるので, それを使うのがよいでしょうか.

https://download.openmmlab.com/mmcv/dist/cu117/torch1.13.0/index.html

pytorch 2.0 になると, mmcv 1.x の prebuilt はありません.

https://download.openmmlab.com/mmcv/dist/cu117/torch2.0.0/index.html

pytorch 1.13(Work in progress)

cuda 11.7 + torch1.13 までなら, mmvc-full 1.7.1 の prebult があるのでそれを使います!

https://pytorch.org/get-started/previous-versions/

pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
pip install mmcv-full==1.7.1 -f https://download.openmmlab.com/mmcv/dist/cu117/torch1.13.0/index.html

T.B.C.

TODO

Discussion