Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请保留之前版本中 OCR文本后处理 - 排版解析方案中的 /单行/ 模式 #595

Closed
1 task done
seabear01 opened this issue Jul 15, 2024 · 6 comments
Closed
1 task done

Comments

@seabear01
Copy link

Issues

  • I have browsed through the Issues. 我已浏览过Issues,确定没有重复的建议。

Expected behavior 预期的功能

测试了2.1.2版本中 单栏 - * 下的所有模式,都没有和之前 /单行/ 模式相同的,单行模式在识别表格数据时非常友好,他将表格内所有数据都以换行的形式输出,这给后期二次处理带来了极大的便利,而新的模式下,表头位置输出成一行,而且每列之间都没有预留空格或换行,后期处理起来很麻烦。
希望能保留之前 /单行/ 模式,谢谢!

Approximate reference (optional) 近似的参考(可选)

No response

@hiroi-sora
Copy link
Owner

hiroi-sora commented Jul 15, 2024

你好。如果你指的是v1版本中的“单行”模式,那么v2版本中对应的是“不做处理”模式。

@seabear01
Copy link
Author

你好。如果你指的是v1版本中的“单行”模式,那么v2版本中对应的是“不做处理”模式。

感谢您的回复,v2.01版的时候也有“单行”模式,现在的“不做处理”模式识别时我试了几张表格图片,总有列首顺序会被识别错误的现象。

@hiroi-sora
Copy link
Owner

不好意思我搞错了,v2.0.1的 段落合并 - 单行 模式,对应的是 v2.1.2 的 排版解析方案 - 单栏-总是换行 模式。这两个模式的代码逻辑是相似的。

你是发现旧的 单行 跟新的 单栏-总是换行 存在差异吗?我这边测试是没有太大区别。

请问你可否提供个样例(表格截图),这两个模式的输出结果不一致。我会检查下代码流程,看看是否有问题。

@seabear01
Copy link
Author

imagetools0-3
0aab8c31-2e1e-49a5-b11a-c410c5403ff1
05ab096d-0539-42b6-8e87-02a3385db9a2

@hiroi-sora
Copy link
Owner

hiroi-sora commented Jul 17, 2024

明白了。旧版的 单行 有一个判定:在同一水平线上,但是间隔太远的文本,会设置为换行。而新版的 单栏-总是换行 则没有这个判定,不管间隔多远,只要在同一水平线上,都视为同一行。

你可以在新版中添加一些代码,来恢复旧版的效果。操作步骤:

  1. 对于 v2.1.2 版本,用记事本或编辑器打开 UmiOCR-data\py_src\ocr\tbpu\parser_single_line.py
  2. 在第46行,找到以下的内容:
            # 处理完一行
            for i2 in range(len(now_line) - 1):
  1. 在这行之后,添加如下的代码。你可以根据需要,设置间隙阈值(下方的1.5)。
                # 检查同一行内相邻文本块的水平间隙,间隙太大的设置换行
                l1, t1, r1, b1 = now_line[i2]["normalized_bbox"]
                l2, t2, r2, b2 = now_line[i2 + 1]["normalized_bbox"]
                h = b1 - t1
                if l2 - r1 > h * 1.5:  # 相邻的间隙大于 1.5 倍行高,则设置换行
                    now_line[i2]["end"] = "\n"
                    continue

改完后,如下图所示。注意代码的缩进,一定要和图中一样。
image
4. 保存文件,重启Umi-OCR,使用 单栏-总是换行 模式进行测试。
image

@seabear01
Copy link
Author

非常感谢您的回复。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants