从Acrobat 9开始,Adobe工程师添加了一种新的OCR,称为ClearScan。

ClearScan优于可搜索图像OCR的优势在于大小和清晰度。
Clearscan的最大创新之处在于:


ClearScan不会用您的系统字体替换该字体。而是创建了
自定义字体来匹配
像素的视觉外观。1


除了Adobe以外,还有其他产品支持Clearscan或类似产品使用创建的自定义字体以匹配像素的视觉外观?

#1 楼




Smoothscan是一种将扫描的文本转换为矢量化的
输出形式的工具。由于打印的文本是用字体组装而成的,因此文档中每个
特定字母(例如'o')的形状都与其他
'o'相同。我们可以通过建立此类符号的表来利用这一点,并使用对该符号表条目的引用来表示每次出现的符号。这将节省大量
空间,并且在djvu的jb2模式和用于
PDF的JBIG2中使用了类似的想法。

smoothscan可以建立该表,但不填充带有原始栅格图像的表格,它将每个符号矢量化。矢量图像
比其等效的光栅看起来更平滑,并且可以缩放而不会引入像素化。这些属性导致较小的输出文件大小,并使扫描的文本图像更具可读性。

smoothscan将矢量化的图像保存为自定义TrueType字体,并且
将字体嵌入到输出pdf文件中。目前,每个符号已
映射到字体中的任意字母,但是在以后的版本中,您可以在每个符号上运行OCR,并确保将'o'图像与
关联。 <'/>

使用生成的字体编码字符。因此,它需要从源代码进行编译,其自述文件记录了以下相关性:
> potrace

fontforge(使用python支持编译):
python


在Ubuntu盒子上,其中大多数可以这样:

apt install libleptonica-dev libhpdf-dev potrace python-fontforge


带有示例图片的测试。加载abiword中的自述文件,将其打印到.ps文件,然后...


使用ghostscript将.ps文件转换为.tif, >
将其转换为单色.tif,(唯一的输入smoothscan接受) br />
输出:

gs -sDEVICE=tiffg4 -o README.tif README.ps
convert -monochrome README.tif README.mono.tif
smoothscan -o README.pdf README.mono.tif
wc -c README README.ps README.*tif README.pdf | head -n -1


结果README.pdf的第一段,显示矢量字体:




djvu文件格式
包含一个JB2
选项,该选项与ClearScan几乎相同。

使用上面的README.ps输入,smoothscan util返回以下结果:
出色的结果: README.djvu只有7K,(是wc -c输出的大小的1/3),并且看起来更清晰:
通过不使用单色.tiff
作为输入。该测试是不公平的比较。让我们用
单色栅格化的.tiff进行尝试:

  2432 README
 83516 README.ps
 33707 README.tif
 33618 README.mono.tif
 20394 README.pdf


现在输出小于6k,但看起来有点锯齿:



any2djvu的.pdf输出不同,.djvu输出即使在光栅化输入的情况下也可以选择文本
smoothscan需要在线
服务器来进行转换工作-这不是用于机密文档的合适工具。



评论


感谢您的精彩文章,我认为没有其他选择,但似乎有一些不错的选择+ 1 /可以接受

–爱德华(Eduard Florinescu)
16年5月14日在11:44



很好的答案,但是...您是否说过将PS文件转换为DJVU? Postscript文件是否已经矢量化并带有可选文本?

– Andrea Lazzarotto
16年5月15日在0:08

无论.ps文件是矢量化还是栅格化,我都不知道,这是打印到任何字样的内容(因为.ps文件的大小为85K,甚至比.tif大,所以我想它已经栅格化了)。我对当前的PS> DJVU any2djvu测试感到不满意,但仍在寻找针对光栅化文本测试djvu的方法。

–agc
16年5月15日在17:59



是否仍然支持smoothscan? git的最新提交日期为5年前的2013年

–raffaem
18-10-12在12:59

事后看来,使用包含第一个程序名称的示例文本会使djvu条目更加令人困惑...

–agc
18-10-12在13:17

#2 楼

具有ImageMagick,potrace和pdftools(免责声明:我是pdftools的作者)。假设您有一个名为input.pdf的输入PDF文件:


使用ImageMagick转换BMP文件中的每个页面: br />(可选)预处理图像文件:

mkdir bmp
magick convert -density 300 input.pdf -quality 100 ./bmp/input.bmp



光栅化每个BMP图像并将输出保存为PDF:

mkdir bmpproc
for /r %%i in (./bmp/*.bmp) do mkbitmap ./bmp/%%~ni.bmp --output ./bmpproc/%%~ni.pbm



将输出的PDF文件合并在一起:

pdftools --input-dir .\pdf --output merged.pdf --fitpaper

编辑:您可以获取PDF的版本向量化和OCRed。因此,与Adobe ClearScan的唯一区别是未嵌入字体(但是文本仍保存为“ Path”对象。


使用ImageMagick,将pdf转换为bmp图像(一个每页)

magick convert -monochrome -density 300 -alpha off input.pdf ./bmp/input.bmp


使用Potrace,后处理bmp,保存为pbm文件,并生成pdf的矢量化版本

mkdir pdf
for /r %%i in (./bmpproc/*.pbm) do potrace ./bmpproc/%%~ni.pbm -b pdf --output ./pdf/%%~ni.pdf



使用TesserAct,对您的pdf文件进行OCR

for /r %%i in (./bmpproc/*.pbm) do tesseract ./bmpproc/%%~ni.pbm ./ocred/%%~ni pdf


使用pdftools,将页面合并在一起ocr-ed和矢量化版本的单个文件:

for /r %%i in (./bmp/*.bmp) do mkbitmap ./bmp/%%~ni.bmp --output ./bmpproc/%%~ni.pbm
for /r %%i in (./bmpproc/*.pbm) do potrace ./bmpproc/%%~ni.pbm -b pdf --output ./vectorized/%%~ni.pdf



现在我们需要从ocr-ed文件中删除图像层( (因为我们将使用矢量化图像)。使用qPDF生成ocr-ed文件的未压缩版本:

qpdf --qdf --object-streams=disable ocr.pdf ocr-uncompressed.pdf


删除非图像使用以下python 3脚本从ocr-uncompressed.pdf文件中删除

python -m pdftools --input-dir ocred  --overwrite --fitpaper --output ocred.pdf --natural-sort
python -m pdftools --input-dir vectorized  --overwrite --fitpaper --output vectorized.pdf --natural-sort



现在使用pdftk,覆盖ocr-ed版本(无图像)到矢量化版本:

pdftk vectorized.pdf multibackground ocr-no-image.pdf output mergedlayer.pdf

就可以了!