【问题标题】:Raspberry Pi GPIO pin issue in tflite object detectiontflite 对象检测中的 Raspberry Pi GPIO 引脚问题
【发布时间】:2020-09-01 04:37:15
【问题描述】:

我已成功训练我的自定义模型并将其用于对象检测。但是,关于自定义模型的 if-else 条件,我遇到了一个小问题。我的训练模型中只有一个对象/类,当检测到它时,我想让一个 gpio 引脚变为高电平(LED),当对象从网络摄像头馈送中移除时,引脚应该变为低电平。当我运行代码时,引脚在完美检测时确实会变为高电平,但即使我从网络摄像头馈送中移除对象,它也会保持高电平。我使用了以下 if-else 条件:

if (object_name == labels[int(classes[i])]) and (scores[i]) >= 0.95):
GPIO.output(13, GPIO.HIGH)
else:
GPIO.output(13, GPIO.LOW)

我正在使用 Edje Electronics 的 tflite 对象检测代码中的代码:

https://github.com/EdjeElectronics/TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi/blob/master/TFLite_detection_webcam.py

对象检测代码中有两个循环一个 用于网络摄像头馈送 第二个 用于在对象检测时创建边界框被检测到。如果我在 第二个 循环后尝试降低 gpio 引脚,则 LED 不会亮起。

【问题讨论】:

    标签: python raspberry-pi3 tensorflow-lite


    【解决方案1】:

    不看你的代码很难说出它的确切原因,但根据你链接的示例代码,听起来你正在做这样的事情:

    # First loop for webcam frame
    while True:
    
      # ...
    
      # Second loop for detection / drawing bounding box
      for i in range(len(scores)):
        if <your match condition>:
          GPIO.output(13, GPIO.HIGH)
        else:
          GPIO.output(13, GPIO.LOW)
    
        # ...
    

    如果这是您的代码的样子,您所做的是始终根据scores 列表中的最后一项打开/关闭 LED,这可能不是您想要的。我建议修改如下代码:

    # First loop for webcam frame
    while True:
    
      # ...
    
      found_match = False  
      # Second loop
      for i in range(len(scores)):
        if <your match condition>:
          found_match = True
    
        # ...
    
      # Outside the second loop
      GPIO.output(13, found_match)
    

    这将使您的 LED 仅在根据您的匹配条件检测到至少一个物体时打开,否则关闭。

    如果这不是您的问题,请使用您的完整代码更新您的问题。

    【讨论】:

    • 抱歉这么晚才回复你。您所做的修订应该可以解决问题。
    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多