Làm cách nào để trích xuất văn bản với OCR từ PDF trên Linux?


Câu trả lời:


25

Tôi đã thành công với hệ thống Cuneiform OCR được cấp phép BSD của Linux .

Không có gói nhị phân dường như có sẵn, vì vậy bạn cần xây dựng nó từ nguồn. Hãy chắc chắn đã cài đặt các thư viện ImageMagick C ++ để hỗ trợ cho bất kỳ định dạng hình ảnh đầu vào nào (nếu không nó sẽ chỉ chấp nhận BMP).

Mặc dù về cơ bản, nó dường như không có giấy tờ ngoài một tệp README ngắn gọn, tôi đã thấy kết quả OCR khá tốt. Điều thú vị ở đây là nó có thể xuất thông tin vị trí cho văn bản OCR ở định dạng hOCR , để có thể đưa văn bản trở lại đúng vị trí trong một lớp ẩn của tệp PDF. Bằng cách này, bạn có thể tạo các tệp PDF "có thể tìm kiếm" từ đó bạn có thể sao chép văn bản.

Tôi đã sử dụng hoc2pdf để tạo lại các tệp PDF ra khỏi các kết quả PDF và hình ảnh OCR ban đầu. Đáng buồn thay, chương trình không xuất hiện để hỗ trợ tạo các tệp PDF nhiều trang, vì vậy bạn có thể phải tạo một tập lệnh để xử lý chúng:

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

Xin lưu ý rằng các kịch bản trên là rất thô sơ. Ví dụ, nó không giữ lại bất kỳ siêu dữ liệu PDF nào.


Bất kỳ ý tưởng để cải thiện tập lệnh này để thêm giai đoạn kiểm tra chính tả để sửa lỗi trong bước nhận dạng?
Gotkhan Sever

@ Gökhan Sever, bạn có nghĩa là thêm kiểm tra chính tả tương tác trong đó người dùng được nhắc thay thế cho các từ sai chính tả / không xác định? Tôi nghĩ bạn có thể làm điều đó bằng cách thêm một cái gì đó giống như aspell check --mode=html "$base.html"trong kịch bản ngay sau khi chạy chữ hình nêm.
Jukka Matilainen

Đây là một giải pháp. Tuy nhiên, không nhìn thấy toàn bộ bối cảnh của văn bản, thật khó để chỉnh sửa. Sẽ tốt hơn khi thấy một giao diện được xây dựng trong ocrfeeder.
Gotkhan Sever

1
Nhân tiện, tôi sử dụng tesseract để nhận dạng ký tự: thay thế dòng chữ hình nêm bằng: tesseract "$ page" "$ base" hoc
Sever

1
Hiệu chỉnh nhỏ: Dòng dành cho tesseract ít nhất là đối với các ngôn ngữ khác ngoài tiếng Anh, ở đây, ví dụ tiếng Đức (= deu) là: `tesseract" $ page "" $ base "-l deu hoc` (tất nhiên bạn phải xóa` `) .
Keks Liều

14

Xem nếu pdftotext sẽ làm việc cho bạn. Nếu nó không có trên máy của bạn, bạn sẽ phải cài đặt gói poppler-utils

sudo apt-get install poppler-utils 

Bạn cũng có thể tìm thấy bộ công cụ pdf sử dụng.

Một danh sách đầy đủ các phần mềm pdf ở đây trên wikipedia.

Chỉnh sửa: Vì bạn cần các khả năng OCR, tôi nghĩ bạn sẽ phải thử một chiến thuật khác. (tức là tôi không thể tìm thấy trình chuyển đổi linux pdf2text có OCR).

  • Chuyển đổi pdf thành hình ảnh
  • Quét hình ảnh thành văn bản bằng các công cụ OCR

Chuyển đổi pdf thành hình ảnh

  • gs: Lệnh dưới đây sẽ chuyển đổi nhiều trang pdf thành các tệp tiff riêng lẻ.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = letter -sOutputFile = filename_% 04d.tif -dNOPAUSE -dBATCH - tên tệp

  • Tiện ích ImageMagik : Có các câu hỏi khác trên trang web SuperUser về việc sử dụng ImageMagik mà bạn có thể sử dụng để giúp bạn thực hiện chuyển đổi.

    chuyển đổi foo.pdf foo.png

Chuyển đổi hình ảnh thành văn bản với OCR

Lấy từ danh sách phần mềm OCR của Wikipedia


2
Chương trình này cũng làm việc cho các tài liệu văn bản viết tay?
Ivo Flipse

1
Không, tôi không nghĩ rằng nó có khả năng OCR. Nó chỉ có thể trích xuất văn bản được nhúng trong pdf. Trang con người: linux.die.net/man/1/pdftotext
nagul

Vâng, điều này hoạt động cho các tài liệu pdf đã đi kèm với văn bản được nhúng. Trường hợp của tôi là chính xác một trường hợp không.
Helder S Ribeiro

1
@ obvio171 Đã thêm tùy chọn tốt nhất tôi có thể tìm thấy để OCR hoạt động trong trường hợp của bạn.
nagul

12

Tài liệu Google hiện sẽ sử dụng OCR để chuyển đổi tài liệu hình ảnh / pdf đã tải lên của bạn thành văn bản. Tôi đã có thành công tốt với nó.

Họ đang sử dụng hệ thống OCR được sử dụng cho dự án Google Sách khổng lồ .

Tuy nhiên, cần lưu ý rằng chỉ các tệp PDF có kích thước 2 MB mới được chấp nhận để xử lý.

Cập nhật
1. Để dùng thử, hãy tải lên <2MB pdf lên tài liệu google từ trình duyệt web.
2. Nhấp chuột phải vào tài liệu đã tải lên và nhấp vào "Mở bằng Google Docs".
... Google Docs sẽ chuyển đổi thành văn bản và xuất thành một tệp mới có cùng tên nhưng Google Docs gõ vào cùng một thư mục.


Câu trả lời không thực sự cụ thể về Ubuntu nhưng tôi muốn thực sự cảm ơn bạn: Giải pháp BRILLIANT! :)
Pitto

Điều này thực sự hữu ích :) Tôi đã tải lên một tệp 50 MB ngày hôm qua và nó đã hoạt động. Có vẻ như họ đã tăng giới hạn kích thước.
Gaurav

2

Geza Kovacs đã tạo ra một gói Ubuntu về cơ bản là một tập lệnh sử dụng hocr2pdfnhư Jukka đề xuất, nhưng làm cho mọi thứ nhanh hơn một chút để thiết lập.

Từ bài đăng trên diễn đàn Ubuntu của Geza với chi tiết về gói ...

Thêm kho lưu trữ và cài đặt trong Ubuntu

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

Chạy ocr trên một tập tin

pdfocr -i input.pdf -o output.pdf

Kho lưu trữ GitHub cho mã https://github.com/gkovacs/pdfoc/


2

Cách tốt nhất và dễ nhất là sử dụng pypdfocrnó không thay đổi pdf

pypdfocr your_document.pdf

Cuối cùng, bạn sẽ có một your_document_ocr.pdfcách khác mà bạn muốn với văn bản có thể tìm kiếm. Ứng dụng không thay đổi chất lượng của hình ảnh. Tăng kích thước của tệp một chút bằng cách thêm văn bản lớp phủ.

Cập nhật ngày 3 tháng 11 năm 2018:

pypdfocrkhông còn được hỗ trợ kể từ năm 2016 và tôi nhận thấy một số vấn đề do không được lưu ý. ocrmypdf( mô-đun ) thực hiện một công việc quen thuộc và có thể được sử dụng như thế này:

ocrmypdf in.pdf out.pdf

Để cài đặt:

pip install ocrmypdf

hoặc là

apt install ocrmypdf

1

PDFBead hoạt động tốt cho tôi. Chủ đề này Chuyển đổi hình ảnh được quét thành một tệp PDF duy nhất giúp tôi khởi động và chạy. Để quét sách b & w, bạn cần:

  1. Tạo một hình ảnh cho mỗi trang của PDF; một trong những ví dụ gs ở trên sẽ hoạt động
  2. Tạo đầu ra hOCR cho mỗi trang; Tôi đã sử dụng tesseract (nhưng lưu ý rằng Cuneiform dường như hoạt động tốt hơn).
  3. Di chuyển hình ảnh và các tệp hOCR sang một thư mục mới; tên tệp phải tương ứng, vì vậy file001.tif cần file001.html, file002.tif file002.html, v.v.
  4. Trong thư mục mới, hãy chạy

    pdfbeads * > ../Output.pdf
    

Điều này sẽ đặt PDF đối chiếu, OCR'd trong thư mục mẹ.


1

một tập lệnh khác sử dụng 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"

1

Thư viện OCR Asprise hoạt động trên hầu hết các phiên bản Linux. Nó có thể lấy đầu vào và đầu ra PDF dưới dạng tìm kiếm PDF.

Đó là một gói thương mại. Tải xuống một bản miễn phí SDK Asident OCR cho Linux tại đây và chạy theo cách này:

aocr.sh input.pdf pdf

Lưu ý: 'pdf' độc lập chỉ định định dạng đầu ra.

Tuyên bố miễn trừ trách nhiệm: Tôi là nhân viên của công ty sản xuất sản phẩm trên.


Bài đăng này nói rằng sản phẩm có thể làm điều đó, đó là một gợi ý hữu ích nên được đăng dưới dạng bình luận. Nó không giải thích làm thế nào để thực sự giải quyết vấn đề, đó là những gì câu trả lời nên làm. Bạn có thể mở rộng câu trả lời của mình để ai đó có thể thấy cách thực hiện giải pháp không?
fixer1234

Cảm ơn @ fixer1234, tôi đã chỉnh sửa nó để bao gồm lệnh.
Hỗ trợ bất ngờ 12/03/2015

0

Hãy thử Apache PDFBox để trích xuất nội dung văn bản từ Tệp PDF. Trong trường hợp hình ảnh được nhúng vào tệp PDF, hãy sử dụng ABBYY FineReader Engine CLI cho Linux để trích xuất văn bản.


Tôi thấy ABBYY OCR khá đáng thương, một trong những chương trình có khả năng thấp nhất mà tôi đã thử. Nó có thể phù hợp với một hình ảnh thực sự rõ ràng về văn bản phông chữ tiêu chuẩn có kích thước văn bản cơ thể điển hình, không có phông chữ hỗn hợp, kích thước hỗn hợp, bố cục phức tạp, đồ họa, đường nét, v.v.
fixer1234

Ya tôi cũng đã thử, nó hoạt động tốt. Tôi có một số nghi ngờ, bạn có thể giúp tôi?
Praveen Kumar KR

Nếu những gì bạn cần không được đề cập trong các câu trả lời khác ở đây, điều tốt nhất để làm là đặt câu hỏi của riêng bạn. Điều đó sẽ khiến nó tiếp xúc với rất nhiều mắt.
fixer1234
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.