在 Python 中尝试从海康威视摄像头读取热数据

Trying to read Thermal Data from Hikvision Camera in Python

我正在寻找访问相机热数据的解决方案。好吧,我使用了 OpenCV 并且只能得到原始图像。但是没有更多的过程数据,比如温度。我尝试了有关 HikVision 相机的可用库并为此上网。但我无法成功。我也尝试了 FLIR 库,但没有成功。

我的第二个解决方案是将 RGB 转换为温度,但我不知道如何处理这种过程。我也知道设备温度范围在 20 到 150 度之间

寻找这样的东西:

# cam model: hikvision DS-2TD2615-10

import cv2
import hikvision api library for example

thermal = cv2.VideoCapture()
thermal.open("rtsp://""user:pass@ip:port/Streaming/channels/202/")
ret, frame = thermal.read()

while True:
   ret, frame = thermal.read()

   temp_data = api.read_temperature(frame) # -> array or excel file

   cv2.imshow('frame', frame)  
   if cv2.waitKey(1) & 0xFF == ord('q'):
       break
thermal.release()
cv2.destroyAllWindows()

我的视频输入与这张照片类似,例如我想通过点击它来了解鼻子有多热:

来自任何相机的热图像的一般答案 - 您不能只将灰度级别(或颜色,如果您已经将调色板应用于图像)转换为温度值。您需要知道一些与 IR 矩阵相关的系数。某些软件可能会将该数据嵌入到图像文件元数据中,但没有相应的标准。此外,如果您在不知情的情况下重新保存了图像文件,您可能会丢失该元数据。

此外,与普通可见光相机一样,红外相机可以根据当前图像调整其范围。所以,如果你在房间里拍摄一个人,你照片中的最低温度将是 22°С(冷墙或地板),最高温度将是 37°C(人体最热的部位)。在这种情况下,您将获得覆盖 15 度范围的 256 个灰度级,因此黑色为 22°С,白色为 37°С(请记住比例不是线性的!)。您将相机移到一杯温度为 60°С 的热茶上,您会看到灰度级与温度变化的关系。所以,你需要获取每一帧的系数

可以“固定”某些相机的温度范围,但这取决于特定型号。

不仅如此 - 大多数便宜的热像仪根本不处理温度值。

P.S。哦,我刚注意到你相机的确切型号。所以答案更强烈“你不能”。不要指望中国记录不详的监控硬件具有科学或医学热像仪的功能。