Python入門トップページ


目次

  1. データの準備
  2. macOS 編
    1. Tesseract による画像内文字認識
    2. PDF からの文字列抽出
    3. PDFの画像への変換
  3. Windows 編
    1. Tesseract による画像内文字認識
    2. PDF からの文字列抽出
    3. PDFの画像への変換

画像内文字認識と PDF からの文字列抽出

PDFの画像への変換(macOS 編)

前のページでは PDF ファイルから pdftotext によって文字列を抽出しました.PDF ファイルに文字列の情報があればその方法で可能ですが,印刷物をスキャンして(OCR 処理をせずに)作成した PDF ファイルの場合は,このページの手順に従って PDF ファイルをページごとに PNG 形式などの画像に変換すればよいでしょう.このページの作業を行うことによって,以前のページで説明した tesseract によって文字認識ができるようになります.

目次に戻る

poppler と pdf2image のインストール

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 %

目次に戻る

Python で PDF から PNG に変換

サンプルデータをあらかじめこのページを参考に準備してください.以降でもサンプルデータの 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

目次に戻る