hiroi-sora / RapidOCR-json

OCR离线图片文字识别命令行windows程序,以JSON字符串形式输出结果,方便别的程序调用。基于 RapidOcrOnnx 。
MIT License
197 stars 33 forks source link

识别灵敏度过高的问题 #9

Closed SkeathyTomas closed 10 months ago

SkeathyTomas commented 10 months ago

都使用了v4模型,识别图这张 grab

使用原生rapidocr-onnx识别比较稳定

['黄金之夜的喧嚣', '空之杯', '火元素伤害加成', '46.6%', '+20', '暴击伤害+6.2%', '元素精通+40', '生命值+8.7%', '·暴击率+9.7%']

这个exe跑出来会额外把一些非中文图形识别出来,顺序也会混乱,可以怎么优化?

['黄金之夜的喧嚣', '空之杯', '46.6%', '火元素伤害加成', '★★★★★', '+20', '·暴击伤害+6.2%', '元素精通+40', '生命值+8.7%', '暴击率+9.7%']

使用参数ocr = OcrAPI(ocrPath, argsStr=" --det=ch_PP-OCRv4_det_infer.onnx --cls=ch_ppocr_mobile_v2.0_cls_infer.onnx --rec=rec_ch_PP-OCRv4_infer.onnx --keys=dict_chinese.txt")

hiroi-sora commented 10 months ago

关于顺序,你可以使用 PaddleOCR-json 的 tbpu模块 对结果进行排序。请仔细阅读该文档来使用。(PaddleOCR-json和RapidOCR-json的python接口是部分兼容的,理论上tbpu模块可以直接拿过来用。)

关于灵敏度,按理说本项目与原生 rapidocr-onnx-cpp 不会有任何差别的,推理部分的代码没有改动过。可能一些参数存在差异?或者你可以改用旧版V3的onnx模型库,它的精度低一些,实测不会将 '★★★★★' 给识别出来。

SkeathyTomas commented 10 months ago

我用的是python版rapidocr-onnx,实测v4除了识别速度比较慢,准确度、稳定度都没什么问题。 这个项目的稳定度除了上面的‘★’问题,还有锁也会识别成其他中文字符,无论是用v3、v4模型。以下是一些识别结果:

['黄金之夜的喧嚣', '空之杯', '中', '46.6%', '风元素伤害加成', '+20', '·暴击率+3.1%', '·暴击伤害+26.4%', '·攻击力+4.1%', '·生命值+448'] ['黄金之夜的喧嚣', '空之杯', '46.6%', '风元素伤害加成', '★', '+20', '·暴击率+3.1%', '·暴击伤害+26.4%', '攻击力+4.1%', '生命值+448'] grab

['黄金之夜的喧嚣', '空之杯', '0', '生命值', '46.6%', '+20', '·暴击率+5.8%', '·暴击伤害+7.0%', '·元素充能效率+14.2%', '· 防御力+42'] grab

hiroi-sora commented 10 months ago

python库和C++库存在差异是正常的。即使使用相同的模型,不同语言的浮点误差、图像解码方式、多线程调度、数学函数库等都会存在差异,这些差异一点一滴积累起来就会导致结果的少量不同。

比如python的NumPy进行浮点矩阵计算可能更精准,而C++启用编译器优化后,矩阵计算更快、但可能产生细微的浮点差异。

从你的测试结果上看,我认为这些误差是可接受的。如果你用于自动刷游戏脚本,'★'这些干扰项不会阻碍脚本对目标UI的识别。如果用于供人类阅读,则可以添加一些后处理步骤来过滤结果:比如移除低于某置信度的文本,或者类似Umi-OCR的“忽略区域”功能过滤掉主要区域以外的文本。