当前工程链路: RK3568 (Linux) 红外相机采集 → ONNX 火情模型推理 → 30s 分段循环录像 → Windows 端视频批量抽帧制数据集

摄像头采集模块优化(RK3568 Linux 端)

1. 设备重连机制(无人值守)

长时间运行会出现 USB 设备断开、UVC 掉线,增加摄像头自动重连逻辑,无需人工重启程序。

def init_camera():
    cap = cv2.VideoCapture(CAM_ID)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 256)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 192)
    cap.set(cv2.CAP_PROP_FPS, 8)
    cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
    return cap

# 主循环中增加重连判断
cap = init_camera()
while True:
    cap.grab()
    ret, frame = cap.retrieve()
    if not ret:
        print("camera disconnect, reconnecting...")
        cap.release()
        time.sleep(1)
        cap = init_camera()
        continue

视频存储与文件管理优化

1. 分层存储策略

  • 正常视频:保留 10 个,循环覆盖(原有逻辑)
  • 火情视频:永久保留 + 按日期分文件夹归档,避免单目录文件过多
# 新增按日期建目录
from datetime import datetime
date_str = datetime.now().strftime("%Y%m%d")
daily_dir = os.path.join(VIDEO_DIR, date_str)
os.makedirs(daily_dir, exist_ok=True)
video_name = os.path.join(daily_dir, f"FIRE_{timestamp}.avi")

2. 自动磁盘巡检与老旧文件清理

增加磁盘空间检测,当剩余空间低于阈值(如 1GB),自动删除最早的正常视频,防止磁盘爆满导致程序崩溃。

程序安全性与异常处理

1. 异常捕获 + 日志系统

原有代码报错会直接退出,增加try/except全局捕获,同时落地本地日志,记录运行状态、火情时间、报错信息,方便事后排查。

import logging

logging.basicConfig(filename="system.log", level=logging.INFO,
                    format="%(asctime)s - %(levelname)s - %(message)s")

if is_fire and not fire_detected_flag:
    logging.info("Fire detected")

阴燃 / 明火区分算法优化

  1. 多特征融合:灰度均值 + 方差 + 高温像素面积 + 帧间波动,区分正常 / 阴燃 / 明火,替代单一阈值判断。
  2. 滑动窗口滤波:对连续多帧特征做平滑,滤除瞬时噪声,降低误报。
  3. 动态阈值:根据环境温度自适应调整判断阈值,适配不同场景。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐