🐥

Google Colabを用いたNDLOCRアプリのVersion 2を作成しました。

に公開
10

お知らせ

ノートブックのURL

https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/ndl_ocr_v2.ipynb

2022-07-06

使い方のデモ動画を作成しました。

https://youtu.be/46p7ZZSul0o

またルビのテキスト化機能が追加されました。

https://zenn.dev/nakamura196/articles/2c94cc7589c503

概要

Google Colabを用いたNDLOCRアプリを作成し、以下の記事で紹介しました。

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

今回は、上記ノートブックの改良版であるVersion 2を作成しましたので紹介します。以下からノートブックにアクセスいただけます。

https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/ndl_ocr_v2.ipynb

特徴

複数の入力形式に対応しました。以下のオプションを使用できます。

  • 画像
    • 単一の画像ファイルのURLを指定する場合
    • 単一の画像ファイルをアップロードする場合
    • 複数の既にダウンロード済みの画像ファイルを対象にする場合(Sigle input dir mode)
    • 複数の既にダウンロード済みの画像ファイルを対象にする場合(Image file mode: 単体の画像ファイルを入力として与える場合)
  • PDF
    • 単一のPDFファイルのURLを指定する場合
    • 単一のPDFファイルをアップロードする場合
    • 単一の既にダウンロード済みのPDFファイルを対象にする場合
    • 複数の既にダウンロード済みのPDFファイルを格納したフォルダを指定する場合
  • IIIF
    • IIIFマニフェストファイルのURLを指定する場合(本記事執筆時点ではPresentation API v2のみ)

PDFファイルやIIIFマニフェストファイルの入力をサポートします。また、Version 1では事前にGoogle Driveに画像ファイルをアップロードする必要がありましたが、Version 2では画像ファイルのURLの指定や、アップロードフォームによる登録機能を提供しています。

さらに、上記のいくつかのオプションにおいて、実行後に推論結果をマージしたテキストファイルをダウンロードする機能を提供します。ダウンロードしたテキストファイルをVoyantツールなどの他のアプリケーションに使用することができます。(なお本格的な分析にあたっては、認識結果の修正やトークナイズの方法など、各種調整が必要です。)

使用方法

1.初期セットアップ

以下に示す2つの実行ボタンを押してください。Googleドライブのアクセス許可が求められるので、許可してください。

2.設定

上述したオプションから、目的に応じたものを選択してください。各オプションに付与されたリンクをクリックすると、当該オプションの設定画面に遷移します。

実行後

実行後は、以下のように、出力フォルダが表示されます。設定において選択したprocessの値が「@(アットマーク)」とともにフォルダ名に付与されます。また既に出力フォルダが存在する場合には、フォルダ名の末尾に実行時間に基づくIDが「_(アンダーバー)」とともに付与されます。

また単一のファイルを処理するオプションを選択した場合、実行後、以下のようにテキストファイルがダウンロードされます。

まとめ

NDLOCRアプリの利用にあたって、参考になりましたら幸いです。

Discussion

ccocco

いつもNDLOCRアプリの方を研究利用させていただいてます。
2週間ほど前までは、アプリが利用できていたのですが、数日前からこのようなエラーコードがでて利用することができません。複数の入力方式の方を試してみたのですが、すべてエラーコードが出てきました。
自分以外にも同様のエラーがでている方がいるそうです。
対応の程していただければ幸いです。


IndexError Traceback (most recent call last)
<ipython-input-6-b8576dfd6394> in <cell line: 10>()
8 input_file = next(iter(uploaded))
9
---> 10 ins = Task.pdfFromLocal(input_file, output_dir, process, ruby)
11 message(ins)

2 frames
/content/ndlocr_cli/task.py in merge_txt_and_download(self)
297 output_dir = self.output_dir
298 tmp_dirs = glob.glob(os.path.join(output_dir, "*/txt"))
--> 299 txt_dir = tmp_dirs[0]
300
301 file_id = os.path.basename(os.path.dirname(txt_dir))

IndexError: list index out of range

(20237/20)不具合の対応をしていただきありがとうございます。

ken202309ken202309

OCRを試してみようと思い手順に従ってやったつもりですがエラーがでてしまうのですが何が悪いのか分からない状態です。
単一のPDFファイルのURLを指定する場合を実行

/usr/local/lib/python3.10/dist-packages/urllib3/connectionpool.py:1095: InsecureRequestWarning: Unverified HTTPS request is being made to host 'dglb01.ninjal.ac.jp'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings
warnings.warn(

OCR処理を実行しています。


IndexError Traceback (most recent call last)
<ipython-input-2-2325c3705cde> in <cell line: 8>()
6 ruby = False #@param {type:"boolean"}
7
----> 8 ins = Task.pdfFromUrl(url, output_dir, process, ruby)
9 message(ins)

2 frames
/content/ndlocr_cli/task.py in merge_txt_and_download(self)
297 output_dir = self.output_dir
298 tmp_dirs = glob.glob(os.path.join(output_dir, "*/txt"))
--> 299 txt_dir = tmp_dirs[0]
300
301 file_id = os.path.basename(os.path.dirname(txt_dir))

IndexError: list index out of range

nakamura196nakamura196

ご連絡ありがとうございます。また不具合が生じてしまい、ご迷惑をおかけして申し訳ありません。

本ノートブックの不具合について、不完全ではありますが、修正しました。

またノートブックに記載しましたが、新しいノートブック(NDLOCRのver.2.1を使用したもの。これまではNDLOCRのver.1を使用していました。)を用意しました。今後はこちらをお使いいただけますと幸いです。

引き続き不具合などが生じるかと思いますが、都度ご連絡いただけますと幸いです。

今後とも何卒よろしくお願いいたします。

ken202309ken202309

早急なご対応ありがとうございます。利用させていただきます。

lvisddlvisdd

はじめまして。
新しいノートブック(NDLOCRのver.2.1)を「すべてのセルを実行」したところ、以下のエラーが出力されました。

も問題ないようですが、原因について心当たりあるでしょうか?

単一の画像ファイルのURLを指定する場合

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-3-d994e66aa93c> in <cell line: 0>()
     10 task = Task(出力フォルダ, process, ruby)
     11 task.download_image(url, f"{str(1).zfill(4)}.jpg")
---> 12 task.run_common_pipeline()

3 frames
/usr/local/lib/python3.11/dist-packages/ldas/iiif.py in convert_ndl_ocr_xml_to_iiif_manifest(xml_path, base_manifest_path, output_manifest_path)
    197 
    198         # Load XML content
--> 199         with open(xml_path, "r") as file:
    200             content = file.read()
    201 

FileNotFoundError: [Errno 2] No such file or directory: '/content/output/8694ecae-0af7-11f0-abe4-0242ac1c000c/8694ecae-0af7-11f0-abe4-0242ac1c000c/xml/8694ecae-0af7-11f0-abe4-0242ac1c000c.xml'
lvisddlvisdd

2025-04-02 の更新内容で、動作することを確認しました。
ご対応ありがとうございます。

rusty1921rusty1921

お世話になります。

「単一の既にダウンロード済みのPDFファイルを対象にする場合」にて以下のエラーが表示され、出力ができません。恐れ入りますが、対応策をご教示いただけないでしょうか。よろしくお願いいたします。


UnboundLocalError Traceback (most recent call last)
<ipython-input-38-cffde1c0c446> in <cell line: 0>()
9
10 task = Task(出力フォルダ, process, ruby)
---> 11 task.prepare_pdf(入力ファイル)
12 task.run_common_pipeline()

<ipython-input-36-96f4af5bd585> in prepare_pdf(self, pdf_path_, 画像の長辺をリサイズするサイズ)
345
346 # 画像を保存
--> 347 img.save(target_name)
348
349 # 元の画像ファイルを削除

UnboundLocalError: cannot access local variable 'img' where it is not associated with a value

tabetabe

はじめまして。NDLOCRを研究に使用させていただいている者です。以前は何のトラブルもなく使用できたのですが、久しぶりに使ったところ、以下2点でトラブルが起きています。恐れ入りますが、アドバイスを頂くことは可能でしょうか?

1)初期セットアップが短時間で初期化(?)されてしまう。
初回のみ必要とありますが、維持できるのはほんの数十分で、1日に何度もやり直しが必要な状況です。

2)URL、画像ファイルともにエラーが出て使用できない。
以下のようなエラーが表示されてしまい、出力が出来ません。ドライブにはからのフォルダが生成されるのみで、PDFやテキストデータは入っていません。


FileNotFoundError Traceback (most recent call last)
<ipython-input-4-d994e66aa93c> in <cell line: 0>()
10 task = Task(出力フォルダ, process, ruby)
11 task.download_image(url, f"{str(1).zfill(4)}.jpg")
---> 12 task.run_common_pipeline()

3 frames
/usr/local/lib/python3.11/dist-packages/ldas/iiif.py in convert_ndl_ocr_xml_to_iiif_manifest(xml_path, base_manifest_path, output_manifest_path)
197
198 # Load XML content
--> 199 with open(xml_path, "r") as file:
200 content = file.read()
201

FileNotFoundError: [Errno 2] No such file or directory: '/content/output/21a53658-37e0-11f0-ae50-0242ac1c000c/21a53658-37e0-11f0-ae50-0242ac1c000c/xml/21a53658-37e0-11f0-ae50-0242ac1c000c.xml'

うまく説明できているか分かりませんが、直近でコメントを残している方々とほぼ同じ状況かと思います。
改善法など、何かしらアドバイスを頂けますと幸いです。

よろしくお願いいたします。

nakamura196nakamura196

ご連絡ありがとうございます。また不具合申し訳ありません。

修正したいと思いますので、少々お時間をいただけますと幸いです。

AdachiAdachi

こんにちは、今日PDFをアップロードしてOCRしてみましたが、以下のエラーがありました。

/usr/local/lib/python3.12/dist-packages/ldas/iiif.py in convert_ndl_ocr_xml_to_iiif_manifest(xml_path, base_manifest_path, output_manifest_path)
197
198 # Load XML content
--> 199 with open(xml_path, "r") as file:
200 content = file.read()
201
FileNotFoundError: [Errno 2] No such file or directory: '/content/output/726c4448-7e38-11f0-94a3-0242ac1c000c/726c4448-7e38-11f0-94a3-0242ac1c000c/xml/726c4448-7e38-11f0-94a3-0242ac1c000c.xml'

単一の画像ファイルをアップロードする場合でも同じようなエラーもありました。

FileNotFoundError Traceback (most recent call last)
/tmp/ipython-input-2176299058.py in <cell line: 0>()
20 get_ipython().system('mv "{input_file}" "{opath}"')
21
---> 22 task.run_common_pipeline()
3 frames
/usr/local/lib/python3.12/dist-packages/ldas/iiif.py in convert_ndl_ocr_xml_to_iiif_manifest(xml_path, base_manifest_path, output_manifest_path)
197
198 # Load XML content
--> 199 with open(xml_path, "r") as file:
200 content = file.read()
201
FileNotFoundError: [Errno 2] No such file or directory: '/content/output/087a47d6-7e3a-11f0-94a3-0242ac1c000c/087a47d6-7e3a-11f0-94a3-0242ac1c000c/xml/087a47d6-7e3a-11f0-94a3-0242ac1c000c.xml'

よろしくお願い致します。