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、浏览器登录和 VLC 单路 RTSP;
- 双路 Python 拉流稳定后,保存一对静止标定帧;
- 最后运行 ECC 并保存矩阵、融合图和失败日志。
本页中的账号、密码、IP 和 RTSP 地址均为示例占位;正式部署时替换为设备实际值。设备流能打开只证明链路可用,不证明跨模态几何已达到视觉配准主笔记的指标要求。
总结
DM13 的可复用闭环是“安全供电 → 获取 IP → VLC 验证 RTSP → Python 双路拉流 → 保存标定帧 → ECC 配准与融合”。任何阶段失败都先在本阶段解决,再进入下一阶段;正式坐标协议和多指标验收统一参考视觉配准主笔记。