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

树莓派OpenCV+YOLO检测person时如何返回布尔值而非绘制检测框

树莓派YOLO智能监控人员检测改造方案

核心需求:检测画面中是否存在person类别,不绘制检测框,直接返回True/False布尔值,适配树莓派低算力场景。

前置确认

你当前使用的COCO数据集类别清单coco.names中,person类别的固定索引为0(即文件第一行内容),如果你的文件有自定义调整,可打开文件数到person所在行,从0开始计数得到对应ID即可。
另外注意你原有导入代码存在语法错误,正确的依赖导入写法为:

import cv2
import numpy as np
import time

修改思路

  • 完全移除/跳过原有绘制检测框的YYY()函数调用,省去绘图带来的不必要算力开销,适配树莓派性能
  • 在拿到YOLO模型返回的检测结果后,直接遍历检测到的类别ID,判断是否存在符合置信度要求的person类别,直接返回布尔结果即可

核心实现代码

新增人员存在判断函数:

def has_person(classes, confs, min_conf=0.6):
    # 替换为你自己coco.names里person对应的ID,默认COCO为0
    PERSON_CLS_ID = 0
    for cls_id, conf in zip(classes, confs):
        if int(cls_id) == PERSON_CLS_ID and float(conf) >= min_conf:
            return True
    return False

主逻辑调用示例(替换原有画框部分的逻辑即可):

# 摄像头、模型加载、帧预处理缩放逻辑保持你原有代码不变
cap = cv2.VideoCapture(0)
# 这里保留你原有加载yolo模型的代码
# model = 你的模型加载逻辑

while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 保留你原有帧缩放、输入模型的预处理逻辑
    # 调用原有检测函数获取结果
    classes, confs, boxes = XXX(frame, model)
    # 直接获取人员检测布尔值,无需画框
    person_exist = has_person(classes, confs)
    
    # 后续自定义逻辑,比如检测到人触发告警、录制等
    if person_exist:
        print("检测到人员")
    else:
        print("无人员")

    # 如需显示原始无标注画面保留以下代码,不需要可直接删除
    cv2.imshow("monitor", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

优化提示

  • 置信度阈值min_conf可以根据实际场景调整:误报多就适当调高(比如0.7),漏报多就适当调低(比如0.5)
  • 删掉不用的YYY()绘图函数后,树莓派上的推理帧率会有明显提升
  • 如果需要过滤画面边缘、特定区域的误检,可以在判断逻辑里加上对应box坐标的过滤规则即可

内容的提问来源于stack exchange,提问作者SCs Raspberry Pi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:45:31