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

Keras_ocr调用recognize_from_boxes出现TypeError错误如何解决

错误原因

TypeError: object of type 'int' has no len() 报错的核心是你传入的box_groups(也就是你代码里的bb_list)参数不符合recognize_from_boxes的格式要求:

  • 该方法要求box_groups必须是和images(也就是你的img_list)长度完全一致的嵌套列表:img_list有N张图像,box_groups就有N个元素,每个元素是对应单张图像的所有边界框的集合,每个边界框是包含4个坐标点、shape为(4,2)的数组。
  • 当代码尝试对某个不符合格式的参数取长度时,拿到了int类型的值,就会触发该报错,常见的错误场景有两个:
    1. 仅识别单张图像时,bb_list直接传入了单张图的框列表,没有在外层额外套一层列表。比如img_list = [img]时,正确的bb_list结构应该是[[box1, box2...]],如果直接传[box1, box2...],方法会把第一个框的坐标值当成整组框遍历,遇到单个int值就会报错。
    2. 构造bb_list时混入了单个int类型的坐标值,没有按照「每个框包含4个坐标点,每个坐标点是xy两个数值」的嵌套结构传入。

另外你代码里的写法Recognizer_ = Recognizer_.recognize_from_boxes(...)存在逻辑问题:该方法的返回值是识别结果,直接赋值给识别器实例会覆盖原有实例,后续如果需要复用识别器会出错,建议用单独的变量接收识别结果。

解决办法

  1. 先校验参数长度匹配:打印len(img_list)和len(bb_list),两者的数值必须完全相等。
  2. 调整bb_list的嵌套结构,单张图识别的正确示例如下:
# 单张图像+两个识别框的传参示例
import cv2
import keras_ocr

# 初始化识别器
recognizer = keras_ocr.recognition.Recognizer()
# 构造图像列表
img = cv2.imread("test.jpg")
img_list = [img]
# 构造边界框列表,外层列表长度和img_list一致,内层放单张图的所有框
box1 = [[10, 10], [100, 10], [100, 30], [10, 30]]
box2 = [[10, 40], [200, 40], [200, 60], [10, 60]]
bb_list = [[box1, box2]]
# 调用方法,用新变量接收结果
results = recognizer.recognize_from_boxes(images=img_list, box_groups=bb_list)
  1. 遍历所有边界框校验格式:确认每个边界框都是4个坐标点的嵌套数组,没有单个int值混入。

内容的提问来源于stack exchange,提问作者Gustavo Scholze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:54:01