请问 rapidocr 如何保证 识别出的字符串 顺序 跟图片上的 字符串顺序一致?
请问 rapidocr 如何保证 识别出的字符串 顺序 跟图片上的 字符串顺序一致?
现在 对于 一排 几个数字 用空格分开的, 直接一次识别出的字符串 数字的顺序会随机化
对于多排 ,每排 用空格分开的字符, 也会 每排顺序都随机化,不稳定。
默认已经排序了的
是不是加了多线程后,顺序就不一致了? 我用2线程 顺序总是不稳定, 3个词 有时是确定的,有时又乱排。
字符有高低顺序?发给图看看
比如这样的图, 行顺序没问题,行内顺序就经常数字颠三倒四,不是按原图顺序。
记错了,识别结果没排序
请问,有设置 是否排序的参数吗? 我找了以下,好像没找到
已修复
好的,多谢多谢,非常感谢。
![]()
已修复
我在程序里替换了最新的rapidocr.ahk 和dll后出现下面的问题,我搞不清楚哪里出了问题,麻烦帮助看一下
我是在H版本 新开的线程里调用的ocr
我记得以前可能是范围的问题,但是用上个版本的rapidorc这里没出问题;用了最新的版本覆盖后,出了问题。我还原后也没出问题。好奇怪。
Error: An exception was thrown.
Specifically: 0xe06d7363
---- D:\RapidOcr.ahk
▶ 096: Return DllCall('RapidOcrOnnx\OcrDetectBitmapData', 'ptr', this, 'ptr', data, 'ptr', param, 'ptr', RapidOcr.__cb(2 - !allresult), 'ptr', ObjPtr(&res)) ? res : ''
The current thread will exit.
Call stack: D:\RapidOcr.ahk (96) : [DllCall] Return DllCall('RapidOcrOnnx\OcrDetectBitmapData', 'ptr', this, 'ptr', data, 'ptr', param, 'ptr', RapidOcr.__cb(2 - !allresult), 'ptr', ObjPtr(&res)) ? res : '' D:\RapidOcr.ahk (96) : [RapidOcr.Prototype.ocr_from_bitmapdata] Return DllCall('RapidOcrOnnx\OcrDetectBitmapData', 'ptr', this, 'ptr', data, 'ptr', param, 'ptr', RapidOcr.__cb(2 - !allresult), 'ptr', ObjPtr(&res)) ? res : '' D:\Tools_H\rapidOCR_Config.ahk (61) : [getOcrString] res := ocr.ocr_from_bitmapdata(bm_buf.info, param) D:\Tools_H\detect_H_BS.ahk (665) : [detectCurrent] res1_P := getOcrString(bm_bufSell1, ocr)
我的orc参数是这么定的
arg4RapidOcr := [27, 0.005, 0.005, 1.8]
Global param := RapidOcr.OcrParam() param.doAngle := false param.padding := arg4RapidOcr[1] param.boxThresh := arg4RapidOcr[2] ;0.3 [0, 1]图像中文字部分和背景部分分割阈值。值越大,文字部分会越小。 param.boxScoreThresh := arg4RapidOcr[3] ;0.5 [0, 1]文本检测所得框是否保留的阈值,值越大,召回率越低。 param.unClipRatio := arg4RapidOcr[4] ; 1.6 [1.6, 2.0]控制文本检测框的大小,值越大,检测框整体越大。
rapidOcrConfig := Map() rapidOcrConfig["models"] := "D:Tools\RapidOcr\models" ; rapidOcrConfig["det"]:="D:Tools\RapidOcr\models\ch_PP-OCRv4_det_infer.onnx" rapidOcrConfig["rec"] := "D:Tools\RapidOcr\models\ch_PP-OCRv4_rec_infer.onnx" rapidOcrConfig["keys"] := "D:Tools\RapidOcr\models\ppocr_keys_v1.txt" rapidOcrConfig["cls"] := "D:Tools\RapidOcr\models\ch_ppocr_mobile_v2.0_cls_infer.onnx"
rapidOcrConfig["min_height"] := 30 rapidOcrConfig["width_height_ratio"] := 4 rapidOcrConfig["det_use_cuda"] := True rapidOcrConfig["cls_use_cuda"] := True rapidOcrConfig["rec_use_cuda"] := True ; rapidOcrConfig["use_cls"]:=false ; rapidOcrConfig["use_det"]:=false
rapidOcrConfig["text_score"] := 0.1 ;取值范围:[0, 1], 默认值是0.5。文本识别结果置信度,值越大,把握越大。 ; rapidOcrConfig["det_limit_side_len "]:=200 ; ; rapidOcrConfig["det_limit_type "]:=Min ; ; rapidOcrConfig["max_candidates "]:=500 ;
rapidOcrConfig["numThread"] := 1
dllpath := "D:Tools\RapidOcr\64bit\RapidOcrOnnx.dll"
Global ocr := RapidOcr(rapidOcrConfig, dllpath)
我找到原因了,更新后,若是往ocr里传入的是全黑的图片, 就立刻跳出这个异常。 更新前,若是传入是全黑图片,没有任何问题。
因为,我是用H的新开线程去识别,有时候会传入全黑图片,所以,只要出现全黑图片,必然跳出这个异常。
又测试了,只要传入纯色图片,就会出异常。
更新了
更新了
好的,多谢。 我回头试试看。 我先至输入前 用opencv判断一遍是否纯色图片,然后还把 ocr用try/catch包起来。 暂时没出过问题。 我转为灰色单通道,然后一个一个像素判断跟mat[0][0]是否相等,不相等就不是纯色图片; 请问有更好的,更高效的办法判断是否纯色图片吗? 我网上搜了半天,好像其他办法没统一的办法和通用函数。
因为搞不清 会不会输入其他图片会导致抛出异常, 是不是 建议平时使用时,也用try/catch包起来呢?以前java时,说这样会影响比加大的性能。