项目名称:热脉智诊
核心技术路线:FPGA 边缘计算 + PyTorch 多模态深度学习
目标:解决传统医用红外热成像“看不清(低像素)”与“买不起(高成本)”两大痛点

摘要

我们自研 640×480 高清红外模组,结合 FPGA 实时预处理 + YOLOv11 穴位定位 + 双流网络(Dual-Stream)疾病诊断,实现从硬件采集到云端智能报告的闭环系统。
最终在部分医院进入临床验证,早期筛查准确率超 90%

关键词:FPGA、Verilog、PyTorch、YOLOv11、Transformer、医疗影像AI、红外热成像、中医穴位


一、项目背景与技术痛点

红外热成像(Infrared Thermography)被誉为“医学影像的温度计”,能无创反映组织代谢状态。但实际落地面临三大瓶颈:

  1. 硬件成本与性能矛盾

    • 低成本设备:分辨率仅 ~256 级,病灶边界模糊
    • 高端进口(如 FLIR A700):清晰但价格 prohibitively 高,基层医院难以普及
  2. 图像可视化局限
    传统伪彩仅 256 色阶,高温区过渡生硬,细微温差难辨

  3. 缺乏量化标准
    中医讲究“穴位+经络”,传统设备无自动穴位定位,难以与中医理论深度结合

解决方案:端-边-云 协同架构


二、系统整体架构

数据流向:
量子阱探测器 → FPGA 预处理 (Edge) → 上位机 → 云端 AI 集群 (Cloud) → 终端展示

  • 采集层:MEMS 量子阱红外探测器(QWIP),640×480 分辨率,温度灵敏度 0.05℃
  • 边缘层:自研 FPGA,负责时序驱动、非均匀性校正(NUC)、数据压缩
  • 云端层:Ceph 分布式存储 + Spark 计算引擎,部署多模态诊断模型

在这里插入图片描述

三、硬件层:FPGA 数据采集与降本逻辑

放弃昂贵专用 ISP 芯片,自研 FPGA 逻辑,芯片成本降低 40%+,实现模块化。
在这里插入图片描述

3.1 探测器驱动逻辑(Verilog 核心)
// FPGA 红外探测器采集控制模块
module IR_Sensor_Driver (
    input  wire        clk,         // 系统主时钟
    input  wire        rst_n,       // 异步复位,低有效
    input  wire [13:0] raw_data,    // 探测器原始 14-bit 数据
    output reg  [15:0] pix_data,    // 预处理后像素数据
    output reg         data_valid   // 数据有效标志
);

    // 状态定义
    localparam IDLE    = 2'b00;
    localparam V_SYNC  = 2'b01;
    localparam H_SYNC  = 2'b10;
    localparam CAPTURE = 2'b11;

    reg [1:0] state, next_state;

    // 寄存器(示例,实际需校准表)
    reg [15:0] gain_reg   = 16'h0100;  // 增益(定点 1.0)
    reg [15:0] offset_reg = 16'h0000;  // 偏置

    // 状态转移
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) state <= IDLE;
        else        state <= next_state;
    end

    // 简化版采集与 NUC 预处理(定点运算节省资源)
    always @(posedge clk) begin
        if (state == CAPTURE) begin
            // Output = (Input * Gain) + Offset   >> 8bit 右移实现定点
            pix_data   <= (raw_data * gain_reg) >> 8 + offset_reg;
            data_valid <= 1'b1;
        end else begin
            data_valid <= 1'b0;
        end
    end

endmodule

四、视觉算法层:突破 256 色阶的 HSV 增强

核心创新:2000 级 HSV 伪彩映射,高温区不仅变红,还显著增亮。
在这里插入图片描述

4.1 OpenCV 实现
import cv2
import numpy as np

def generate_enhanced_heatmap(norm_temp_data):
    """
    norm_temp_data: 归一化温度矩阵 [0.0, 1.0]
    返回: 2000 级增强伪彩图像 (HWC)
    """
    LEVELS = 2000

    # Hue: 蓝(240) → 红(0)
    hue = np.linspace(240, 0, LEVELS)
    # Saturation: 恒定高饱和
    saturation = np.full(LEVELS, 255, dtype=np.uint8)
    # Value: 核心创新 — 线性从 180 增强到 255
    value = np.linspace(180, 255, LEVELS, dtype=np.uint8)

    # 构建 HSV LUT → RGB
    hsv_lut = np.dstack([hue, saturation, value]).astype(np.uint8)
    rgb_lut = cv2.cvtColor(hsv_lut, cv2.COLOR_HSV2BGR)

    # 温度索引映射
    index_map = (norm_temp_data * (LEVELS - 1)).astype(np.int32)
    heatmap = rgb_lut[index_map]

    return heatmap

五、核心 AI 算法:穴位定位 + 疾病诊断

5.1 穴位精准定位:YOLOv11 + 几何解算

YOLOv11 提取人体 17 个关键点 → 结合“同身寸”二次计算穴位。

公式:
P target = P start + λ ⋅ ( P end − P start ) P_{\text{target}} = P_{\text{start}} + \lambda \cdot (P_{\text{end}} - P_{\text{start}}) Ptarget=Pstart+λ(PendPstart)
在这里插入图片描述

示例(足三里 ST36):

def locate_st36(keypoints):
    knee  = keypoints['right_knee']   # [x, y]
    ankle = keypoints['right_ankle']

    leg_vector = ankle - knee
    ratio = 3.0 / 16.0               # 膝眼下 3 寸 / 小腿 16 寸

    st36_pos = knee + leg_vector * ratio
    return st36_pos

精度:误差 < 1.5 mm

5.2 辅助诊断:双流网络(Dual-Stream)
  • 空间流:ResNet50 + Transformer → 单帧纹理特征
  • 时间流:LSTM → 温度时序趋势
import torch
import torch.nn as nn
import torchvision.models as models

class ThermalDiagnosisModel(nn.Module):
    def __init__(self, num_classes=20):
        super().__init__()
        # 空间流
        self.spatial_backbone = models.resnet50(pretrained=True)
        self.spatial_fc = nn.Linear(1000, 512)
        
        # 时间流(假设输入为 [B, T, 128] 温度序列特征)
        self.temporal_lstm = nn.LSTM(128, 256, num_layers=2, batch_first=True)
        
        # 融合 + 分类
        self.classifier = nn.Sequential(
            nn.Linear(512 + 256, 128),
            nn.ReLU(),
            nn.Linear(128, num_classes)
        )

    def forward(self, img, time_series):
        x1 = self.spatial_backbone(img)      # [B, 1000]
        x1 = self.spatial_fc(x1)             # [B, 512]
        
        _, (h_n, _) = self.temporal_lstm(time_series)
        x2 = h_n[-1]                         # [B, 256]
        
        x = torch.cat([x1, x2], dim=1)
        return self.classifier(x)
5.3 智能报告生成(LLM)

输入:疾病标签 + 异常坐标 + 温差值
输出:病因分析 + 饮食建议 + 中医调理建议(减少医生 70% 文书)
在这里插入图片描述


六、工程实践与数据建设

  • 数据集:自主知识产权,当前 8000+ 例,目标 30000+,覆盖 20 类病种
  • 数据增强:旋转、加噪等,扩充至 3 倍
  • 云平台:10PB 存储,SSL/TLS + AES 加密

七、总结与展望

三大创新点

  1. 硬件:自研 FPGA + 640×480 QWIP → “看得清”且“造得起”
  2. 视觉:2000 级 HSV + YOLO 穴位定位 → “看得懂”
  3. 模型:双流(ResNet+Transformer & LSTM) → 早期筛查 >90%

目前已在医院小规模验证,未来计划:

  • 更多模态融合(可见光 + 红外 + 脉诊)
  • 便携式/家用版本迭代
  • 与中医大模型深度结合

欢迎技术/临床交流~评论区见!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐