hiroi-sora / Umi-OCR

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

设置里的图片横向扩展能不能加上不处理 #177

Closed camelwu closed 1 year ago

camelwu commented 1 year ago

图片是大分辨率的情况下

image

批量任务时默认宽度960文字识别不准确,即使我改了1125,也没有直接用截图来扫描的结果准确。能不能下啦再加一个选项是不对图片进行缩放 扫描?

还有一些不常见的汉字似乎也不能认,我会再试试加上繁体字会不会好些

谢谢

camelwu commented 1 year ago

比如这个字:崑

hiroi-sora commented 1 year ago

那很简单,缩放预处理压缩模式改到一个很大的值(如99999)就行了,宽高低于这个数值的图片都不会被压缩。当然,处理速度会变慢。

生僻字识别率低是正常的,毕竟这只是一个10多M的小模型,参数有限,必然把重心放在常用字上。我记得PPOCR旧版(V2)有100M量级的服务器用完整大模型,也许识别精度会更高一点。Umi-OCR支持导入这个模型库的。 image

camelwu commented 1 year ago

模型下载了Umi-OCR\PaddleOCR-json\ch_ppocr_server_v2.0_rec_train,配置文件也改了

#! PaddleOCR_json_config_chv2.TXT
# 简中 PP-OCR v2

# det 检测模型库,已支持多语言,一般不用改
det_model_dir ch_PP-OCRv3_det_infer

# cls 方向分类器库,不用改
cls_model_dir ch_ppocr_mobile_v2.0_cls_infer

# rec 识别模型库,目标语言的rec库的路径(文件夹名)
rec_model_dir ch_ppocr_server_v2.0_rec_infer

# 字典路径,目标语言的字典txt文件的路径(文件名)
rec_char_dict_path chinese_cht_dict.txt

# 若为v2版识别库,需要改为32(将下一行开头的#删掉)
rec_img_h 32

根目录的config也改了

"ocrConfig": {
        "简体中文": {
            "path": "PaddleOCR_json_config_chv2.txt"
        }
    },

结果:

懌嘶体嘿
漏客▕帚亂冠甥崈吔佀喼仟9:9~俁0伴丨▕翱9:9~俋9`啖Ο}叢@~:<};@儡償吻事僵翱冪亊唯劬s ā喀交宍仟
:
l仟吻沓
崢客徳俽乾彜矍凍供
呢浴噯味嗄l仞土傈凍供
僵à溏│姚l仞彜矍單匂│n
瑺夌匐夙稔l仞姁團彜矍凍供
l仟┅)
camelwu commented 1 year ago

测试了一下,将字典改回原来的就不再乱码

# 字典路径,目标语言的字典txt文件的路径(文件名)
rec_char_dict_path ppocr_keys_v1.txt

但是需要识别的文字还是不行,应该是从字典里输出文字吧? 我再试试更换文件编码

hiroi-sora commented 1 year ago

你好,你的配置编写有几个错误:

  1. 你似乎下载了训练模型 ***_train ,实际上应该下载 推理模型 (inference model)。
  2. 你下载的模型库 ch_ppocr_server_ 是简中库,所以只能使用简中字典(即原本的字典),不能使用繁中字典。模型库必须与字典相匹配,繁中库配繁中字典,简中库配简中字典,否则会乱码。

另外我翻了一下,似乎只有简中放出了服务器级模型,繁中只给了小模型。你可以再浏览下 这里

camelwu commented 1 year ago

谢谢!

  1. 问题中我描述有误,使用的是推理模型,不是train的,配置文件里也写对了。现在的问题就是PaddleOCR 认为“崑”属于繁体字
  2. 如果要混合中英繁三种语言怎么办?
  3. 简体中文就只有一个字典吗?https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.6/ppocr/utils/dict 这里确实没有找到
hiroi-sora commented 1 year ago

简单跟你解释一下OCR引擎的原理吧:

模型库 本身是不会输出“汉字”的。它记录一组神经网络的参数,这个网络能将输入的图像转换为一组数字序列。比如它通过推理,认为第一坨像素应该是“3049”,第二坨像素应该是“696”,第三坨应该是“746”,于是输出 [3049, 696, 746] 。

然后,引擎在 字典文件 里查找,发现第3049行是,第696行是,746是。于是引擎最终输出晚上好

因此,如果 模型库 里没有某个字形的参数(如),那么更换 字典文件 是不能让引擎识别这个字的。

同理,简中模型库里没有繁体字的参数,是因此是不能识别繁体字的。

至于为什么没有混合多语言的模型库?为什么PPOCR对生僻字的识别精度低 甚至不能识别?因为 All in one 的难度很大。混合多语言库的字符集数量更多,而且形近字也更多,势必引起网络容量膨胀、性能下降、识别率下降,训练集标注的成本也更高。因此性价比不高,目前市面上很少有多语言库的产品。

camelwu commented 1 year ago

好的,非常感谢!