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

树莓派4运行路面坑洞检测程序时实现检测到坑洞自动抓拍图像

检测到坑洞自动抓拍对应帧实现方法

核心逻辑很简单:在推理得到检测结果后,判断当前帧是否存在符合置信度要求的坑洞目标,满足条件时调用OpenCV的图像写入接口保存当前帧即可,额外加个时间间隔判断避免同一个坑洞连续重复抓拍占用存储。

具体修改步骤

  • 首先在代码开头补充需要的依赖和抓拍相关配置:
import os
import time

# 抓拍图片保存目录
SAVE_FOLDER = "pothole_captures"
# 同一坑洞最小抓拍间隔(单位:秒),避免短时间重复存图
MIN_CAPTURE_GAP = 2
# 初始化上次抓拍时间戳
last_save_ts = 0
# 坑洞对应的类别ID,需和你模型标签文件里的序号匹配
POTHOLE_CLS_ID = 0
# 目录不存在时自动创建
os.makedirs(SAVE_FOLDER, exist_ok=True)
  • 然后在你拿到检测结果的代码行detection_result = detector.detect(input_tensor)后面,追加检测判断和存图逻辑:
# 遍历检测结果判断是否存在坑洞
has_pothole = False
for det in detection_result.detections:
    cat = det.categories[0]
    # 匹配坑洞类别+满足置信度阈值(和你初始化模型时设的0.3阈值保持一致)
    if cat.index == POTHOLE_CLS_ID and cat.score >= 0.3:
        has_pothole = True
        break

current_ts = time.time()
# 检测到坑洞 且 距离上次抓拍超过间隔,就执行存图
if has_pothole and (current_ts - last_save_ts) > MIN_CAPTURE_GAP:
    # 用时间戳生成文件名,避免重名覆盖
    file_name = f"pothole_{time.strftime('%Y%m%d_%H%M%S', time.localtime(current_ts))}.jpg"
    save_path = os.path.join(SAVE_FOLDER, file_name)
    # 直接保存当前处理后的帧即可,如果你要存带检测框的图,就把画框的代码放在这行前面
    cv2.imwrite(save_path, image)
    print(f"已抓拍坑洞帧,保存路径:{save_path}")
    # 更新上次抓拍时间
    last_save_ts = current_ts

注意事项

  • 如果你需要保存无标注的原始帧,就在执行cv2.flip(image, 1)之后先拷贝一份原始帧变量,存图时用这个原始变量即可;如果要保存带检测框、置信度文字的可视化结果,就等所有绘制操作完成后再调用cv2.imwrite。
  • 树莓派4的SD卡存储空间有限,MIN_CAPTURE_GAP建议设为1~3秒,不要过小,否则同一个坑洞会被连续抓拍几十上百张,很快占满存储。
  • POTHOLE_CLS_ID一定要和你自己模型的标签映射对应,比如你标签文件里坑洞是第一个类别就填0,第二个就填1,填错会导致误抓拍其他目标。
  • 不建议在存图时频繁切换相机分辨率,树莓派上USB相机切换分辨率容易触发丢帧、相机断连问题,用你当前推理用的640*480分辨率存图足够做后续核验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:57:25