Azure Kinect 测温
Azure Kinect 有红外相机, 疫情当前,能否用Azure Kinect快速搭建一个红外测温系统吗?相比网上的Openmv4模块快4000块的售价,azure kinect还是很有吸引力的
手上正好有一台,二话不说,动手。
首先找国荣聊了下, 从SDK 下手。 地址https://microsoft.github.io/Azure-Kinect-Sensor-SDK/master/index.html。 找了下有温度接口, 通过sensor获取一系列的Capture,其中就有温度属性。
代码尝试
细节没办法了解。还好有很多试例代码。 https://github.com/microsoft/Azure-Kinect-Samples/tree/master/build2019/csharp
都可以用。 很快我们就拿到第一个温度。 温度30.09C. 显然有问题。
代码取的是整张图的温度,我们需要额头部分的温度。 SDK上有三个方法
一个个试完以后,发现都不行。imuSample的是运动检测的Sensor的温度。Capture的温度也抓到过,但是温度是整个深度相机抓到的画面的温度。
红外图像有不同的颜色来代表温度, 能用颜色来换算成温度吗?
测试图片发现. 三个红色箭头温度肯定不一样的,但是在红外图像里,都是白的。手臂的温度肯定要比柜板和身上的衣服温度高才对。
后来又再网上做了些研究. 结论如下
Kinect 确实有一个红外摄像机,它与红外投影仪一起使用来捕捉深度图像,但是,红外摄像机仅在近红外频率(波长为 ±1 微米)时敏感。"热"红外的波长通常要长得多,波长为 1 到 300 微米,kinect摄像机对此不敏感。
热像仪(4万多)如此昂贵是有原因的。
下一步
有时间可以用Openmv4的红外模块自己搭一个,淘宝上有很多,但没有SDK和硬件整合,相对要难很多。
1. 首先要完成红外相机和可见光相机的定位,同步。 OpenCV库里面有方法, 关键字calibration
2. 用可见光相机抓人脸,定位额头,取坐标(口罩遮脸,测试过可以用OpenCV 或者微软的Custom Vison来精确定位)
3. 利用额头坐标,取额头处的温度。