FAST 脑卒中早期筛查
基于 FAST 量表(Face / Arm / Speech / Time),融合 MediaPipe 面部关键点检测、Web Audio API 语音分析和设备加速度计,实现浏览器端脑卒中(缺血/出血)家庭智能预警。
全程在浏览器本地完成,数据不上传服务器
技术原理与算法说明
系统流程图
4种表情 × 468点关键点采集
实时对比基线 → 对称性偏差计算
朗读标准文本 → 提取声学特征
RMS / ZCR / 停顿 / 静音比对比
DeviceMotion API → 单侧漂移检测
10题脑卒中风险因素评估
F:40% + S:30% + A:20% + Q:10%
图1:FAST 脑卒中预警系统检测流程
系统流程描述
用户首次使用时进入基线注册阶段(Stage 1 & 3):系统通过 MediaPipe FaceLandmarker 采集用户 4 种表情(自然、微笑、抬眉、眨眼)的 478 个面部关键点坐标作为面部基线;通过 Web Audio API 以 44.1 kHz 采样率录制用户朗读标准文本"我感觉今天很好"的语音,提取 RMS 能量、过零率(ZCR)、停顿次数和静音比例作为语音基线。所有基线数据存储在浏览器 localStorage 中,绝不上传任何服务器。
进入测试阶段(Stage 2, 4, 5, 6):用户重复相同动作,系统实时计算面部关键点与基线的欧氏距离偏差,单侧超过 2 倍标准差判定为阳性(权重 40%);语音特征偏差超过 30% 判定为阳性(权重 30%);设备加速度计监测 10 秒手臂平举漂移量,单侧加速度标准差大于基线 1.5 倍判定为阳性(权重 20%);10 题风险问卷覆盖高血压、糖尿病、房颤等脑卒中危险因素(权重 10%)。最终加权综合评分输出低/中/高三级风险等级及就医建议。
项目基本信息
| 项目名称 | FAST 脑卒中家庭智能预警系统(FAST Stroke Home Intelligent Warning System) |
| 适用场景 | 家庭场景下的脑卒中(缺血性/出血性)早期 FAST 量表筛查与风险预警 |
| 开发环境 | 纯浏览器端运行,无需后端服务器,HTML5 + JavaScript ES6+ |
| 技术依赖 | MediaPipe Tasks-Vision (FaceLandmarker)、Web Audio API、DeviceMotion API、MediaRecorder API |
| AI 模型 | MediaPipe Face Landmarker(478 点人脸网格 + 注意力机制),Google 训练 |
| 模型文件 | face_landmarker.task(Float16,3.7MB),托管于 cdqtech.online 本地 |
| 数据安全 | 全流程浏览器端本地处理,人脸/语音/加速度数据存储在 localStorage,绝不联网传输 |
关键模块说明
1. 面部关键点检测(Face Landmark Detection)
使用 MediaPipe Tasks-Vision 的 FaceLandmarker API,基于 BlazeFace 检测器 + 注意力机制网格模型,输出 478 个三维面部关键点(x, y, z)。模型以 GPU 代理运行(WebGL),单帧推理时间 <15ms。通过 detectForVideo() 在 requestAnimationFrame 循环中处理摄像头的每一帧,提取的 478 个关键点坐标覆盖嘴唇、眼部、眉毛、鼻梁、下颌轮廓等全部面部结构。相比传统 468 点方案,新增的 10 个关键点集中于虹膜区域,提升了眼部不对称性检测精度。
2. 面部对称性偏差分析(Facial Symmetry Analysis)
核心算法:对左右对称关键点对(如左嘴角 vs 右嘴角、左眉梢 vs 右眉梢)计算欧氏距离差值。基线注册阶段采集 4 种表情的 478 点坐标(向量维度 478×3),测试阶段逐帧对比,计算每个关键点的三维欧氏距离偏差 d = √((x₂-x₁)² + (y₂-y₁)² + (z₂-z₁)²)。重点监测区域为口周区(嘴唇左右角)和眼周区(眉梢左右高度),单侧关键点偏移超过基线 2 倍标准差(2σ)时输出阳性标记。面部测试综合偏差 = 各关键点偏差均值,占综合评分 40%。
3. 语音声学特征提取(Voice Acoustic Feature Extraction)
使用 Web Audio API 以 44.1 kHz 采样率录制语音,通过 AudioContext.decodeAudioData() 解码为 PCM 浮点数组。以 20ms 帧长逐帧分析,提取四个核心特征:① RMS 能量 — 反映音量大小,肌力减弱会导致音量显著下降;② 过零率(ZCR) — 信号穿越零点的频率,构音障碍会导致 ZCR 异常波动;③ 停顿次数 — 无声音间隙 >200ms 的事件计数,神经损伤导致停顿增多;④ 静音比例 — 无声段占总时长的比值。采用自适应静音阈值(整体 RMS × 0.12),去除首尾静音区段后计算活跃语音特征,与基线偏差 >30% 判阳性。
4. 手臂加速度漂移检测(Arm Accelerometer Drift Detection)
利用 HTML5 DeviceMotion API 采集设备三轴加速度计(X/Y/Z)数据。用户双手平举手机正对摄像头,系统以 60Hz 采样率持续采集 10 秒。计算指标:① 加速度均方根差值 — 各轴加速度变化的标准差,反映手臂稳定性;② 漂移量 — 手臂位置随时间的偏移总量(对加速度积分)。单侧手臂加速度标准差大于基线 1.5 倍且漂移量显著增大 → 单侧无力阳性。此模块无需额外硬件,适用于智能手机和平板。
5. 脑卒中风险问卷评估(Stroke Risk Questionnaire)
10 道选择题覆盖脑卒中主要危险因素:高血压病史、糖尿病史、高血脂、心房颤动(房颤)、吸烟史、脑卒中家族史、年龄(≥55 岁加权)、BMI(≥25 加权)、既往卒中/TIA 史、缺乏运动(每周 <150 分钟中高强度活动)。每题二选一(是/否),"是"计 1 分,最高 10 分。问卷结果归一化至 0-100% 区间,占综合评分 10%,为辅助评估维度。
6. 多模态加权综合评分(Multimodal Weighted Scoring)
融合四个评估维度的得分,采用加权线性融合公式:综合评分 = 面部偏差得分 × 0.40 + 语音偏差得分 × 0.30 + 手臂偏移得分 × 0.20 + 问卷风险得分 × 0.10。各子模块得分范围归一化至 0-100%。评分阈值:<30% 低风险(建议保持健康生活习惯),30%-60% 中等风险(建议尽快咨询医疗专业人士),>60% 高风险(建议立即寻求紧急医疗帮助)。评分权重基于临床 FAST 量表中各维度的诊断敏感度:面部下垂敏感度最高(76%),其次是言语障碍(55%)和手臂无力(49%)。
检测指标与阈值
| 阶段 | 检测指标 | 阳性判定阈值 | 权重 | 技术实现 |
|---|---|---|---|---|
| Stage 1 | 面部基线(478点×4表情) | —(参考基线) | — | MediaPipe FaceLandmarker + getUserMedia |
| Stage 2 | 关键点对称偏差 | 单侧 > 基线 2σ | 40% | 三维欧氏距离 + 左右对比 |
| Stage 3 | 语音基线(RMS/ZCR/停顿/静音比) | —(参考基线) | — | Web Audio API 44.1kHz 录制 |
| Stage 4 | 语音特征变化率 | 任一指标偏差 >30% | 30% | 20ms帧长 + 自适应静音阈值 |
| Stage 5 | 加速度标准差 / 漂移量 | 单侧 > 基线 1.5× | 20% | DeviceMotion API 60Hz |
| Stage 6 | 风险问卷总分 | 10题 × 1分/题 | 10% | 标准化选择题 + 归一化 |
| 综合 | 加权总分 | <30% 低 / 30-60% 中 / >60% 高 | 100% | 加权线性融合 |
风险等级与临床建议
| 风险等级 | 综合评分 | 临床建议 |
|---|---|---|
| 低风险 | < 30% | 各项指标与基线接近,建议保持健康生活习惯,定期复查 |
| 中等风险 | 30% – 60% | 存在部分阳性指标,建议尽快咨询神经内科或急诊科医疗专业人士 |
| 高风险 | > 60% | 多项指标异常,请立即拨打 120 寻求紧急医疗帮助。时间就是大脑! |
核心算法实现
面部对称性偏差计算
语音声学特征提取(20ms帧长分析)
加权综合评分与风险等级判定
系统技术参数
| 参数 | 值 | 说明 |
|---|---|---|
| FACE_MODEL | FaceLandmarker (478 pts) | MediaPipe Tasks-Vision, GPU WebGL 代理 |
| FACE_CONFIDENCE | 0.5 | 人脸检测最小置信度阈值 |
| FACE_EXPRESSIONS | 4(自然/微笑/抬眉/眨眼) | 基线注册表情种类 |
| VOICE_SAMPLE_RATE | 44100 Hz | Web Audio API 录音采样率 |
| VOICE_FRAME_SIZE | 20 ms | 声学特征提取帧长 |
| VOICE_SILENCE_THRESH | 整体RMS × 0.12 | 自适应静音检测阈值 |
| ARM_SAMPLE_DURATION | 10 秒 | 手臂平举稳定性采样时长 |
| ARM_SAMPLE_RATE | ~60 Hz | DeviceMotion 加速度计采样频率 |
| QUIZ_QUESTIONS | 10 题 | 脑卒中风险因素覆盖数量 |
| MODEL_FILE | face_landmarker.task (3.7MB) | Float16 量化,本地 nginx 托管 |
| DATA_STORAGE | localStorage | 浏览器本地存储,绝不上传服务器 |