Tesseract OCR返回conf值转int触发ValueError报错如何解决
问题原因
- Tesseract 4.x及以上版本的置信度计算逻辑升级,
conf字段返回值为带小数的浮点型结果,pytesseract解析原始输出时会统一以字符串格式返回所有字段,因此你拿到的conf列表元素都是字符串类型,部分包含小数点,直接用int()转换会触发格式错误。 - 列表中值为
'-1'的条目对应层级型非识别结果(比如页、段落、行的占位条目),本身没有识别置信度,固定返回-1标识。
修复方案
只需将原有int转换逻辑替换为float转换即可,float兼容带小数点的字符串转换,且值为'-1'的条目转换后为-1,天然不满足置信度大于60的过滤条件,无需额外处理:
import pytesseract import cv2 from pytesseract import Output pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" img = cv2.imread(r"C:\Users\Documents\Python\OCR\Programa\teste_manuscrito_01.jpg") rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) resultado = pytesseract.image_to_data(rgb, lang='por', output_type=Output.DICT) n_boxes = len(resultado['text']) for i in range(n_boxes): # 仅修改这一行,将int改为float即可 if float(resultado['conf'][i]) > 60: (x, y, w, h) = (resultado['left'][i], resultado['top'][i], resultado['width'][i], resultado['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
如果你需要整数类型的置信度,可以先转float再转int,写法为int(float(resultado['conf'][i]))。
内容的提问来源于stack exchange,提问作者Brunitus Nishimura
相关产品推荐
相关产品推荐

