Pythonでpdfを画像として認識しテキストを抽出を試してみる(pyocr)

2021.12.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

pdfのデータからepubを作成することを調べていて、

前回、Pythonを使ってPDFファイルからテキストを抽出する方法を試しました。

PDFファイルによっては抽出できないものもありましたので、今回はPDFとしてではなく、画像として認識し文字を抽出できるかどうか試していきたいと思います。

環境はMacOSを使用します。

準備

PyOCRのインストール

PyOCRは、Python用の光学式文字認識(OCR)ツールのラッパーです。

pip install pyocr

Tesseractのインストール

OCR engineであるTesseractをインストールします。

brew install tesseract

pdf2imageのインストール

PDFを画像ファイルに変換してくれるライブラリ pdf2imageをインストールします。

pip install pdf2image

Macの場合、poppler もインストールする必要がありました。

※ popplerはPDFレンダリングライブラリ

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2> /dev/null
brew install poppler

実行してみる

実験用コード

from PIL import Image
import sys
import pyocr
import pyocr.builders
import pdf2image

tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)

# The tools are returned in the recommended order of usage
tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))
# Ex: Will use tool 'libtesseract'


# pdfから画像オブジェクトに
images = pdf2image.convert_from_path("2019-11-Chaos_Engineering_Whitepaper.pdf", dpi=200, fmt='jpg')
lang = 'eng'
#lang = 'jpn'
# 画像オブジェクトからテキストに
for image in images:
    txt = tool.image_to_string(
        image,
        lang=lang,
        builder=pyocr.builders.TextBuilder()
    )
    print(txt)

英語のPDF

前回も使った  2019-11-Chaos_Engineering_Whitepaper のpdfを使用してみます。 

1ページ目:

このページのテキストを読み込むと、

と出力されました。

正しく読み込めてますね。

2ページ目

このページはどうでしょう。

最初の大きなDの文字以外は正しく読み込んでいます。

日本語を含むPDF

前回抽出できなかった 総務省のデジタル・ディバイド解消に向けた技術等研究開発 というファイルで試してみます。

日本語を含むので、ソースコードは

lang = 'jpn'

と変更します。

スクリプトを実行すると、

とテキストの抽出はできました。

ただ、全て抽出できたわけではありません。

2ページ目や3ページ目も同様に全て抽出できたわけではありませんでした。

最後に

OCRでPDFのテキスト抽出を試してみました。

細かなセッティングなどはしていないので精度はまちまちですが、それでも前進はした感じです。

最終的にやりたいことに向けて色々なパターンのファイルで実験してくしかなさそうだなと。興味のある方は是非色々と試してみてください、

※ 以下、colabで試した時のipynbファイルです

000667876.pdfの部分は自身の持つPDFファイルに変換する