如何识别扫描PDF文件中的图像?

我想在扫描的PDF文件中识别图像(相对于文本),理想情况下使用Python来实现。有没有办法做到这一点?举个简单的例子,假设你扫描了一本书的一章。每页有三种可能的情况:

  1. 仅包含文本
  2. 仅包含图像(或多个图像)
  3. 同时包含文本和图像

我想输出属于第2类或第3类的页面列表。


回答:

我的想法是寻找不出现在普通文本中的特征——这些特征可能是跨越多行的垂直黑色元素。我选择的工具是ImageMagick,它安装在大多数Linux发行版上,并且适用于macOS和Windows。我会在终端的命令提示符下运行它。

所以,我会使用这个命令——请注意,我将原始页面放在处理后的页面的左侧,并为说明目的在其周围添加了一个红色边框:

magick page-28.png -alpha off +dither -colors 2 -colorspace gray -normalize -statistic median 1x200 result.png

结果如下:

page-25.png

enter image description here

page-26.png

enter image description here

page-27.png

enter image description here

page-28.png

enter image description here

上述命令的解释…

在上面的命令中,我没有使用阈值处理,而是进行了颜色减少到两种颜色,然后转换为灰度并进行归一化——基本上这应该会选择黑色和背景色作为两种颜色,当转换为灰度并归一化后,它们将变成黑色和白色。

然后我使用了一个200像素高的结构元素进行中值滤波,它比几行还要高——所以它应该能识别出高大的特征——垂直线条。

解释完毕

继续…

所以,如果我将图像反转,使黑色变成白色,白色变成黑色,然后计算平均值并乘以图像中的总像素数,这将告诉我有多少像素属于垂直特征:

convert page-28.png -alpha off +dither -colors 2 -colorspace gray -normalize -statistic median 1x200 -negate -format "%[fx:mean*w*h]" info:90224convert 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像素的高度,这样计算中值的结构元素的大小就会相当一致。

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注