Linux'ta bir PDF'den OCR ile metin nasıl çıkarılır?


Yanıtlar:


25

BSD lisanslı Linux Cuneiform OCR sistemi portuyla başarılı oldum .

Hiçbir ikili paket mevcut görünmüyor, bu nedenle kaynaktan oluşturmalısınız. ImageMagick C ++ kütüphanelerinin temelde herhangi bir giriş görüntü formatını desteklemesi için kurulu olduğundan emin olun (aksi takdirde sadece BMP'yi kabul eder).

Esasen kısa bir README dosyasından ayrı belgelenmemiş gözükse de, OCR sonuçlarını oldukça iyi buldum. Bununla ilgili güzel şey, OCR metni için konum bilgilerini hOCR biçiminde verebilmesidir , böylece metni bir PDF dosyasının gizli katmanında doğru konuma geri koymak mümkün hale gelir. Bu şekilde, metin kopyalayabileceğiniz "aranabilir" PDF'ler oluşturabilirsiniz.

Hocr2pdf dosyasını , yalnızca görüntü içeren orijinal PDF'ler ve OCR sonuçlarının dışında yeniden oluşturmak için kullandım . Ne yazık ki, program çok sayfalı PDF'ler oluşturmayı desteklemiyor gibi görünüyor, bu yüzden bunları işlemek için bir komut dosyası oluşturmanız gerekebilir:

#!/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"

Lütfen yukarıdaki komut dosyasının çok temel olduğunu unutmayın. Örneğin, herhangi bir PDF meta verisini korumaz.


Tanıma adımında hataları düzeltmek üzere yazım denetimi aşaması eklemek için bu komut dosyasını geliştirmek için herhangi bir fikir?
Gökhan Sever

@ Gökhan Sever, yanlış hecelenen / bilinmeyen kelimeleri değiştirmek için kullanıcının istendiği yere etkileşimli yazım denetimi eklemek mi istiyorsunuz? Ben aspell check --mode=html "$base.html"çivi yazısı çalıştırdıktan hemen sonra senaryodaki gibi bir şey ekleyerek yapabileceğini düşünüyorum .
Jukka Matilainen

Bu bir çözümdür. Ancak, metnin tüm içeriğini görmeden düzeltmeler yapmak zordur. Ocrefeeder içinde yerleşik bir arayüz görmek daha iyi olurdu.
Gökhan Sever,

1
Bu arada, karakter tanıma için tesseract kullanıyorum: çivi yazısı satırını değiştirerek: tesseract "$ page" "$ base" hocr
Gökhan Sever

1
Küçük düzeltme: En azından İngilizce dışındaki diğer diller için tesseract satırı, burada örneğin Almanca (= deu): "tesseract" $ page "" $ base "-l deu hocr` (elbette `` kaldırmak zorundasınız) .
Keks Dose

14

Pdftotext'in sizin için çalışıp çalışmadığını görün . Makinenizde değilse, poppler-utils paketini yüklemeniz gerekir.

sudo apt-get install poppler-utils 

Ayrıca pdf kullanım kitini de bulabilirsiniz .

Wikipedia'da burada pdf yazılımının tam listesi .

Düzenleme: Eğer bu yana gerek do OCR yetenekleri, sana farklı bir yol denemek gerekecek düşünüyorum. (yani, OCR yapan bir linux pdf2text dönüştürücüsü bulamadım).

  • PDF'yi bir resme dönüştür
  • Görüntüyü OCR araçlarını kullanarak metne tarayın

PDF'yi resme dönüştür

  • gs: Aşağıdaki komut çok sayfalı pdf dosyasını ayrı ayrı tiff dosyalarına dönüştürmelidir.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = letter -sOutputFile = dosyaadı_% 04d.tif -dNOPAUSE -dBATCH - dosyaadı

  • ImageMagik yardımcı programları : SuperUser sitesinde, ImageMagik'i kullanmanıza yardımcı olacak, dönüşümü yapmanıza yardımcı olabilecek başka sorular da var.

    foo.pdf dönüştürmek foo.png

Görüntüyü OCR ile metne dönüştür

Wikipedia'nın OCR yazılımı listesinden alınmış


2
Bu program aynı zamanda el yazısı metin belgeleri için de çalışır mı?
Ivo Flipse,

1
Hayır, OCR yetenekleri olduğunu sanmıyorum. Sadece pdf içine gömülü metni ayıklayabilirsiniz. Adam sayfası: linux.die.net/man/1/pdftotext
nagul

Evet, bu zaten gömülü metinle birlikte gelen pdf belgeleri için işe yarar. Benim durumum tam olarak olmadığı yerde.
Helder S Ribeiro

1
@ obvio171 OCR'ın sizin durumunuzda çalışması için bulabildiğim en iyi seçenek eklendi.
nagul,

12

Google docs olacak şimdi metne yüklenen görüntü / pdf belgeleri dönüştürmek için OCR kullanabilirsiniz. Bununla iyi bir başarı elde ettim.

Devasa Google Kitaplar projesi için kullanılan OCR sistemini kullanıyorlar .

Ancak, yalnızca 2 MB boyutunda PDF'lerin işleme için kabul edileceği belirtilmelidir.

Güncelleme
1. Denemek için, bir web tarayıcısından google doc'lara <2MB pdf yükleyin.
2. Yüklenen dokümanı sağ tıklayın ve "Google Dokümanlar ile Aç" ı tıklayın.
... Google Dokümanlar, metne dönüştürecek ve aynı adı taşıyan yeni bir dosyaya çıkacak ancak Google Dokümanlar aynı klasöre yazacaktır.


Cevap gerçekten Ubuntu'ya özgü değil ama gerçekten teşekkür etmek istiyorum: BRILLIANT çözümü! :)
Pitto

Bu gerçekten yardımcı oldu :) Dün 50 MB dosya yükledi ve işe yaradı. Boyut sınırını arttırmış gibi görünüyorlar.
Gaurav

2

Geza Kovacs, hocr2pdfJukka'nın önerdiği şekilde bir betik olan bir Ubuntu paketi hazırladı , ancak işleri biraz daha hızlı hale getiriyor.

Geza's'ın Ubuntu forum gönderisinden paketin detayları ...

Depo ekleme ve Ubuntu'da yükleme

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

Bir dosyada ocr çalıştırma

pdfocr -i input.pdf -o output.pdf

Https://github.com/gkovacs/pdfocr/ kodu için GitHub deposu


2

En iyi ve en kolay yolu kullanmak pypdfocrpdf değiştirmez kullanmaktır

pypdfocr your_document.pdf

Sonunda your_document_ocr.pdfaranabilir bir metin ile istediğiniz şekilde başka bir olacaktır . Uygulamaya, görüntünün kalitesini değiştirmez. Kaplama metnini ekleyerek dosyanın boyutunu biraz yükseltir.

Güncelleme 3 Kasım 2018:

pypdfocr2016’dan beri artık desteklenmiyor ve gözetim altında olmadığından bazı sorunlar olduğunu fark ettim. ocrmypdf( modül ) benzer bir iş yapar ve bu şekilde kullanılabilir:

ocrmypdf in.pdf out.pdf

Yüklemek:

pip install ocrmypdf

veya

apt install ocrmypdf

1

PDFBeads benim için iyi çalışıyor. “ Taranan Resimleri Tek Bir PDF Dosyasına Dönüştür ” bu başlık beni çalıştırıyor ve çalıştırıyor. Bir b & w kitap taraması için yapmanız gerekenler:

  1. PDF'nin her sayfası için bir resim oluşturun; Yukarıdaki gs örneklerinden herhangi biri çalışmalı
  2. Her sayfa için hOCR çıktısı oluşturun; Tesseract kullandım (ancak Çivi yazısı daha iyi çalışıyor gibi görünüyor).
  3. Görüntüleri ve hOCR dosyalarını yeni bir klasöre taşıyın; dosya adları uygun olmalıdır, bu nedenle file001.tif file001.html, file002.tif file002.html, vb.
  4. Yeni klasörde, çalıştır

    pdfbeads * > ../Output.pdf
    

Bu, harmanlanmış, OCR'd PDF'yi ana dizine koyacaktır.


1

tesseract kullanarak başka bir script:

#!/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"

1

Asprise OCR Library , Linux'un çoğu sürümünde çalışır. PDF girişini ve çıkışını arama PDF'si olarak alabilir.

Ticari bir paket. Linux için Asprise OCR SDK'nın bir kopyasını buradan indirin ve aşağıdaki şekilde çalıştırın:

aocr.sh input.pdf pdf

Not: Bağımsız 'pdf' çıktı formatını belirtir.

Feragatname: Yukarıdaki ürünü üreten şirketin bir çalışanıyım.


Bu gönderi, ürünün yapabileceğini belirtir; bu, yorum olarak gönderilmesi gereken yararlı bir ipucudur. Sorunun gerçekte nasıl çözüleceğini açıklamıyor; bu, hangi cevapların yapması gerektiğidir. Cevabınızı genişleterek birilerinin çözümü nasıl yapacağını görebiliyor musunuz?
fixer1234

Thanks @ fixer1234, komutu dahil etmek için düzenledim.
Asprise Support

0

PDF Dosyasından metin içeriği çıkarmak için Apache PDFBox'ı deneyin . PDF dosyalarına gömülü resimler olması durumunda metin çıkarmak için ABBYY FineReader Engine CLI kullanın .


ABBYY OCR'ı oldukça acınacak buldum, denedim en az yetenekli programlardan biri. Bu, tipik gövde metni boyutu standart yazı metninin bir gerçekten temiz görüntü ile yeterli olabilir hiçbir karışık yazı, karışık boyutları, karmaşık düzen, grafik, çizgi vb
fixer1234

Ya da denedim, iyi çalışıyor. Bazı şüphelerim var, yardım edebilir misin?
Praveen Kumar KR

İhtiyacınız olan şey buradaki diğer cevaplar kapsamında değilse, yapılacak en iyi şey kendi sorunuzu sormaktır. Bu, çok fazla göze maruz kalmasını sağlayacaktır.
fixer1234
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.