对长截图中的文本内容进行OCR提取的方法


=Start=

缘由:

再整理一下近期发现的对超长截图中的文本内容进行提取的方法(是对之前的图片形式PDF文件内容提取的一个补充,之前的方案在超长截图那里会有问题)。对于那些由少数几张由较长截图合并成的PDF文件来说,如何提取其中的文本内容是一个很有挑战的事情,这里记录一下最近想到的办法,方便后面有需要的时候参考。

正文:

参考解答:

因为之前的文章 图片形式的PDF文件的内容提取方法 已经记录了针对常规图片形式PDF文件的内容做提取的方法,这里只补充一下如何将长截图的PDF文件/图片切分成合适高度的小图片然后OCR的方法。

步骤整理:

  1. 然后还是借助macOS系统的预览(Preview)应用的导出功能,用PDF文件生成图片文件;

通过命令查看图片文件的高度的方法(也可以通过预览应用进行查看):

sips -g pixelHeight x1.png
cd ~/Documents
magick x1.png -crop 100%x10% +repage output1-%02d.jpg
magick x2.png -crop 100%x10% +repage output2-%02d.jpg
magick x3.png -crop 100%x10% +repage output3-%02d.jpg

最后再使用之前写的代码对上面批量生成的jpg图片进行OCR提取文字:

python3 ~/py_macos_ocr_images.py ~/Documents >ocr_result.txt

补充一下ImageMagick命令的参数解释方便理解:

magick input.jpg -crop 100%x200 +repage output-%02d.jpg

这里的参数解释如下:

  • +repage:移除虚拟画布信息,确保输出图像不会带有额外的空间或者偏移。
  • output-%02d.jpg:输出文件名模板,%02d是一个占位符,表示生成的文件名中的数字序列,从0开始递增,且至少两位数(不足两位前面补零)。

请注意,如果原始图片的高度不是所设定的切分高度(这里是200像素)的整数倍,则最后一张图片可能会小于设定的高度。

通过上述方法,你就可以在macOS系统上利用ImageMagick根据特定高度对图片进行水平切分了。这种方法特别适合需要批量处理或自动化任务的情况。

参考链接:

How To Split an Image Vertically Using ImageMagick
https://www.baeldung.com/linux/imagemagick-split-image-vertically

图片形式的PDF文件的内容提取方法
https://ixyzero.com/blog/archives/5927.html

通义千问
https://tongyi.aliyun.com/qianwen/

=END=


《“对长截图中的文本内容进行OCR提取的方法”》 有 1 条评论

  1. 更漂亮地打印长截图,一种低技术方案
    https://utgd.net/article/20655
    `
    说明:
    实际测试了一下,这个方案对于完全没有技术的同学来说还是OK的,但是对于我这种,切分长截图是为了更好的对其中的每一单张图片进行OCR提取文字内容的场景来说,用ImageMagick命令进行切分是更便捷好用的方法。因为:
    1. 不需要手动用Safari浏览器打开图片文件以及后面的缩小放大等操作;
    2. 生成的每一张图片的4个角那里不会添加额外的文字内容(图片的位置、当前处于第几页);
    3. 这种方式也会出现把正常内容截断放在前后两张图片的情况(不符合我的预期,虽然ImageMagick命令行的方式也没办法保证),这几乎是任何一个非人工自动化操作都会面临的问题,你不每一个切割点都去检查会不会截断正常内容(然后再针对性的上下调整切割点)你就无法保证结果的完美,但是命令的方式好在快速简洁。

    ==
    问题倒也没那么难解决。之前在打印网页文章时,我并不希望网页图片被切分到不同页面上,但如果一页放不下而网页又没有专门处理(细心的网页可能会编写 CSS,避免图片被切断),那么多余部分就会被挤到后续页面。在打印网页时,图片被拦腰截断固然是一种缺陷,可如果反过来利用,不就能在打印时自动切分长截图了吗?

    接下来的问题,就是如何把待打印的图片上传到网页上。这一环节其实并不需要任何编程技巧或者网页开发经验,只需把图片拖到浏览器图标上,或者在右键上下文菜单中选择浏览器打开。

    当然,现在直接打印的话,你获得的可能仍然是单页图片。真正至关重要的是下一步:点击图片以将其放大显示,此时再尝试打印,在主流浏览器中的默认情况都是自动裁切图片——图片会尽可能填满纸张两侧,而纵向上多出来的部分则顺延到后续页面,如此一来,长截图就自动被切割到多张A4大小的纸张上,不怕打印后文字看不清。
    `

发表回复

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