如何识别扫描的 PDF 文件中的图像?
Posted
技术标签:
【中文标题】如何识别扫描的 PDF 文件中的图像?【英文标题】:How to recognize images within scanned PDF files? 【发布时间】:2017-06-26 13:40:00 【问题描述】:我正在尝试识别扫描的 PDF 文件中的图像(而不是文本),最好使用 python。有没有办法做到这一点?举个简单的例子,假设您浏览了一本书的一章。页面有三种可能的选项:
-
仅包含文字
仅包含一张(或多张)图片
包含文字和图片
我想输出属于类别 2 或 3 的页面列表。
【问题讨论】:
这在很大程度上取决于您的图像和文本。您需要查看您的数据集。可能是图像有很多颜色。文本可以有颜色,但通常不多。它也可能是你可以在比字符大的东西周围画出的最大的白色边框。在这种情况下,“白色”需要“足够白,以允许传感器噪声”......但仍然如此。这将识别方形图片。也许没有那么多图表。 提供一些例子如何让我们都在同一个页面上? 对于案例 2,pdf 是否有任何文本?像页码或标题之类的?只有当这两种情况之间有明确的界限时,您才能应用机器学习。为了给您一个抽象的想法,需要将pdf转换为图像。然后将图像转换为灰度,然后转换为矢量形式,其中每个像素都表示为一个数组。如果根本没有文本,则与带有文本和图像的向量相比,向量将具有不同的模式。这种模式被神经网络拾取并因此学习。 @MarkSetchell archive.org/details/adventureshuckle00twaiiala 有一个可下载的 pdf 文件 对不起那个马克 - 你的回答似乎很好! 【参考方案1】:我的想法是寻找普通文本中不存在的特征——可能是跨越多行的垂直黑色元素。我选择的工具是 ImageMagick,它安装在大多数 Linux 发行版上,可用于 macOS 和 Windows。我会在终端的命令提示符下运行它。
所以,我会使用这个命令 - 请注意,我将原始页面添加到右侧已处理页面的左侧,并在其周围放置了一个红色边框,仅用于说明:
magick page-28.png -alpha off +dither -colors 2 -colorspace gray -normalize -statistic median 1x200 result.png
我明白了:
page-25.png
page-26.png
page-27.png
page-28.png
上面命令的解释...
在上面的命令中,不是阈值化,而是将颜色减少到 2 种颜色,然后转换为灰度,然后进行归一化 - 基本上应该选择黑色和背景色作为两种颜色,它们将变为黑色和转换为灰度并归一化时为白色。
然后我正在使用一个 200 像素高的结构元素进行中值过滤,该结构元素比几行高 - 所以它应该识别高特征 - 垂直线。
解释结束
继续……
所以,如果我反转图像,使黑色变为白色,白色变为黑色,然后取平均值并将其乘以图像中的像素总数,这将告诉我有多少像素是垂直特征的一部分:
convert page-28.png -alpha off +dither -colors 2 -colorspace gray -normalize -statistic median 1x200 -negate -format "%[fx:mean*w*h]" info:
90224
convert page-27.png -alpha off +dither -colors 2 -colorspace gray -normalize -statistic median 1x200 -negate -format "%[fx:mean*w*h]" info:
0
所以第 28 页不是纯文本,第 27 页是。
这里有一些提示...
提示
您可以像这样查看 PDF 中有多少页 - 尽管可能有更快的方法:
convert -density 18 book.pdf info:
提示
您可以像这样提取 PDF 的页面:
convert -density 288 book.pdf[25] page-25.png
提示
如果您正在编写多本书,您可能希望对图像进行归一化处理,以使它们都(例如,1000 像素高)结构元素的大小(用于计算中位数)应该相当一致。
【讨论】:
您的方法似乎需要大约 2-3 秒。有更快的方法吗?我 @Dhruva 谁知道?这取决于很多事情!您的 CPU、RAM、操作系统、PDF 的大小、PDF 的数量、PDF 中图像的分辨率、您实际想要确定的内容……如果您有具体问题,请随时咨询新的(它是免费的),并且可能包含一个返回到这个的链接以供参考 - 点击share
获取链接。
@Mark Setchell 为什么不计算黑色像素? numpy
库通常可以快速完成此类任务。以上是关于如何识别扫描的 PDF 文件中的图像?的主要内容,如果未能解决你的问题,请参考以下文章
发现PDF Transformer+转换的图像字体小了如何处理
使用 USB 中的扫描仪将图像扫描并存储为 PDF [关闭]