web-dev-qa-db-ja.com

LinuxでPDFからOCRでテキストを抽出する方法は?

PDFインデックスで作成されていないものからテキストを抽出するにはどうすればよいですか?すべてテキストですが、何も検索または選択できません。Kubuntuを実行していますが、Okularはこの機能があります。

44

BSDライセンスの LinuxのCuneiformへの移植 OCRシステムで成功しました。

利用可能なバイナリパッケージがないようです。ソースからビルドする必要があります。 ImageMagick C++ライブラリをインストールして、基本的にすべての入力画像形式をサポートするようにしてください(そうしないと、BMPのみが受け入れられます)。

簡単なREADMEファイルを除いて、本質的に文書化されていないように見えますが、OCRの結果は非常に良いことがわかりました。それの良い点は、OCRテキストの位置情報を出力できることです。 hOCR 形式、つまり、PDFファイルの非表示レイヤーの正しい位置にテキストを戻すことができるようになります。この方法で、「検索可能な"テキストをコピーできるPDF。

私は hocr2pdf を使用して、元の画像のみのPDFとOCRの結果からPDFを再作成しました。残念ながら、プログラムは複数ページのPDFの作成をサポートしていないようです。そのため、それらを処理するスクリプトを作成する必要がある場合があります。

#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    cuneiform -f hocr -o "$base.html" "$page"
    hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done

# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf

rm -rf -- "$tmpdir"

上記のスクリプトは非常に初歩的なものであることに注意してください。たとえば、PDFメタデータは保持されません。

26

pdftotext が機能するかどうかを確認します。マシンにない場合は、poppler-utilsパッケージをインストールする必要があります

Sudo apt-get install poppler-utils 

pdf toolkit の使用法も見つかるかもしれません。

PDFソフトウェアの完全なリスト ここ ウィキペディアで。

編集:あなたがOCR機能を必要とするので、別の方法を試す必要があると思います。 (つまり、OCRを実行するLinux pdf2textコンバーターが見つかりませんでした)。

  • PDFを画像に変換する
  • OCRツールを使用して画像をテキストにスキャン

PDFを画像に変換

  • gs: コマンドの下 は、複数ページのpdfを個々のtiffファイルに変換する必要があります。

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = letter -sOutputFile = filename_%04d.tif -dNOPAUSE -dBATCH-ファイル名

  • ImageMagikユーティリティ :SuperUserサイトには、ImageMagikの使用に関する他の質問があり、変換を行うのに役立ちます。

    foo.pdf foo.pngを変換

OCRを使用して画像をテキストに変換します

ウィキペディアの OCRソフトウェアのリスト から取得

15
user4358

Google docs します now OCRを使用して、アップロードした画像/ pdfドキュメントをテキストに変換します。私はそれで大成功を収めました。

彼らは巨大な Google Books プロジェクトで使用されているOCRシステムを使用しています。

ただし、サイズが2 MBのPDFのみが処理のために受け入れられることに注意する必要があります。

更新
1。試してみるには、<2MBのPDFをウェブブラウザからGoogleドキュメントにアップロードしてください。
2。アップロードしたドキュメントを右クリックして、[Googleドキュメントで開く]をクリックします。
... Googleドキュメントはテキストに変換され、同じ名前の新しいファイルに出力されますが、Googleドキュメントタイプは同じフォルダにあります。

13
Russ

pypdfocrを使用するのが最善で最も簡単な方法です。PDFは変更されません。

pypdfocr your_document.pdf

最後に別のyour_document_ocr.pdf検索可能なテキストを使用して、希望する方法で。アプリは画像の品質を変更しません。オーバーレイテキストを追加して、ファイルのサイズを少し大きくします。

2018年11月3日更新:

pypdfocrはサポートされなくなりました 2016年以降 、そして維持されていないためにいくつかの問題に気づきました。 ocrmypdfmodule )は同様の働きをし、次のように使用できます。

ocrmypdf in.pdf out.pdf

インストールするには:

pip install ocrmypdf

または

apt install ocrmypdf
4

Geza Kovacsは、Jukkaが提案したように、基本的にはhocr2pdfを使用するスクリプトであるUbuntuパッケージを作成しましたが、セットアップが少し高速になります。

GezaのUbuntuから フォーラム投稿 パッケージの詳細...

リポジトリの追加とUbuntuへのインストール

Sudo add-apt-repository ppa:gezakovacs/pdfocr
Sudo apt-get update
Sudo apt-get install pdfocr

ファイルでocrを実行しています

pdfocr -i input.pdf -o output.pdf

コードのGitHubリポジトリ https://github.com/gkovacs/pdfocr/

3
ryanjdillon

PDFBeads はうまく機能します。このスレッド「 スキャンした画像を1つに変換PDFファイル 」で起動しました。白黒のブックスキャンの場合、次のことを行う必要があります。

  1. PDFのすべてのページの画像を作成します。上記のgsの例のいずれかが機能するはずです
  2. 各ページのhOCR出力を生成します。私はテッセラクトを使用しました(ただし、Cuneiformの方が効果があるようです)。
  3. 画像とhOCRファイルを新しいフォルダーに移動します。ファイル名は対応している必要があるため、file001.tifにはfile001.html、file002.tif file002.htmlなどが必要です。
  4. 新しいフォルダで、実行します

    pdfbeads * > ../Output.pdf
    

これにより、照合されたOCRされたPDFが親ディレクトリに配置されます。

2
scruss

tesseractを使用する別のスクリプト:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    tesseract "$base.tiff" $base
done

# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output

rm -rf -- "$tmpdir"
2
tolima

Asprise OCR Library は、ほとんどのバージョンのLinuxで動作します。 PDF入力および出力を検索PDFとして取得できます。

商用パッケージです。 Linux用のAsprise OCR SDKはこちら の無料コピーをダウンロードして、次のように実行します。

aocr.sh input.pdf pdf

注:スタンドアロンの「pdf」は出力形式を指定します。

免責事項:私は上記の製品を製造している会社の従業員です。

2
Asprise Support

= Apache PDFBox を試して、PDFファイルからテキストコンテンツを抽出します。画像がPDFファイルに埋め込まれている場合は、 ABBYY FineReader Engine CLI for Linux テキストを抽出します。

1