如何在Linux上的PDF中使用OCR提取文本?


Answers:


25

我已经在Cuneiform OCR系统的BSD许可的Linux端口上取得了成功。

似乎没有可用的二进制包,因此您需要从源代码构建它。确保安装了ImageMagick C ++库,以实质上支持任何输入图像格式(否则它将仅接受BMP)。

除了简短的README文件外,它似乎基本上没有记录在案,但我发现OCR结果相当不错。关于它的好处是,它可以以hOCR格式输出OCR文本的位置信息,从而可以将文本放回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元数据。


有什么想法可以改进此脚本以添加拼写检查阶段以更正识别步骤中的错误吗?
格克汗Sever的

@GökhanSever,您是说要在提示用户替换拼写错误/未知单词的地方添加交互式拼写检查吗?我认为您可以通过aspell check --mode=html "$base.html"在运行楔形文字之后立即在脚本中添加类似内容来实现。
Jukka Matilainen

这是一种解决方案。但是,如果不看全文,就很难进行更正。看到ocrfeeder中内置的界面会更好。
格克汗Sever的

1
顺便说一句,我使用的Tesseract字符识别:用替换楔形文字行:正方体“$页”,“$基地” HOCR
格克汗Sever的

1
较小的更正:tesseract的行至少适用于英语以外的其他语言,例如德语(= deu)为:`tesseract“ $ page”“ $ base” -l deu hocr`(当然,您必须删除``) 。
Keks Dose 2012年

14

查看pdftotext是否适合您。如果不在您的计算机上,则必须安装poppler-utils软件包

sudo apt-get install poppler-utils 

您可能还会找到使用的pdf工具包

PDF软件的完整列表在这里维基百科。

编辑:由于您确实需要 OCR功能,因此我认为您必须尝试其他方法。(即我找不到执行OCR的linux pdf2text转换器)。

  • 将pdf转换为图像
  • 使用OCR工具将图像扫描为文本

将pdf转换为图像

  • gs:以下命令应将多页pdf转换为单独的tiff文件。

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE =字母-sOutputFile = filename_%04d.tif -dNOPAUSE -dBATCH-文件名

  • ImageMagik实用程序:在SuperUser网站上,还有其他有关使用ImageMagik的问题,这些问题可能会帮助您进行转换。

    转换foo.pdf foo.png

使用OCR将图像转换为文本

摘自Wikipedia的OCR软件列表


2
此程序还可以用于手写文本文档吗?
Ivo Flipse,2009年

1
不,我不认为它具有OCR功能。它可以只提取pdf中嵌入的文本。手册页:linux.die.net/man/1/pdftotext
nagul

是的,这适用于已经嵌入文本的pdf文档。我的情况恰恰是没有的情况。
hsribei

1
@ obvio171添加了我可以找到的最佳选择,以使OCR可以在您的情况下工作。
nagul

12

Google文档现在将使用OCR将您上传的图片/ pdf文档转换为文本。我已经取得了成功。

他们正在使用用于庞大的Google图书项目的OCR系统。

但是,必须注意,仅2 MB大小的PDF将被接受进行处理。

更新
1.要试用,请从网络浏览器上传<2MB pdf到google docs。
2.右键单击上载的文档,然后单击“使用Google文档打开”。
... Google Docs将转换为文本并输出到具有相同名称但Google Docs在同一文件夹中键入的新文件。


答案不是真的特定于Ubuntu,但我真的要谢谢你:BRILLIANT解决方案!:)
Pitto

这真的很有帮助:)我昨天上传了一个50 MB的文件,它可以正常工作。看起来他们已经增加了大小限制。
Gaurav

2

Geza Kovacs制作了一个Ubuntu软件包,该软件包基本上是hocr2pdfJukka所建议的脚本,但是使安装过程变得更快。

从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/


2

最好和最简单的使用方法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

1

PDFBeads对我来说效果很好。这个线程“ 将扫描的图像转换为单个PDF文件 ”使我启动并运行。对于黑白书籍扫描,您需要:

  1. 为PDF的每一页创建一个图像;上面的gs示例之一都可以工作
  2. 为每个页面生成hOCR输出;我使用过tesseract(但请注意,楔形文字似乎效果更好)。
  3. 将图像和hOCR文件移动到新文件夹;文件名必须对应,因此file001.tif需要file001.html,file002.tif file002.html等。
  4. 在新文件夹中,运行

    pdfbeads * > ../Output.pdf
    

这会将整理后的OCR格式的PDF放在父目录中。


1

使用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

Asprise OCR库可在大多数Linux版本上使用。它可以将PDF输入和输出作为搜索PDF。

这是一个商业包装。在此处下载适用于LinuxAsprise OCR SDK的免费副本,并通过以下方式运行它:

aocr.sh input.pdf pdf

注意:独立的“ pdf”指定输出格式。

免责声明:我是生产上述产品的公司的雇员。


这篇文章指出该产品可以做到,这是一个有用的提示,应作为评论发布。它没有解释如何真正解决问题,这是答案应该做的。您能否扩大答案,以便其他人可以看到解决方案?
fixer1234 2015年

感谢@ fixer1234,我对其进行了编辑以包括命令。
Asprise Support 2015年

0

尝试使用Apache PDFBox从PDF文件提取文本内容。如果图像嵌入到PDF文件中,请使用适用于Linux的ABBYY FineReader Engine CLI提取文本。


我发现ABBYY OCR非常可怜,这是我尝试过的功能最差的程序之一。这可能是足够的具有典型的正文大小的标准字体文字的真正干净的形象,没有混合字体,混合尺寸,复杂的布局,图形,线条等
fixer1234

是的,我也尝试过,效果很好。我有些怀疑,你能帮我吗?
Praveen Kumar KR

如果此处其他答案未涵盖您所需要的内容,那么最好的办法是问您自己的问题。这将使它暴露于很多眼睛。
fixer1234
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.