
开源协议
:MIT License
描述
项目说明
可见光相机具有分辨率高、帧率高的特点,热成像传感器可以测量温度分布,但是分辨率低、帧率低,使用可见光图像来补偿热成像图像,从而可以得到质量较高的热量分布图。本体具有一个普通的可见光camera和一颗热成像传感器,经过MCU读取后通过USB接口传输到手机端,借助手机强大的算力支持来进行图像处理和融合,手机屏幕上显示最终图像
开源协议
MIT协议,被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及出售软件及软件的副本。 被授权人可根据程式的需要修改授权条款为适当的内容。 在软件和软件的所有副本中都必须包含版权声明和许可声明,但原作者不承担使用后的风险,也没有技术支持的义务
项目相关功能
本项目整体功能框架如下,MCU通过I2C接口读取热成像传感器数据,然后通过USB接口传向USB Hub,Camera为一个通用免驱USB摄像头,也接到USB Hub上面,Usb Hub和Android手机连接,在Android手机上有两个设备,一个是Camera,一个是热成像传感,在Android手机应用层获取到两个传感器数据,通过一定算法进行融合,得到分辨率较高、质量较好的热成像图

项目属性
本项目为首次公开,为本人原创项目。项目未曾在别的比赛中获奖。
项目进度
20231128
基本功能OK,完成度还需后续优化,已知问题如下:
- STM32 USB到SL2.1A的线路连反,工程中已修正
- 亮度过高的场景显示图像会过曝
- 屏幕旋转当前未适配,请关闭屏幕旋转
20240203
- 新增高低温跟踪、算法参数调整、融合模式切换、帧率切换功能
- 优化界面,修复一些bug,自动锁定屏幕旋转
- 新增3d打印外壳
设计原理
MCU
MCU使用STM32F411CEU6,带浮点运算单元可对热成像数据进行解算,带USB FS,最小系统电路如下

USB Hub
USB Hub使用SL2.1A,支持USB HS可以用于传输摄像头数据,根据手册此处接了晶振U3不需要焊接。USB1是一个USB TypeC公头,用于连接手机

Camera使用一块640x480的UVC摄像头子板,通过焊接方式连接到CAM_DM/CAM_DP
热成像传感器
热成像传感器使用MLX90640,分辨率32x24像素,I2C接口最高速率1MHz

电源
直接使用一块LDO进行稳压,型号是ME6211,该型号可以直接使用低ESR的陶瓷电容进行输入输出的稳压

其他
电源灯和测试LED

调试SWD接口

测试点,固件使用UART2作为Debug串口

软件说明
代码资源
分为单板固件、Android App和3d打印外壳三部分
单板固件
https://github.com/colourfate/thermal_bridge
Android App
https://github.com/colourfate/ThermalEyes
3d打印外壳
请在附件中下载 3d_printed_casing.zip 文件,提供step文件,stl文件可直接打印
单板固件
开发环境
目前使用STM32CubeIDE
软件流程
软件分为两部分组成:mlx90640驱动、热成像数据传输协议,总的来说软件流程就是通过I2C从mlx90640读取数据,然后进行打包,最后使用USB发送,整个过程使用一个循环即可,其中mlx90640的温度测量范围为-40到300摄氏度,保留两位小数转换为整型为-4000到30000,可以用16位整型覆盖

mlx90640驱动
mlx90640官方已经提供驱动,只需要实现对应I2C读写操作,即可通过API来读取传感器数据
数据协议
从传感器获取的数据需要通过USB发送,由于获取的温度为float型,实际需要精度仅需要小数点后两位即可,因此转换为整型可以节约带宽,mlx90640温度测量范围为-40到300摄氏度,可以用16位有符号整型,和上位机通信协议如下:
----------------------------------------------------------------------------
| header | type | length | data[0] | data[1] | ... | data[n] |
----------------------------------------------------------------------------
- header:uint16_t,起始码,固定0x8000
- type:uint16_t,表示数据类型
- length:uint16_t,表示数据包长度,表示后续data数据包的个数
- data:uint8_t数组,放实际数据
USB发送
USB库由CubeIDE自动生成,直接调用USBCDC发送数据即可
Android APP
这里有两个USB设备,一个是USB串口,用于传输热成像数据,一个USB摄像头,用于传输图像数据,Android端主要完成数据读取、融合和显示功能
软件框架
Camera和热成像传感器的数据读取都有对应的库支持,两个库对数据的读取都采用了异步回调的方式,因此这里采用双buffer缓存的机制,以Camera为例:
- 初始化一个长度为2的队列,当回调发生时,新申请一块buffer,将YUV数据拷贝到这块buffer中,然后将这块buffer放入队列
- 起一个线程,不断从队列中读取数据,用于数据融合
- 如果线程读取太慢,回调发现队列已经满,则从队列中取出一块buffer丢弃,然后再将新的buffer放入队列
- 如果回调一直不来,线程会发现队列为空,则跳过下一次再读取
- 因为每一次回调都会新申请一块buffer,因此buffer不存在并发问题
- 队列添加和删除访问的都是同一个数据结构,存在并发问题,操作时需要注意上锁
如上所述,存在两个队列,一个存放YUV数据,一个存放热成像数据,通过一个线程来访问两个队列,当两个队列都有数据时才取出进行数据融合,综上所述,软件总体流程如下:

Camera数据读取和预览
Android对摄像头的支持使用UVCAndroid,参考文章:https://blog.csdn.net/hanshiying007/article/details/124118486
该库基于saki4510t/UVCCamera开发,提供了更为简单的接口。预览和数据读取参考其中的CallbackDemo,需要重写其中的ICameraHelper.StateCallbackd,这里获取摄像头的数据然后将其放入YUV队列,格式为NV21
热成像数据读取和预览
3.2中所述热成像数据通过USBCDC传输,在Android端看到的是一个虚拟串口,Android开发环境中,使用felHR85/UsbSerial提供虚拟串口的操作支持,回调中将热成像数据放入队列中
数据融合
数据获取
使用一个线程来获取数据,这里预计相机帧率比热成像帧率更高,等待 mYUVQueue 队列有数据时才进行数据融合,当 mThermalQueue 没有数据时,使用上一帧的数据
融合算法
这里摄像头采集的是可见光的图像,分辨率是640x480,热成像采集的是温度分布,分辨率是32x24,融合算法的目的是通过参考可见光的图像,让热成像采集的温度图像拥有更多的细节。
融合算法第一步是从可见光相机中提取其中的高频信息,当前 Android 端APP集成了 OpenCV,之前的方法已没有使用,这里使用高斯模糊的方法提取高频信息,参考博客:使用OpenCV Mat对图片低频信息、高频信息提取及无损还原(高斯模糊、做差、求和)
Mat im_cam_l;
GaussianBlur(im_cam, im_cam_l, Size(11, 11), 5, 5);
Mat im_cam_h = im_cam - im_cam_l;
提取高频信息之后,再将其和插值放大后的热成像图像进行叠加,获得融合后的图像,最后再赋予伪彩色
Mat im_fusion = im_cam_h + im_them_scale;
applyColorMap(im_fusion, im_fusion_color, COLORMAP_JET);
仿真效果如下,其中第一张是camera拍的图片,第二张是热成像获取的温度分布经过插值放大后的图片,分辨率均为640x480


首先对可见光相机进行高频信息提取,低频信息和高频信息分别如下


然后叠加上热成像图像,并赋予伪彩色,采用JET色彩表,结果如下

色彩映射
色彩映射是直接将热成像图像赋予伪彩色后,再按照YUV的方式叠加到可见光的图像中,由于可见光图像中本身包含大量的信息,相当于增加了热成像的信息量。色彩映射基本思想是将热成像的RGB分量按照公式换算为YUV分量,然后再各自减去128作为可见光图像的偏移量,叠加到可见光图像中,色彩映射效果如下

设计注意事项
1. U3磁珠仅作测试使用,不需要焊接!不需要焊接!不需要焊接!
2. STM32到SL2.1A的usb线连反,使用飞线修正后验证正常,工程中已修改,但时间太紧还未打样,不放心可以在版本控制中回退到release_1第一次打样版本,然后自行修正

3. 演示中板子打样厚度为1.2mm
4. camera的usb速率较高,打样时需要进行阻抗控制
5. camera子板参考此链接,连接线间距为0.8mm,参考此链接


6. mlx90640传感器较高,最好将camera子板垫高一点
实物展示
b站视频
以下是较为早期的版本
演示
https://www.bilibili.com/video/BV1M64y177ig
原理讲解
https://www.bilibili.com/video/BV1yb4y1T7hD
单板硬件


拍摄效果

色彩映射效果

图像融合效果

设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。











