← 返回首页

FAST 脑卒中早期筛查

基于 FAST 量表(Face / Arm / Speech / Time),融合 MediaPipe 面部关键点检测、Web Audio API 语音分析和设备加速度计,实现浏览器端脑卒中(缺血/出血)家庭智能预警。

全程在浏览器本地完成,数据不上传服务器

F面部表情检测
A手臂抬举检测
S语言表达检测
T时间就是生命
技术文档

技术原理与算法说明

系统流程图

开始检测
Stage 1: 面部基线注册
4种表情 × 468点关键点采集
Stage 2: 面部对称性测试
实时对比基线 → 对称性偏差计算
Stage 3: 语音基线注册
朗读标准文本 → 提取声学特征
Stage 4: 语音清晰度测试
RMS / ZCR / 停顿 / 静音比对比
Stage 5: 手臂稳定性测试
DeviceMotion API → 单侧漂移检测
Stage 6: 风险问卷
10题脑卒中风险因素评估
加权综合评分
F:40% + S:30% + A:20% + Q:10%
<30% 低风险 — 保持健康习惯
30-60% 中风险 — 建议咨询医生
>60% 高风险 — 立即就医
生成评估报告

图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 寻求紧急医疗帮助。时间就是大脑!

核心算法实现

面部对称性偏差计算

/** * 计算面部关键点与基线的三维欧氏距离偏差 * @param {Array} baseline - 基线关键点数组 [{x, y, z}, ...] * @param {Array} current - 测试关键点数组 [{x, y, z}, ...] * @returns {number} 平均偏差值 */ function calculateDeviation(baseline, current) { let total = 0; const n = baseline.length; for (let i = 0; i < n; i++) { const dx = baseline[i].x - current[i].x; const dy = baseline[i].y - current[i].y; const dz = baseline[i].z - current[i].z; total += Math.sqrt(dx*dx + dy*dy + dz*dz); } return total / n; }

语音声学特征提取(20ms帧长分析)

/** * 提取 PCM 音频的声学特征:RMS能量、ZCR过零率、停顿次数、静音比例 * @param {AudioBuffer} audioBuffer - Web Audio API 解码后的音频缓冲 * @returns {Object} { duration, rmsEnergy, silenceRatio, pauseCount, zcr } */ function extractFeatures(audioBuffer) { const data = audioBuffer.getChannelData(0); const sampleRate = audioBuffer.sampleRate; const frameSize = Math.floor(sampleRate * 0.02); // 20ms const totalFrames = Math.floor(data.length / frameSize); // 自适应静音阈值:整体 RMS × 12% let sumSq = 0; for (let i = 0; i < data.length; i++) sumSq += data[i] * data[i]; const silenceThresh = Math.sqrt(sumSq / data.length) * 0.12; let activeFrames = 0, silentFrames = 0, pauseCount = 0; let inPause = false, speechStarted = false; const rmsList = [], zcrList = []; for (let f = 0; f < totalFrames; f++) { const start = f * frameSize; let rms = 0, zcr = 0; for (let i = 0; i < frameSize; i++) { const idx = start + i; rms += data[idx] * data[idx]; if (i > 0) zcr += Math.abs(Math.sign(data[idx]) - Math.sign(data[idx-1])) / 2; } rms = Math.sqrt(rms / frameSize); zcr /= frameSize; if (rms < silenceThresh) { silentFrames++; if (!inPause && speechStarted) { pauseCount++; inPause = true; } } else { if (!speechStarted) speechStarted = true; activeFrames++; inPause = false; } rmsList.push(rms); zcrList.push(zcr); } // 去除首尾静音,计算活跃区段平均特征 return { duration: activeFrames * 0.02, rmsEnergy: avgRms, silenceRatio: silentFrames / (activeFrames + silentFrames), pauseCount, zcr: avgZcr }; }

加权综合评分与风险等级判定

/** * 多模态加权融合:面部 40% + 语音 30% + 手臂 20% + 问卷 10% */ function computeRiskLevel(facialScore, voiceScore, armScore, quizScore) { const total = facialScore * 0.40 + voiceScore * 0.30 + armScore * 0.20 + quizScore * 0.10; if (total < 30) return { level: 'low', text: '低风险 — 保持健康生活习惯' }; if (total < 60) return { level: 'mid', text: '中等风险 — 建议尽快咨询医疗专业人士' }; return { level: 'high', text: '高风险 — 请立即寻求紧急医疗帮助!时间就是大脑!' }; }

系统技术参数

参数说明
FACE_MODELFaceLandmarker (478 pts)MediaPipe Tasks-Vision, GPU WebGL 代理
FACE_CONFIDENCE0.5人脸检测最小置信度阈值
FACE_EXPRESSIONS4(自然/微笑/抬眉/眨眼)基线注册表情种类
VOICE_SAMPLE_RATE44100 HzWeb Audio API 录音采样率
VOICE_FRAME_SIZE20 ms声学特征提取帧长
VOICE_SILENCE_THRESH整体RMS × 0.12自适应静音检测阈值
ARM_SAMPLE_DURATION10 秒手臂平举稳定性采样时长
ARM_SAMPLE_RATE~60 HzDeviceMotion 加速度计采样频率
QUIZ_QUESTIONS10 题脑卒中风险因素覆盖数量
MODEL_FILEface_landmarker.task (3.7MB)Float16 量化,本地 nginx 托管
DATA_STORAGElocalStorage浏览器本地存储,绝不上传服务器