Closed qwedc001 closed 10 months ago
针对第二条,自动排版实际上对应代码实现为tesseractOCR psm参数设定为3,关闭时psm参数设定为6.
tesseract官方对于此两种模式的解释如下 · 3 = Fully automatic page segmentation, but no OSD. (Default) · 6 = Assume a single uniform block of text.
关闭自动排版实际上就是默认了只有一个文本块,我会在下版更新中将其默认开启。 实际上psm值可以从0到11,但其主要影响的还是tesseract本身选择合并的模式,而这一条在后续umi已经有适配,所以从理论上来讲这个参数不需要额外修正,不过我可能会再研究一下osd在psm参数中发挥的作用。
附:docs对于psm的全部参数 · 0 = Orientation and script detection (OSD) only. · 1 = Automatic page segmentation with OSD. · 2 = Automatic page segmentation, but no OSD, or OCR. (not implemented) · 3 = Fully automatic page segmentation, but no OSD. (Default) · 4 = Assume a single column of text of variable sizes. · 5 = Assume a single uniform block of vertically aligned text. · 6 = Assume a single uniform block of text. · 7 = Treat the image as a single text line. · 8 = Treat the image as a single word. · 9 = Treat the image as a single word in a circle. · 10 = Treat the image as a single character. · 11 = Sparse text. Find as much text as possible in no particular order. · 12 = Sparse text with OSD. · 13 = Raw line. Treat the image as a single text line, bypassing hacks that are Tesseract-specific.
嗯,毕竟umi内部的排版解析还是传统算法机械式的划分,精准度上限应该没有用深度学习来划分的高。
如果你测试得出tesseract插件的文本块顺序及end="\n"
段落划分 确实非常准确,那就大大滴好;将会是tesseract对比paddle等OCR插件的一大优势。
对了,请求一个bugfix,这个可能是umi的软件问题。 我在language settings里内置了一个tooltip,这个tooltip好像无法被正确触发。
"toolTip": "请在仅当文本内容包含多语言时再勾选额外识别语言,否则可能会出现识别精度下降问题。", # FIXIT: 目前该tooltip是失效状态。
针对todo3,经测试,分段效果确实要优于umi自身分段,不过fast模型仍然会有偶尔的识别错误出现。如果追求质量只能换best模型了( 至此所有todo已经全部完成,我一会打包新的pre-release。 如果没有新的问题产生,那我就把i18n填了发布release了
坏,怎么自动给我close掉了 不过把所有语言模型都变成动态以后出现了一个新的问题,没有默认勾选任何语言作为ocr目标,直接运行会导致ocr失败
动态加载后,检查当前语言列表中是否存在 简中、English,如果有就设置它的default为True。如果没有中英,就设置语言列表中第1位语言的为True。如果语言列表为空,在class Api的init()中抛出一个异常。
这个tooltip好像无法被正确触发
了解,后续我会看看
追求质量只能换best模型
做个测试,看看fast和best的精准度(包括字符准度和排版准度)、速度 具体有什么差别。
动态加载后,检查当前语言列表中是否存在 简中、English,如果有就设置它的default为True。
了解,但是需要特殊注意的是,在只有单语言的语境下勾选多语言可能会造成一定程度的识别错误。这个也被我写进了tooltip。我的想法要么是默认勾选简中,或者是让umi检测一下用户语言环境什么的
做个测试,看看fast和best的精准度(包括字符准度和排版准度)、速度 具体有什么差别。
这个我是做过的,best的识别速度在我的电脑(i9-13900HX)上是比较稳定的4~5秒一张,fast识别速度在2秒一张左右。因为tesseract并不能像是paddle一样设置占用线程数量,所以在识别速度上不如paddle(cpu识别平均1.2s/张)。
在识别质量方面,新加的分段我还没有进行测试,之前测试中置信度平均有3~5的提升。
那现在先只默认勾选简中吧,如果简中不存在再勾选第一位。
python获取系统语言是很容易的,如下。不过我觉得暂时没必要把插件写得那么麻烦。
import locale code, encoding = locale.getdefaultlocale()
你现在可以先PR过来,后续继续优化。
以下一些问题和建议,请一条条核对:
在新版软件面板中,也会通过小回车图标,标出结尾为\n的文本块。
你需要从tesseract的结果中,判断哪些文本块属于自然段的结尾=,end为\n。其余文本块,end为" "或""(根据上下文是汉字还是字母)。
这时,软件面板上设置里的”排版解析方案“换成”不做处理“,Umi就会优先采用tesseract的排版结果。
_Originally posted by @hiroi-sora in https://github.com/hiroi-sora/Umi-OCR_plugins/issues/2#issuecomment-1913134715_