基于 HM-TM32 红外摄像头:棉花燃烧+起火自动录制 30 秒视频
在棉花仓储、纺织原料监测等实际场景中,利用 HM-TM32 微型红外测温机芯实现非接触式火情监测具备极高的实用价值,本文基于 Windows 笔记本环境,实现红外摄像头实时画面显示,并在检测到棉花起火或高温异常时自动录制 30 秒视频留存证据。
一、方案说明与硬件适配
本方案基于 HM-TM32-3RG/ST 红外测温机芯开发,该机芯分辨率为 256×192,支持 YUYV 视频格式输出,在 Windows 系统下需使用专用参数才能稳定读取图像,避免出现花屏、黑屏、闪跳等问题,代码采用分离式图像读取方式,先抓取帧再解析帧,大幅提升红外摄像头的兼容性与稳定性,同时通过画面平均亮度判断是否出现火情,检测到异常后自动触发视频录制,全程无需人工干预。
二、核心代码
import cv2 import time # 配置 CAM_ID = 1 VIDEO_DURATION = 30 # 录制30秒 RECORD_FLAG = False START_TIME = 0 # Windows 专用打开方式(你已验证可用) cap = cv2.VideoCapture(CAM_ID, cv2.CAP_DSHOW) # 【HM-TM32 原厂参数】你已验证可用 cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'YUYV')) 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) # 检查是否打开 if not cap.isOpened(): print(f"摄像头 {CAM_ID} 打开失败!") exit() print(f"✅ 摄像头 {CAM_ID} 已打开,正在显示画面...") # 预热(解决启动花屏) for i in range(15): cap.grab() time.sleep(0.08) # 视频保存设置 fps = 8 fourcc = cv2.VideoWriter_fourcc(*'XVID') out = None # 主循环 while True: cap.grab() ret, frame = cap.retrieve() if not ret: print("⚠️ 读取失败,重试中...") continue # ---------------------- 起火检测(高温高亮)---------------------- gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) fire_detected = gray.mean() > 65 # 温度/亮度阈值 # ---------------------- 自动录制30秒 ---------------------- if fire_detected and not RECORD_FLAG: RECORD_FLAG = True START_TIME = time.time() out = cv2.VideoWriter("fire_record.avi", fourcc, fps, (256, 192)) print("🔥 检测到棉花起火,开始录制 30 秒视频") if RECORD_FLAG: out.write(frame) # 显示录制状态 cv2.putText(frame, "RECORDING...", (5, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1) # 到时间停止 if time.time() - START_TIME >= VIDEO_DURATION: RECORD_FLAG = False out.release() out = None print("✅ 30秒视频录制完成,已保存为 fire_record.avi") # 显示状态 if fire_detected: cv2.putText(frame, "FIRE", (5, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1) else: cv2.putText(frame, "NORMAL", (5, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1) # 显示画面 cv2.imshow("HM-TM32 Infrared Test", frame) # 按 Q 退出 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放资源 cap.release() if out is not None: out.release() cv2.destroyAllWindows()以下为录制的视频和棉花燃烧的图像集
三、常见问题解决
- 摄像头打开成功但画面黑屏、花屏:已在代码中使用 HM-TM32 专用格式 YUYV、分辨率 256×192 和预热处理,可直接解决该问题。
- 报错无法读取帧:降低帧率至 8fps、减小缓冲区,Windows 平台固定使用 CAP_DSHOW 模式打开摄像头。
- 无法触发录制:可适当调整火情判断阈值
gray.mean() > 65,数值越小灵敏度越高,适配棉花阴燃等低热目标。
