=Start=
缘由:
再整理一下近期发现的对超长截图中的文本内容进行提取的方法(是对之前的图片形式PDF文件内容提取的一个补充,之前的方案在超长截图那里会有问题)。对于那些由少数几张由较长截图合并成的PDF文件来说,如何提取其中的文本内容是一个很有挑战的事情,这里记录一下最近想到的办法,方便后面有需要的时候参考。
正文:
参考解答:
因为之前的文章 图片形式的PDF文件的内容提取方法 已经记录了针对常规图片形式PDF文件的内容做提取的方法,这里只补充一下如何将长截图的PDF文件/图片切分成合适高度的小图片然后OCR的方法。
步骤整理:
- 先借助macOS系统的预览(Preview)应用的拖拽功能,将原始PDF文件中的部分页面分别拖出来形成一个由单独一张长截图生成的PDF文件;
- 然后还是借助macOS系统的预览(Preview)应用的导出功能,用PDF文件生成图片文件;
- 借助ImageMagick的命令行工具对图片进行按高度水平切分:
通过命令查看图片文件的高度的方法(也可以通过预览应用进行查看):
sips -g pixelHeight x1.png
再按高度比例/绝对值进行水平切分(以下选项是指按照宽度100%,高度10%进行切分):
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
这里的参数解释如下:
-crop 100%x200
:指定裁剪区域的宽度和高度。100%意味着宽度与原图相同,200是指定的高度(在这里是200像素),高度也可以用百分比的形式指定,比如10%。+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 条评论
更漂亮地打印长截图,一种低技术方案
https://utgd.net/article/20655
`
说明:
实际测试了一下,这个方案对于完全没有技术的同学来说还是OK的,但是对于我这种,切分长截图是为了更好的对其中的每一单张图片进行OCR提取文字内容的场景来说,用ImageMagick命令进行切分是更便捷好用的方法。因为:
1. 不需要手动用Safari浏览器打开图片文件以及后面的缩小放大等操作;
2. 生成的每一张图片的4个角那里不会添加额外的文字内容(图片的位置、当前处于第几页);
3. 这种方式也会出现把正常内容截断放在前后两张图片的情况(不符合我的预期,虽然ImageMagick命令行的方式也没办法保证),这几乎是任何一个非人工自动化操作都会面临的问题,你不每一个切割点都去检查会不会截断正常内容(然后再针对性的上下调整切割点)你就无法保证结果的完美,但是命令的方式好在快速简洁。
==
问题倒也没那么难解决。之前在打印网页文章时,我并不希望网页图片被切分到不同页面上,但如果一页放不下而网页又没有专门处理(细心的网页可能会编写 CSS,避免图片被切断),那么多余部分就会被挤到后续页面。在打印网页时,图片被拦腰截断固然是一种缺陷,可如果反过来利用,不就能在打印时自动切分长截图了吗?
接下来的问题,就是如何把待打印的图片上传到网页上。这一环节其实并不需要任何编程技巧或者网页开发经验,只需把图片拖到浏览器图标上,或者在右键上下文菜单中选择浏览器打开。
当然,现在直接打印的话,你获得的可能仍然是单页图片。真正至关重要的是下一步:点击图片以将其放大显示,此时再尝试打印,在主流浏览器中的默认情况都是自动裁切图片——图片会尽可能填满纸张两侧,而纵向上多出来的部分则顺延到后续页面,如此一来,长截图就自动被切割到多张A4大小的纸张上,不怕打印后文字看不清。
`