我的系统中有很多PDF文档,有时我注意到文档是基于图像的,没有编辑功能。 在这种情况下,我在Foxit PhantomPDF中进行OCR以便更好地搜索,您可以在多个文件中进行OCR。 我想找到我的所有基于图像的PDF文档。
我不明白PDF阅读器如何识别文档的OCR不是文本的。必须有一些这些读者可以访问的字段。 这也可以在终端访问。 这个答案提供了如何在线程Check if a PDF file is a scanned one中执行此操作的开放式提议:
你最好的选择可能是检查它是否有文字,并查看是否 它包含一个大页面图像或许多平铺图像 覆盖页面。如果您还检查元数据,这应该涵盖最多 选项。
我想更好地了解你如何有效地做到这一点,因为如果存在一些元数据,那么这将很容易。 但是,我还没有找到这样的元素。 我认为最可能的方法是查看页面是否包含具有搜索OCR的页面化图像,因为它已经有效并且已经在一些PDF阅读器中使用。 但是,我不知道该怎么做。
在Hugh变换中,在参数空间的超平方中有特定选择的参数。它的复杂性$ O(A ^ {m-2})$其中m是你看到的参数数量超过那些参数的问题很难。 A 是图像空间的大小。福昕阅读器在其实现中使用最可能的3个参数。边缘易于检测,可以确保效率,必须在Hugh变换之前完成。简单地忽略了损坏的页面。其他两个参数仍然未知,但我认为它们必须是节点和一些交叉点。如何计算这些交叉点是未知的?确切问题的表述是未知的。
该命令适用于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位答案 0 :(得分:2)
为聚会迟到,这是一个简单的解决方案,暗示已经包含字体的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'
作为单行
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项目位于Github deajan/pmOCR。
答案 1 :(得分:1)
纯粹来自OCR领域,我们可以使用Hough变换找到页面中最大的方块,然后我们计算其面积与整个区域的比率。如果比率很低,我们可以认为这个页面正在倾斜。最后,水平页面的统计比例和页面总和可以指示此PDF是否被扫描PDF。
我知道这个过程非常缓慢,比例很难确定。 ^ - ^