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

树莓派4运行TensorFlow Lite目标检测,GPIO控制LED的分数逻辑问题

解决树莓派TFLite目标检测中基于置信度范围控制LED的问题

你的核心问题在于没有对置信度的范围做限定,同时当前的遍历逻辑存在缺陷——如果同一帧内检测到多个物体,后面的物体会覆盖前面的LED状态(比如先检测到符合条件的defective,LED点亮,随后检测到其他物体又会熄灭LED)。

以下是修改后的完整代码,整合了正确的置信度判断和逻辑优化:

import RPi.GPIO as GPIO

# GPIO初始化
GPIO.setmode(GPIO.BOARD)
LED_PIN = 11  # 替换为你实际使用的GPIO引脚
GPIO.setup(LED_PIN, GPIO.OUT)

def turn_on_led():
    GPIO.output(LED_PIN, GPIO.HIGH)

def turn_off_led():
    GPIO.output(LED_PIN, GPIO.LOW)

# 定义目标检测的关键参数
TARGET_CLASS = 'defective'
MIN_CONF_THRESHOLD = 0.95  # 对应95%置信度
MAX_CONF_THRESHOLD = 0.99  # 对应99%置信度

while True:
    # 保留原TFLite检测逻辑:获取当前帧的classes、scores、labels数组
    # ...(比如读取摄像头帧、运行模型推理的代码)

    # 初始化LED状态:默认熄灭
    need_turn_on = False

    for i in range(len(scores)):
        # 先过滤无效检测结果
        if scores[i] > min_conf_threshold and scores[i] <= 1.0:
            object_name = labels[int(classes[i])]
            current_score = scores[i]

            # 判断是否为目标类别且置信度在指定范围内
            if (object_name.lower() == TARGET_CLASS.lower() 
                and MIN_CONF_THRESHOLD <= current_score <= MAX_CONF_THRESHOLD):
                need_turn_on = True
                # 找到符合条件的目标后可提前跳出循环,提升效率
                break

    # 根据最终判断结果控制LED
    if need_turn_on:
        turn_on_led()
    else:
        turn_off_led()

    # 保留原代码的其他逻辑:绘制检测框、显示画面等
    # ...

# 程序退出时清理GPIO资源
GPIO.cleanup()

关键修改说明:

  1. 置信度范围限定:明确设置0.95到0.99的分数区间,精准匹配需求中的95%-99%置信度要求
  2. 逻辑优化:
    • 默认LED为熄灭状态,遍历检测结果时仅在找到符合条件的目标时标记点亮
    • 遍历结束后统一控制LED,避免同一帧内多个检测结果互相覆盖LED状态
  3. 可维护性提升:用常量定义目标类别和置信度阈值,后续调整参数无需修改核心逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:43:11