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

Colab运行A*算法手写文档行分割代码触发IndexError报错求助

A*手写文档行分割IndexError报错解决方案

错误根因

报错IndexError: index 0 is out of bounds for axis 0 with size 0的本质是切片得到的数组为空,没有有效元素可访问,有两个常见触发场景:

  • 遍历hpp_clusters时拿到的cluster_of_interest起止高度非法:cluster_of_interest[0] >= cluster_of_interest[-1],导致切出来的nmap高度为0
  • road_blocks的起止宽度非法:road_blocks[0] >= nmap.shape[1] 或 road_blocks[1]+10 <= 0,导致切出来的窗口宽度为0

修复方法

在操作切片前增加非空校验,跳过非法的无效切片即可,修改后的代码如下:

def group_the_road_blocks(road_blocks):
    #group the road blocks
    road_blocks_cluster_groups = []
    road_blocks_cluster = []
    size = len(road_blocks)
    for index, value in enumerate(road_blocks):
        road_blocks_cluster.append(value)
        if index < size-1 and (road_blocks[index+1] - road_blocks[index]) > 1:
            road_blocks_cluster_groups.append([road_blocks_cluster[0], road_blocks_cluster[len(road_blocks_cluster)-1]])
            road_blocks_cluster = []

        if index == size-1 and len(road_blocks_cluster) > 0:
            road_blocks_cluster_groups.append([road_blocks_cluster[0], road_blocks_cluster[len(road_blocks_cluster)-1]])
            road_blocks_cluster = []

    return road_blocks_cluster_groups

binary_image = get_binary(img)

for cluster_of_interest in hpp_clusters:
    # 先校验高度切片是否合法
    h_start, h_end = cluster_of_interest[0], cluster_of_interest[-1]
    if h_start >= h_end:
        continue
    nmap = binary_image[h_start:h_end,:]
    # 校验nmap是否非空
    if nmap.shape[0] == 0 or nmap.shape[1] ==0:
        continue
    road_blocks = get_road_block_regions(nmap)
    road_blocks_cluster_groups = group_the_road_blocks(road_blocks)
    #create the doorways
    for index, road_blocks in enumerate(road_blocks_cluster_groups):
        w_start, w_end = road_blocks[0], road_blocks[1]+10
        # 校验宽度切片是否合法
        if w_start >= w_end or w_start >= nmap.shape[1]:
            continue
        window_image = nmap[:, w_start: w_end]
        if window_image.shape[0] ==0 or window_image.shape[1]==0:
            continue
        binary_image[h_start:h_end,:][:, w_start: w_end][int(window_image.shape[0]/2),:] *= 0

额外优化点

  • 如果频繁出现非法切片,可以检查上游hpp_clusters生成逻辑,是否对水平投影的结果做了过滤,排除了高度小于1的无效行区间
  • 可以给road_blocks加范围限制,避免超过图像宽度的数值出现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 03:57:05