DM13 双光设备:上电、拉流与 ECC 配准

概述与目标

**目标**:Windows PC + DC12V 供电,通过网络拉取双光视频流,在 PC 端用 Python 做 ECC 视觉配准研究。**不需要做嵌入式开发**。 ---

方法步骤

第一阶段:硬件上电连通

1)供电接线(说明书:2PIN_A 接口)

Pin1 → DC 负极(GND)
Pin2 → DC 正极(12V)
  • 需要一个 2Pin(间距 1.25mm 或 2.0mm,以实物为准)的连接器,或临时用杜邦线插接。
  • 上电后观察模组是否有指示灯亮起。 操作前必须戴防静电手套,绝对不要触碰热成像镜头表面。

2)网络连接(说明书:8PIN 网口接口)

网线一端 → 摄像头 8PIN 网口
网线另一端 → Windows 电脑网口(或路由器)
  • 推荐先接路由器,让摄像头自动获取 DHCP 地址,步骤更省事。

3)找到摄像头 IP 地址(Windows) 在 Windows 上打开 CMD:

:: 先查自己电脑的网段
ipconfig

:: 扫描局域网内设备(需要先安装 nmap)
nmap -sn 192.168.1.0/24

或者用 Advanced IP Scanner(免费)一键扫描,找到摄像头 IP。

第二阶段:访问摄像头,验证图像

4)浏览器登录 说明书提示支持 IE11 / Chrome 40 / Firefox 48:

http://<摄像头IP>

默认账号:admin
默认密码:通常是 admin 或 12345(首次登录可能要求修改)

登录后通常能看到:

  • 可见光画面(1080P)
  • 热成像画面(384×288)
  • 双光融合预览

5)获取 RTSP 视频流地址(先用 VLC 验证拉流) 海思 Hi3516 常见 RTSP 地址格式示例:

# 可见光主码流
rtsp://<用户名>:<密码>@<IP>:554/Streaming/Channels/101

# 热成像主码流
rtsp://<用户名>:<密码>@<IP>:554/Streaming/Channels/201

# 可见光子码流
rtsp://<用户名>:<密码>@<IP>:554/Streaming/Channels/102

VLC 验证:

VLC → 媒体 → 打开网络串流 → 粘贴 RTSP 地址

第三阶段:PC 端 Python 拉流

6)安装环境

pip install opencv-python numpy matplotlib

7)拉取双路视频流测试

import cv2

# 分别连接热成像和可见光
cap_thermal = cv2.VideoCapture(
    "rtsp://admin:password@192.168.1.x:554/Streaming/Channels/201"
)
cap_visible = cv2.VideoCapture(
    "rtsp://admin:password@192.168.1.x:554/Streaming/Channels/101"
)

while True:
    ret1, frame_thermal = cap_thermal.read()
    ret2, frame_visible = cap_visible.read()

    if not ret1 or not ret2:
        print("拉流失败,检查 RTSP 地址")
        break

    cv2.imshow("Thermal", frame_thermal)
    cv2.imshow("Visible", frame_visible)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap_thermal.release()
cap_visible.release()
cv2.destroyAllWindows()

能看到两路画面,说明链路通了。

第四阶段:ECC 视觉配准

8)采集标定帧(保存一对静止场景图像)

import cv2

cap_t = cv2.VideoCapture("rtsp://admin:password@IP:554/Streaming/Channels/201")
cap_v = cv2.VideoCapture("rtsp://admin:password@IP:554/Streaming/Channels/101")

ret1, thermal = cap_t.read()
ret2, visible = cap_v.read()

# 转灰度
thermal_gray = cv2.cvtColor(thermal, cv2.COLOR_BGR2GRAY)
visible_gray = cv2.cvtColor(visible, cv2.COLOR_BGR2GRAY)

cv2.imwrite("thermal_calib.png", thermal_gray)
cv2.imwrite("visible_calib.png", visible_gray)
print("标定帧已保存")

9)运行 ECC 配准

import cv2
import numpy as np

thermal = cv2.imread("thermal_calib.png", cv2.IMREAD_GRAYSCALE)
visible = cv2.imread("visible_calib.png", cv2.IMREAD_GRAYSCALE)

# 热成像分辨率 384×288,需要先 resize 到可见光尺寸
h, w = visible.shape
thermal_resized = cv2.resize(thermal, (w, h))

# ECC 配准
warp_matrix = np.eye(2, 3, dtype=np.float32)
criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 1000, 1e-7)

try:
    cc, warp_matrix = cv2.findTransformECC(
        thermal_resized,   # 模板图(热成像)
        visible,           # 输入图(可见光)
        warp_matrix,
        cv2.MOTION_AFFINE,
        criteria,
    )
    print(f"配准成功,相关系数: {cc:.4f}")
    print("变换矩阵:\n", warp_matrix)
    np.save("warp_matrix.npy", warp_matrix)
except cv2.error as e:
    print(f"ECC 配准失败: {e}")
    print("建议:换一帧纹理更丰富的场景重试")

10)实时融合验证

import cv2
import numpy as np

# 加载之前标定好的矩阵
warp_matrix = np.load("warp_matrix.npy")

cap_t = cv2.VideoCapture("rtsp://admin:password@IP:554/Streaming/Channels/201")
cap_v = cv2.VideoCapture("rtsp://admin:password@IP:554/Streaming/Channels/101")

while True:
    ret1, thermal = cap_t.read()
    ret2, visible = cap_v.read()

    if not ret1 or not ret2:
        break

    h, w = visible.shape[:2]
    thermal_resized = cv2.resize(thermal, (w, h))

    # 应用变换矩阵对齐
    thermal_aligned = cv2.warpAffine(
        thermal_resized,
        warp_matrix,
        (w, h),
        flags=cv2.INTER_LINEAR + cv2.WARP_INVERSE_MAP,
    )

    # 融合
    fused = cv2.addWeighted(visible, 0.6, thermal_aligned, 0.4, 0)

    cv2.imshow("Thermal", thermal_resized)
    cv2.imshow("Visible", visible)
    cv2.imshow("Fused", fused)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap_t.release()
cap_v.release()
cv2.destroyAllWindows()

验证与失败边界

常见问题预判

问题 原因 解决
找不到 IP DHCP 未分配 把电脑直连摄像头,手动设置同网段 IP(如 192.168.1.100)
RTSP 地址不对 不同固件地址格式不同 登录 Web 界面,在“设备信息 / 网络设置”里找 RTSP 地址
ECC 配准失败 场景纹理太少,或图像过暗 换有明显边缘的场景,或先做直方图均衡化预处理
两路流不同步 网络延迟 降低分辨率用子码流,或改用单路融合流
--- 建议按阶段推进:先把第一阶段的上电和 IP 确认做完,遇到问题再继续细化。

验收顺序

  1. 先确认供电、电源指示灯和网口物理链路;
  2. 再确认 IP、浏览器登录和 VLC 单路 RTSP;
  3. 双路 Python 拉流稳定后,保存一对静止标定帧;
  4. 最后运行 ECC 并保存矩阵、融合图和失败日志。

本页中的账号、密码、IP 和 RTSP 地址均为示例占位;正式部署时替换为设备实际值。设备流能打开只证明链路可用,不证明跨模态几何已达到视觉配准主笔记的指标要求。

总结

DM13 的可复用闭环是“安全供电 → 获取 IP → VLC 验证 RTSP → Python 双路拉流 → 保存标定帧 → ECC 配准与融合”。任何阶段失败都先在本阶段解决,再进入下一阶段;正式坐标协议和多指标验收统一参考视觉配准主笔记。