# NDLOCR用テキスト認識モジュール 画像中のテキストを認識するモジュールのリポジトリです。 本プログラムは、国立国会図書館が株式会社モルフォAIソリューションズに委託して作成したものです。 本プログラムは、国立国会図書館がCC BY 4.0ライセンスで公開するものです。詳細については [LICENSE](./LICENSE )をご覧ください。 ## 環境構築 python3.7かつ、cuda 11.1をインストール済みの環境の場合 text_recognitionディレクトリ直下で以下のコマンドを実行する。 ``` pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html pip install tqdm lmdb opencv-python six natsort nltk more-itertools wget https://lab.ndl.go.jp/dataset/ndlocr/text_recognition/mojilist_NDL.txt -P ./models wget https://lab.ndl.go.jp/dataset/ndlocr/text_recognition/ndlenfixed64-mj0-synth1.pth -P ./models ``` くわえて、元リポジトリ(https://github.com/clovaai/deep-text-recognition-benchmark) をカスタマイズした[deep-text-recognition-benchmark](https://github.com/ndl-lab/deep-text-recognition-benchmark) に依存しているため、下記のようにリポジトリの追加と環境変数の追加を行う。 ```bash git clone https://github.com/ndl-lab/deep-text-recognition-benchmark cd deep-text-recognition-benchmark export PYTHONPATH=$PYTHONPATH:$(pwd) ``` ## ファイルの説明 - text_recognition.py - モデルとデータセットのディレクトリを受け取り推論を行う - 入力可能なデータ形式はxmlとimgを子に持つディレクトリか、create_xmldataset.py後のデータセット - 標準出力形式はdiff, acc, levenの三種類 ```bash python text_recognition.py --db_path input_dir/ --db_type xmlraw $(cat arg_train-model_info) --character "$(cat data/charset | tr -d '\n')" --batch_max_length 100 --imgW 1200 --imgH 32 --PAD --saved_model models/best_accuracy.pth --batch_size 32 --diff wrong ``` - create_xmldataset.py - NDLOCRXMLDataset形式のxmlとimgを子に持つディレクトリを指定して、学習に使用するデータベースを作成する ```bash python create_xmldataset.py --input_path data/sample/??_大衆人事録?之部/ --output_path databases/train/大衆人事録 databases/valid/大衆人事録 databases/test/大衆人事録 ``` ## 使い方 - モデルとデータセットのディレクトリを受け取り推論を行う - 入力可能なデータ形式はNDLOCRXMLDataset形式のxmlとimgを子に持つディレクトリか、create_xmldataset.pyで処理した後のデータセット ### Accuracyを出力する機能 ```bash python text_recognition.py \ $(cat arg_train-model_info) \ --saved_model models/ndlenfixed64-mj0-synth1.pth \ --character "〓$(cat models/mojilist_NDL.txt | tr -d '\n')" \ --batch_max_length 100 --imgW 1200 --PAD \ --batch_size 160 \ --db_path input_dir/ --db_type xmlraw \ --acc ``` ### Normalized Edit Distanceを出力する機能 ```bash python text_recognition.py \ $(cat arg_train-model_info) \ --saved_model models/ndlenfixed64-mj0-synth1.pth \ --character "〓$(cat models/mojilist_NDL.txt | tr -d '\n')" \ --batch_max_length 100 --imgW 1200 --PAD \ --batch_size 160 \ --db_path input_dir/ --db_type xmlraw \ --leven ``` ### どの文字を間違えているか可視化する機能 - --outimage_dir行は画像として出力するオプション - --stat行はどの文字をどの文字として間違えているかの統計を出力するオプション ```bash python text_recognition.py \ $(cat arg_train-model_info) \ --saved_model models/ndlenfixed64-mj0-synth1.pth \ --character "〓$(cat models/mojilist_NDL.txt | tr -d '\n')" \ --batch_max_length 100 --imgW 1200 --PAD \ --batch_size 160 \ --db_path input_dir/ --db_type xmlraw \ --diff wrong \ --outimage_dir outimg --font font.ttf \ --stat ``` ### XMLとして出力する機能 ```bash python text_recognition.py \ $(cat arg_train-model_info) \ --saved_model models/ndlenfixed64-mj0-synth1.pth \ --character "〓$(cat models/mojilist_NDL.txt | tr -d '\n')" \ --batch_max_length 100 --imgW 1200 --PAD \ --batch_size 160 \ --db_path input_dir/ --db_type xmlraw \ --xml --outxml_dir outxml ``` #### (参考)学習時のパラメータ([deep-text-recognition-benchmark](https://github.com/ndl-lab/deep-text-recognition-benchmark)を参照) ```:arg_train-model_info --Transformation None --FeatureExtraction VGG --SequenceModeling BiLSTM --Prediction CTC ```