📘 技术原理与算法设计
1. 系统工作流程
开始评估
↓
启动浏览器摄像头 / 麦克风
逐帧采集图像 (640×480)
↓
【眼部通道】三阶段协议 (5s × 3)
是任一阶段检测到持续睁眼(≥2s)→ 按阶段判定 E4 / E3 / E2
否全程未睁眼 → E1
↓
【运动通道】两阶段协议 (8s × 2)
是阶段1 遵嘱举手 → M6;阶段2 位移/方向/角度分析 → M5/M4 或 M3/M2
否全程无位移 → M1
↓
【语言通道】5s 录音 → Whisper 转写 → 关键词匹配
是定向回答 → V5;混乱 / 不当 / 仅发声 → V4 ~ V2
否完全无声 → V1
↓
三通道评分融合 → GCS 总分 = E(1-4) + M(1-6) + V(1-5) = 3 ~ 15
↓
严重度分级 → 3-8 重度 / 9-12 中度 / 13-15 轻度
↓
结束 · 页面实时显示总分
2. 软件基础信息
| 应用名称 | AI 守护者 — GCS 自动化评估系统 |
| 应用场景 | 格拉斯哥昏迷量表(GCS)自动化评估:急诊、ICU、神经外科等场景,通过标准化三阶段(眼部)/两阶段(运动)临床协议替代人工主观评分 |
| 运行环境 | 浏览器端(Chrome/Edge,WebRTC 摄像头与麦克风采集)+ 服务端 Ubuntu 22.04 / Python 3.10+ |
| 核心依赖 | Flask、OpenCV (cv2)、MediaPipe、openai-whisper、pydub、numpy、pandas、reportlab、gunicorn |
| AI 模型 | MediaPipe FaceMesh(468 面部关键点)· MediaPipe Pose(33 姿态关键点)· Whisper base(语音转写) |
| 部署架构 | gunicorn 3 workers + systemd 守护 + nginx HTTPS 反向代理(路径 /gcs/) |
3. 核心算法说明
① 眼部反应 (E) — EAR 眼纵横比算法
使用 MediaPipe FaceMesh 定位面部 468 个关键点,左右眼各取 6 个关键点(p1~p6),
计算眼纵横比 EAR(Eye Aspect Ratio):
EAR = (‖p2-p6‖ + ‖p3-p5‖) / (2 × ‖p1-p4‖)
左眼关键点: [33, 160, 158, 133, 153, 144]
右眼关键点: [263, 387, 385, 362, 380, 373]
睁眼时 EAR ≈ 0.30;闭眼时 EAR → 0.10
判定规则: EAR < 0.20 = 闭眼 | EAR > 0.25 = 睁眼
系统按 三阶段临床协议自动评估:阶段1 观察自主睁眼(5s)→ 阶段2 呼唤患者姓名(5s)→ 阶段3 捏锁骨施加疼痛(5s)。
滑动窗口(15 帧)内睁眼比例 ≥ 25% 且持续 ≥ 2s 即判定为睁眼反应,按出现阶段给出 E4 / E3 / E2,全程未睁眼为 E1。
② 运动反应 (M) — 姿态关键点 + 关节角度/位移分析
使用 MediaPipe Pose 检测 33 个身体姿态关键点(置信度阈值 ≥ 0.5),计算肘关节角度(肩-肘-腕三点)
与膝关节角度(髋-膝-踝三点),并跟踪手腕关键点位移与方向:
肘角 = angle(shoulder, elbow, wrist) 膝角 = angle(hip, knee, ankle)
位移量 mTotal = Σ 每帧手腕关键点移动距离(归一化)
位移方向: 朝向痛源(toward) / 远离痛源(away)
两阶段协议:
阶段1(8s)指令"请举手" → 手腕高于肩部占比 > 25% → M6 遵嘱动作
阶段2(8s)疼痛刺激 → 位移 + 方向 + 角度分析
· 位移 > 0.4 且朝向痛源占比 > 50% → M5 疼痛定位
· 位移 > 0.4 且非朝向 → M4 疼痛躲避
· 平均肘角 < 95°(屈曲) → M3 去皮质强直
· 平均肘角 > 140°(伸展) → M2 去大脑强直
· 位移 < 0.05 → M1 无反应
③ 语言反应 (V) — Whisper 语音转写 + 关键词匹配
浏览器 MediaRecorder 录制 5s 音频(WebM)→ 服务端统一重采样为 16kHz 单声道,
噪声门 -30dB 滤除静音段 → Whisper(base) 模型转写为文本(自动检测中/英文)→
通过定向关键词 / 混乱指示词匹配与语义分析评分:
定向词(zh): 今天 / 医院 / 名字 / 时间 / 年 / 月 / 我叫 / 知道 / 医生 ...
混乱词(zh): 我在哪 / 怎么回事 / 不知道 / 记不得 / 你是谁 / 这是什么 ...
· 回答正确定向问题 → V5 定向准确
· 能说话但回答错乱 → V4 混乱
· 有词语但不成句(≤3字) → V3 言语不当
· 仅有呻吟声,无有效词语 → V2 仅能发声
· 完全无声音 → V1 无反应
④ 评分融合与严重度分级
三通道独立完成评分后,前端实时汇总:GCS 总分 = E + M + V(3 ~ 15 分)。
总分映射到严重度分级,作为临床处置参考:
4. 软件系统设计
- 前后端分离:浏览器逐帧采集图像 → Base64 编码 → POST /api/eye/analyze、/api/motor/analyze;录音 → FormData → POST /api/verbal/record;服务端返回标注帧(JPEG)+ JSON 指标,前端 canvas 实时绘制。
- 模块化架构:web_server.py(Flask 入口)+ modules/{upload, vision, audio, scoring, report} 五层解耦 —— 视觉分析、语音识别、评分逻辑、报告生成互不依赖,可独立替换。
- 模型懒加载:FaceMesh / Pose / Whisper 等模型在首次调用时才加载(单例缓存),空闲时零内存占用,服务启动即就绪。
- 三阶段协议前端驱动:阶段步进条 + TTS 语音提示(Web Speech API)自动引导操作者,阶段计时与判定在浏览器端实时完成,交互延迟低。
- 生产部署:gunicorn 3 workers + systemd 守护 + nginx HTTPS 反向代理(路径 /gcs/),模型与上传数据落盘 data/{uploads, results, history}。
5. 参数配置
5.1 核心算法参数(config/settings.py)
| 参数 | 默认值 | 说明 |
| EAR_THRESHOLD | 0.20 | 低于此值判定为闭眼 |
| EAR_OPEN_THRESHOLD | 0.25 | 高于此值判定为睁眼 |
| EAR_SPONTANEOUS_MEAN | 0.30 | 清醒状态 EAR 均值参考 |
| EYE_PHASE_DURATION | 5.0 s | 眼部每阶段时长(三阶段协议) |
| EYE_PHASE_OPEN_RATIO_THRESHOLD | 0.25 | 滑动窗口内睁眼比例阈值 |
| EYE_SLIDING_WINDOW_SIZE | 15 帧 | 睁眼判定的滑动窗口 |
| EYE_SUSTAINED_DURATION | 2.0 s | 持续睁眼确认时长 |
| MOTION_CONFIDENCE_THRESHOLD | 0.5 | 姿态关键点最低置信度 |
| MOTION_MIN_DISPLACEMENT | 20 px | 关键点最小位移(判定运动) |
| MOTOR_LOCALIZING_SPEED | 10.0 px/帧 | 定位动作速度上限(慢而有目的) |
| MOTOR_WITHDRAWAL_SPEED | 25.0 px/帧 | 躲避动作速度(快速回撤) |
| MOTOR_FLEXION_ANGLE | 45° | 上肢屈曲阈值(去皮质强直) |
| MOTOR_EXTENSION_ANGLE | 160° | 上肢伸展阈值(去大脑强直) |
| VIDEO_TARGET_FPS | 10 | 视频抽帧帧率 |
| VIDEO_MAX_FRAMES | 300 | 单视频最大处理帧数(≈30s) |
| FRAME_RESIZE_WIDTH | 640 px | 处理帧宽度(等比缩放) |
| AUDIO_TARGET_SR | 16000 Hz | Whisper 标准采样率(单声道) |
| NOISE_GATE_DB | -30 dB | 静音判定噪声门限 |
| MIN_SPEECH_DURATION | 0.5 s | 最短有效语音段 |
| WHISPER_MODEL_SIZE | base | Whisper 模型规格(tiny/base/small/medium/large) |
5.2 GCS 评分标准(格拉斯哥昏迷量表)
| 评分 | 标准 | 评分 | 标准 |
| E4 | 自主睁眼 | V5 | 定向准确,正确回答时间/地点/人物 |
| E3 | 呼唤后睁眼 | V4 | 能对话但混乱、答非所问 |
| E2 | 疼痛刺激后睁眼 | V3 | 有词语但不成句,无法交流 |
| E1 | 任何刺激均不睁眼 | V2 | 仅呻吟/哼声,无有效词语 |
|
| M6 | 遵嘱动作(如举手) | V1 | 完全无语言反应 |
| M5 | 疼痛定位(移向痛源) | M3 | 去皮质强直(上肢屈曲) |
| M4 | 疼痛躲避(快速回撤) | M2 | 去大脑强直(四肢伸展) |
| M1 | 任何刺激均无运动 | M1 | 同左(M1 无运动反应) |
| 总分范围 | 分级 | 临床意义 |
| 3 ~ 8 | 重度损伤 | 严重脑损伤,需立即干预 |
| 9 ~ 12 | 中度损伤 | 中度脑损伤,需密切监护 |
| 13 ~ 15 | 轻度损伤 | 轻度脑损伤,观察变化 |