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

OpenCV人脸识别程序检测人脸时触发IndexError索引越界问题咨询

报错原因及解决方案

这个报错是代码缺陷+训练数据不匹配共同导致的,直接触发原因是recognizer.predict()返回的人脸id数值超出了names列表的索引范围。

1. 代码本身的缺陷

现有代码仅判断了置信度是否低于100,没有对返回的id做任何边界合法性校验,只要predict返回的id大于等于names列表的长度,就会直接触发索引越界报错。当前你定义的names列表长度为6,合法索引范围是0~5,只要返回的id≥6就会报错。

2. 训练数据异常的诱发原因

训练模型时分配的人脸标签id,超出了当前names列表的索引范围。比如训练时你给某个人脸分配的标签是6,但names列表最多只到索引5(对应元素W),识别到该人脸时predict就会返回id=6,直接触发越界。

修复方案

首先给代码增加id合法性校验逻辑,替换原有的置信度判断块:

# 检查置信度是否小于100 ==> "0"是完美匹配
if confidence < 100:
    # 新增边界校验,避免索引越界
    if 0 <= id < len(names):
        id = names[id]
    else:
        id = "unknown"
    confidence = "  {0}%".format(round(100 - confidence))
else:
    id = "unknown"
    confidence = "  {0}%".format(round(100 - confidence))

其次核对训练数据集的标签id,确保所有用到的id都有对应的names列表元素,没有超出索引范围的标签。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:36:01