如何识别扫描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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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