You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:54:02