NDL古典籍OCRを利用してテキスト化を実行するためのアプリケーションを提供するリポジトリです。
NDL古典籍OCRは、江戸期以前の和古書、清代以前の漢籍といった古典籍資料のデジタル化画像からテキストデータを作成するOCRです。
本プログラムは、国立国会図書館が令和3年度OCR関連事業から得られた知見や、 NDLラボにおけるこれまでの調査研究活動、そして人文情報学分野において構築・蓄積されてきたデータ資源を活用することで独自に開発したものです。
2023年8月に公開したver.2から、漢籍資料のレイアウト認識性能が向上しています。
漢籍資料のテキスト化において、ver.2のレイアウト認識性能がver.1よりも低下する傾向が報告されています。特に漢籍資料のテキスト化にNDL古典籍OCRを用いる際にはver.3へのアップデートを推奨します。
参考:永崎研宣, et al. OCR の高精度化を踏まえたデジタル学術編集版の新展開. じんもんこん 2023 論文集, 2023, 2023: 177-182.(外部サイト)
読み順の整序機能の性能改善に当たっては、令和4年度OCR関連事業から得られた知見を活用しています。
本プログラムを開発・改善するに当たって利用したデータセットや手法の詳細については、古典籍資料のOCRテキスト化実験及びOCR学習用データセット(みんなで翻刻)も参照してください。
本プログラムは、国立国会図書館がCC BY 4.0ライセンスで公開するものです。詳細については LICENSEをご覧ください。
2023年8月まで公開していたバージョンを継続して利用したい場合には、ver.1をご利用ください。 2024年2月まで公開していたバージョンを継続して利用したい場合には、ver.2をご利用ください。
git clone https://github.com/ndl-lab/ndlkotenocr_cli -b ver.1
git clone https://github.com/ndl-lab/ndlkotenocr_cli -b ver.2
のようにソースコード取得部分を書き換えることで継続してお使いいただけます。
下記のコマンドを実行してください。
git clone https://github.com/ndl-lab/ndlkotenocr_cli
コンテナ内でCUDA 11.8を利用します。
ホストマシンのNVIDIA Driverが
Linuxの場合: 450.36.06以上
Windowsの場合:520.06以上
のバージョンを満たさない場合は、ご利用のGPUに対応するドライバの更新を行ってください。
(参考情報)
以下のホストマシン環境(AWS g5.xlargeインスタンス)上で動作確認を行っています。
OS: Ubuntu 18.04.6 LTS
GPU: NVIDIA A10G
NVIDIA Driver: 470.182.03
https://docs.docker.com/engine/install/ に従って、OS及びディストリビューションにあった方法でdockerをインストールしてください。
Linux:
cd ndlkotenocr_cli
sh ./docker/dockerbuild.sh
Windows:
cd ndlkotenocr_cli
docker\dockerbuild.bat
Linux:
cd ndlkotenocr_cli
sh ./docker/run_docker.sh
Windows:
cd ndlkotenocr_cli
docker\run_docker.bat
ndlocr_cli
├── main.py : メインとなるPythonスクリプト
├── cli : CLIコマンド的に利用するPythonスクリプトの格納されたディレクトリ
├── src : 各推論処理のソースコード用ディレクトリ
│ ├── ndl_kotenseki_layout : レイアウト抽出処理のソースコードの格納されたディレクトリ
| ├── reading_order:読み順整序処理のソースコードの格納されたディレクトリ
│ └── text_kotenseki_recognition : 文字認識処理のソースコードの格納されたディレクトリ
├── config.yml : サンプルの推論設定ファイル
├── docker : Dockerによる環境作成のスクリプトの格納されたディレクトリ
├── README.md : このファイル
└── requirements.txt : 必要なPythonパッケージリスト
起動後は以下のようなdocker exec
コマンドを利用してコンテナにログインできます。
docker exec -i -t --user root kotenocr_cli_runner bash
input_rootディレクトリの直下にimgディレクトリがあり、その下に資料毎の画像ディレクトリ(bookid1,bookid2,...)がある場合、
input_root/
└── img
├── page01.jpg
├── page02.jpg
・・・
└── page10.jpg
以下のコマンドで実行することができます。
python main.py infer input_root output_dir
実行後の出力例は次の通りです。
output_dir/
├── input_root
│ ├── txt
│ │ ├── page01.txt
│ │ ├── page02.txt
│ │ ・・・
│ │
│ └── json
│ ├── page01.json
│ ├── page02.json
│ ・・・
└── opt.json
重みファイルのパス等、各モジュールで利用する設定値はconfig.yml
の内容を修正することで変更することができます。
実行時に -s b を指定することで、次の入力形式のフォルダ構造を処理できます。
例:
python main.py infer input_root output_dir -s b
入力形式
input_root/
└── img
├── bookid1
│ ├── page01.jpg
│ ├── page02.jpg
│ ・・・
│ └── page10.jpg
├── bookid2
├── page01.jpg
├── page02.jpg
・・・
└── page10.jpg
出力形式
output_dir/
├── input_root
| ├──bookid1
│ | ├── txt
│ | │ ├── page01.txt
│ | │ ├── page02.txt
│ | │ ・・・
│ | │
│ | └── json
│ | ├── page01.json
│ | ├── page02.json
│ | ・・・
| ├──bookid2
│ | ├── txt
│ | │ ├── page01.txt
│ | │ ├── page02.txt
│ | │ ・・・
│ | │
│ | └── json
│ | ├── page01.json
│ | ├── page02.json
│ ・・・
└── opt.json
実行時に -a を指定することで、出力jsonに画像サイズ情報を追加します。
例:
python main.py infer input_root output_dir -a
注意 このオプションを有効化すると出力jsonの形式が以下の構造になります。
{
"contents":[
(各文字列矩形の座標、認識文字列等)
],
"imginfo": {
"img_width": (元画像の幅),
"img_height": (元画像の高さ),
"img_path":(元画像のディレクトリパス),
"img_name":(元画像名)
}
}
出力ディレクトリでは、実行時に指定したオプション情報がopt.json
に保存されています。
2024年2月現在、レイアウト認識モデル及び文字列認識モデルの再学習手順を公開しています。
レイアウト認識モデルについてはtrain-layout.ipynb及びcococonverter-NDLDocLを参照してください。
文字列認識モデルについてはtrain.pyを参照してください。