ランドML

機械学習とかの備忘録

GPU不要のOCR 「NDLOCR-Lite」をデスクトップ & Web & Pythonで試す

NDLOCR-Liteとは?

国立国会図書館のNDLラボが2026年2月に公開したOCRアプリです。 特徴としては以下の通りです。

  • 無料で使え、デスクトップ版(Windows, Mac, Linux)とWeb版がある
  • 外部サーバにデータを送信しないため、セキュリティ的にも安心
  • GPU不要
  • 縦書き・手書き・PDFのOCRも可能
  • ソースコードが公開されているためカスタム可能
  • Pythonで作られており、GUIはFlutterベースの「Flet」を利用。

gigazine.net

デスクトップアプリ版

zipファイルのインストール

リリースサイト(https://github.com/ndl-lab/ndlocr-lite/releases)から環境に合ったファイルを選択します。
私はWindowsなので「ndlocr_lite_v1.1.0_windows.zip」をダウンロードしました。

アプリの立ち上げ

先ほどダウンロードした圧縮ファイルを解凍します。
この際解凍先のフォルダ名に日本語が含まれるとアプリが立ち上がらなかったため、

C:\user\user_name\

に解凍しました。
解凍したら、「ndlocr_lite_gui.exe」をダブルクリック。

「WindowsによってPCが保護されました」と出たので、「詳細」をクリックして「実行」を選択。

以下の画面が立ち上がります。

OCRの実行

アプリ画面を操作してOCRを実行します。
画面上で次の操作をしました。

  • 「画像ファイルを処理する」を押し、処理したい画像を選択
  • 「出力先を選択する」を押し、出力先のフォルダを選択
  • 「OCR」を押し実行する。

すると、以下のようにOCR結果が表示されました。
所要時間は僅か1.49秒と非常に高速でした。

OCRした画像と結果がこちらですが、抽出もうまくできていそうです。

元画像 抽出の様子
売上レポート(2026年2月)
概要
本レポートは、2026年2月の売上実績をまとめたものです。
全体として前月比+12%の成長となりました。
売上サマリー
順
総売上
商品売上
金額(円)
1,250,000
980,000
サービス売上
270,000
前月比
+12%
+10%
+18%

また、出力先には以下のファイルが出力されました。

  • viz_画像名.png:抽出の様子
  • 画像名.txt:取り出された文字列

PDFのOCR

アプリの画面には「画像ファイルを処理する」とありますが、PDFファイルも選択できます。
とりあえず、令和7年秋の応用情報の午後問題(https://www.ipa.go.jp/shiken/mondai-kaiotu/index.html)のPDFの一部をOCRしましたが、こちらもある程度上手くいってそうです。
1ページごとにOCRしており、「次の画像」を押せば次のページの結果が確認できます。

Web版

アクセス方法

以下にWeb版が公開されています。 ndlocr-liteweb.netlify.app

初回アクセス時はモデルのダウンロードに1分ぐらいかかります。

こちらがホーム画面で、ドラッグ&ドロップやクリップボードから画像・PDFを選択できます。

OCRの実行

  • ドラッグで領域選択してOCR
  • ページ右上の「認識を開始」を押し、画像全体をOCR

の2種類の方法があります。

ドラッグで領域選択

全体をOCR

Pythonでの利用

ソースコードがGithubで公開されているので、Pythonプロジェクトを立ち上げられます。

github.com

また、上記リポジトリ内でファイル・フォルダを以下に示します。

📁ndlocr-lite/
├── 📁ndlocr-lite-gui:プロジェクトのフォルダ
├── 📁src:ソースコード
└── 📝requirements.txt:依存ライブラリ

環境構築

基本はREADMEに書かれたとおりにやっていますが、そのままだとうまくいかなかったので一部手順を変更しています。

# リポジトリのクローン
$ git clone https://github.com/ndl-lab/ndlocr-lite

# 「ndlocr-lite-gui」に移動
$ cd ./ndlocr-lite/ndlocr-lite-gui

# ファイルコピー(/sを付ける!)
$ xcopy ..\src .\src /s

# ファイル名か・ディレクトリ名か確認されるので選択肢はDを選ぶ
.\src は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)? D
..\src\deim.py
:
..\src\uicomponent\localelabel.py
34 個のファイルをコピーしました

# 仮想環境の立ち上げ(Pythonのバージョンは3.10以降にする)
$ py -3.12 -m venv ocrenv
.\ocrenv\Scripts\activate

# ライブラリのインストール
$ pip install -r ../requirements.txt

立ち上げ

以下のコマンドで立ち上げます。

flet run main.py

最初の実行時はライブラリのインストールも入るので時間がかかりますが、GUIアプリと同じ画面が立ち上がります。