如何查找所有基于图像的PDF?

我的系统中有很多PDF文档,有时我注意到文档是基于图像的,没有编辑function。 在这种情况下,我在Foxit PhantomPDF中进行OCR以便更好地搜索,您可以在多个文件中进行OCR。 我想找到我的所有基于图像的PDF文档。

我不明白PDF阅读器如何识别文档的OCR不是文本的。 必须有一些这些读者可以访问的字段。 这也可以在终端访问。 这个答案提供了如何在线程中执行此操作的开放式建议。 检查PDF文件是否为扫描文件 :

您最好的选择可能是检查它是否有文本,还可以查看它是否包含大页面图像或覆盖页面的大量平铺图像。 如果您还检查元数据,则应涵盖大多数选项。

我想更好地理解你如何有效地做到这一点,因为如果存在一些元数据,那么它将很容易。 但是,我还没有找到这样的元素。 我认为最可能的方法是查看页面是否包含具有搜索OCR的页面化图像,因为它已经有效并且已经在一些PDF阅读器中使用。 但是,我不知道该怎么做。

边缘检测和休变换的答案

在Hugh变换中,在参数空间的超平方中有特定选择的参数。 它的复杂性$ O(A ^ {m-2})$其中m是你看到的参数数量超过那些参数的问题很难。 A是图像空间的大小。 福昕阅读器在其实现中使用最可能的3个参数。 边缘易于检测,可以确保效率,必须在Hugh变换之前完成。 简单地忽略了损坏的页面。 其他两个参数仍然未知,但我认为它们必须是节点和一些交叉点。 如何计算这些交叉点是未知的? 确切问题的表述是未知的。

测试Deajan的答案

该命令适用于Debian 8.5,但我无法在Ubuntu 16.04中最初使用它

masi@masi:~$ find ./ -name "*.pdf" -print0 | xargs -0 -I {} bash -c 'export file="{}"; if [ $(pdffonts "$file" 2> /dev/null | wc -l) -lt 3 ]; then echo "$file"; fi' ./Downloads/596P.pdf ./Downloads/20160406115732.pdf ^C 

操作系统:Debian 8.5 64位
Linux内核:4.6个backports
硬件:华硕Zenbook UX303UA

为聚会迟到,这是一个简单的解决方案,暗示已经包含字体的pdf文件不仅仅基于图像:

 find ./ -name "*.pdf" -print0 | xargs -0 -I {} \ bash -c 'export file="{}"; \ if [ $(pdffonts "$file" 2> /dev/null | \ wc -l) -lt 3 ]; then echo "$file"; fi' 
  • pdffonts列出PDF文件中的所有嵌入字体。 如果包含可搜索的文本,它也必须包含字体,因此pdffonts将列出它们。 检查结果是否少于三行是因为pdffonts的标题是2行。 因此,低于3行的所有结果都没有嵌入字体。 AFAIK,不应该有误报,这更像是一个问问pdffonts开发人员的问题。

作为一线

 find ./ -name "*.pdf" -print0 | xargs -0 -I {} bash -c 'export file="{}"; if [ $(pdffonts "$file" 2> /dev/null | wc -l) -lt 3 ]; then echo "$file"; fi' 

说明:如果pdf包含文本, pdffonts file.pdf将显示2行以上。 输出不包含文本的所有pdf文件的文件名。

我的OCR项目具有相同的function,在Github deajan / pmOCR中 。

纯粹来自OCR领域,我们可以使用Hough变换找到页面中最大的正方形,然后我们计算其面积与整个面积的比率。 如果这个比例很低,我们可以认为这个页面很糟糕。 最后,水平页面的统计比例和页面总和可以指示此PDF是否被扫描PDF。

我知道这个过程很慢,比例很难确定。 ^ – ^