見出し画像

PDFに一括OCRをかけるツールを作成した(その2 NDLOCR-Lite版)

前回、PDFに一括OCRをかけるPythonツールをご紹介しました。そこで利用したOCRエンジンは YomiToku でした。

YomiTokuは日本語OCRとしても優秀で、特に縦書き書面の解析に強みがあります。
ただし、商用利用では有償になること、そして GPUがほぼ必須という点 が、人によってはハードルになると感じました。

そんななか、国会図書館のXで 新しいOCR「NDLOCR-Lite」公開 の告知を見かけました。

これは良さそうだ、と思い、さっそく試してみることにしました。

実際に触ってみると、OCRの結果はかなり好印象でした(古く変色した岩波文庫もバッチリ認識しました)。
一方で、私の用途では少し残念なところもありました。アプリ版でテストしたところ、標準では OCR結果の出力が中心 で、そのまま検索可能PDFとして使える形にはならない からです。

そこで、前回公開した YomiTokuベースのOCRアプリ をもとに、第二弾として作ったのが NDLOCR-Lite版 です。今回もPythonでのバイブコーディングです。今回は指定フォルダ内の処理と、新たに指定したファイル単独でも処理が出来るようにしています。

今回やりたいこと

開発目的そのものは、YomiToku版のときと大きくは変わっていません。
OCRされていない古いPDFや画像を、検索できるPDFにすること。これが基本の目的です。

ただ今回はそこに、グラボのない環境でも手軽に試せるようにする という狙いを加えました。

NDLOCR-Liteで文字を読み取り、その結果を PDFのテキスト層に埋め込んで、検索可能PDFとして保存する
つまり、単にOCR結果をテキストとして取り出すだけではなく、実際に使えるPDFとして仕上げるところまで自動化したい、というのが今回のポイントです。

インストール方法

NDLOCR-Lite を試す際は、まずは 公式GitHubの Releases から、自分のOS向けファイルをダウンロードする方法 が分かりやすいです。
デスクトップアプリ版が用意されているので、最初はそれを使うのが手軽だと思います。

ひとつ注意したいのは、保存先のフォルダ名やパスに 日本語(全角文字)を含めないほうが安全 という点です。
うまく起動しない場合があるため、半角英数字の場所に置いておくのが無難です。

次に、今回作成したPythonスクリプトを動かすための環境準備です。Python環境を用意した上で、PDFの作成や画像処理に使うライブラリをインストールします。
コマンドプロンプトなどで pip install pypdf pillow pypdfium2 reportlab と実行すれば、自作スクリプト側で必要なパッケージが入ります。
なお、これとは別に NDLOCR-Lite 本体(実行ファイルまたは起動用スクリプト)が利用できる状態である必要があります。

YomiToku版とは依存環境が異なります

ここは少し注意が必要です。

同じOCRアプリ系でも、YomiToku版とNDLOCR-Lite版では必要な環境や準備が同じではありません。

前回の導入手順をそのまま流用できるとは限らないので、今回は 別構成のアプリとして見る ほうが分かりやすいと思います。

いろいろ試したい方は、仮想環境(venv)を分けて使う ほうが安心です。

Pythonコード

今回作成したツールの全コードは、GitHubリポジトリに置いておきます。

まとめ

今回のNDLOCR-Lite版は、GPUを使ったYomiToku版に比べて、商用利用しやすいこと、そして ノートパソコン等のグラボが無いPCでも使えるのが大きな特徴です。

国会図書館はデジタルアーカイブでも非常に面白い取り組みを続けていますし、今回のようなツール公開にも目を引かれます。
今後の活動にも注目していきたいです。

ひとりごと

前回のYomiToku版は、PDFファイルが大きくなってしまう欠点があるので、たのバグの修正と合わせて改訂版をリリース予定です。

#OCR #PDF #Python #NDLOCR -Lite #YomiToku

いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
PDFに一括OCRをかけるツールを作成した(その2 NDLOCR-Lite版)|しまさ
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1