hiroi-sora / Umi-OCR

OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。
MIT License
23.05k stars 2.35k forks source link

生成双层pdf后文字层错位 #460

Closed Desmond9527 closed 2 months ago

Desmond9527 commented 3 months ago

Umi-OCR version 程序版本

2.1.1

Windows version 系统版本

win11

OCR plugins Used 使用的OCR插件

PaddleOCR

Reproduction steps 复现步骤

https://www.book123.info/detail/9787301317914

这个pdf文件识别时内容提取模式若为混合ocr/原文本,则只能识别出乱码,选择整页强制ocr,可以正常识别文字,但生成双层pdf后,文字层与图片层错位 屏幕截图 2024-04-06 180224 其他pdf文档识别正常,文档本身为纯图片pdf,推测有其他元素干扰识别,将文档用abbyy另存为纯图片pdf后,使用混合ocr/原文本可以正常识别,但是识别后文字层与图片层还是错位

使用

https://www.52pojie.cn/forum.php?mod=viewthread&tid=1801849&highlight=%CB%AB%B2%E3pdf 该软件ocr文字层与图片层不会错位

屏幕截图 2024-04-06 181017 但文字识别错误较多,作者称版面分析借鉴了hiroi-sora大佬的 【间隙·树·排序算法】,应该与Umi-OCR是同一算法,不知道为什么Umi-OCR版面错位

Problem screenshots or related files (optional) 问题截图或相关文件(可选)

社会学教程(第五版)_9787301317914.pdf 屏幕截图 2024-04-06 180224 屏幕截图 2024-04-06 181017

hiroi-sora commented 3 months ago

此Bug已修复。

yang-521 commented 3 months ago

我是那款软件的作者,感谢大佬开发的插件和算法。文字错位是因为页面旋转,插入内容时会先旋转到0,然后再恢复,增加页面放大系数后返回的坐标如果不做处理,在插入时也会产生偏差,包括文字大小。 可以用fitz自带的page.derotation_matrix 计算旋转坐标,再置入文本,就可以解决这个问题了

protation = page.rotation  #获取旋转角度
point = fitz.Point(x, y) * page.derotation_matrix   #计算插入点的旋转后的坐标
page.insert_text(
                 point,
                text,
                fontsize,
                fontname="cjk",
                rotate=protation,  # 文本角度设定
                stroke_opacity=0,  # 描边透明度
                fill_opacity=0,  # 填充(字体)透明度
            )
hiroi-sora commented 3 months ago

@yangyunlv 感谢建议!用fitz的逆旋转矩阵来求坐标确实简单快速。此 Issue 的问题已解决。

另外,我之前遇到了一份异常PDF,第1页除了旋转,还存在缩放和偏移。我测试了你的软件(v2.4.2),也无法处理第1页。可否一起研究下?

异常样本:首页缩放.pdf

yang-521 commented 3 months ago

他原先测试用的应该是2.4以下的版本,当时我用的还是pypdf库,有个应用旋转页面的函数[transfer_rotation_to_content]。2.4后的版本引入你的算法后改用了fitz,但旋转问题还没解决。 先研究看看

yang-521 commented 2 months ago

可能是因为有多个页面对象导致的坐标问题,在页面插入内容之前清理掉就正常了[Page.clean_contents()]

page.clean_contents()
for tb in res["data"]:
................

image

hiroi-sora commented 2 months ago

在页面插入内容之前清理掉就正常了

感谢!有效。整页强制OCR模式下,写入文本位置都是正确的了。但提取原始图片的模式,依然存在 坐标偏移问题 。应该是前期提取时,图片基准坐标不准确。