前のページでは PDF ファイルから pdftotext によって文字列を抽出しました.PDF ファイルに文字列の情報があればその方法で可能ですが,印刷物をスキャンして(OCR 処理をせずに)作成した PDF ファイルの場合は,このページの手順に従って PDF ファイルをページごとに PNG 形式などの画像に変換すればよいでしょう.このページの作業を行うことによって,以前のページで説明した tesseract によって文字認識ができるようになります.
Python で PDF を画像に変換するためには macOS にあらかじめ poppler をインストールする必要があります.poppler のインストール方法は前のページを参照してください.
poppler のインストールができたら,pip
を使って pdf2image をインストールします.
(py39ocr) rinsaka@MacStudio2022 pyocr % pip install pdf2image ⏎
Collecting pdf2image
Downloading pdf2image-1.16.0-py3-none-any.whl (10 kB)
Requirement already satisfied: pillow in /Users/rinsaka/miniforge3/envs/py39ocr/lib/python3.9/site-packages (from pdf2image) (9.2.0)
Installing collected packages: pdf2image
Successfully installed pdf2image-1.16.0
(py39ocr) rinsaka@MacStudio2022 pyocr %
サンプルデータをあらかじめこのページを参考に準備してください.以降でもサンプルデータの PDF ファイルが tesseract_data フォルダに保存されている状況で作業を行います.さらに,PNG ファイルの書き出し用に output フォルダを作成しておきます.
英文が入力された 2 ページの PDF ファイルをページごとに PNG ファイルに変換します.
import os
from pdf2image import convert_from_path
file_path = os.path.sep.join(['tesseract_data', 'en_2.pdf'])
pages = convert_from_path(file_path, 300) # 300dpi にする
for i, page in enumerate(pages):
output_path = os.path.sep.join(['output', f'en-{i+1:03d}.png'])
page.save(output_path, "PNG")
print(output_path)
output/en-001.png output/en-002.png
日本語の PDF ファイルであっても同様です.
import os
from pdf2image import convert_from_path
file_path = os.path.sep.join(['tesseract_data', 'ja_1.pdf'])
pages = convert_from_path(file_path, 300) # 300dpi にする
for i, page in enumerate(pages):
output_path = os.path.sep.join(['output', f'ja-{i+1:03d}.png'])
page.save(output_path, "PNG")
print(output_path)
output/ja-001.png