# 医生端语音自动填表 - 浏览器扩展使用指南 ## 📋 概述 这是一个基于浏览器扩展的医疗语音自动填表解决方案,通过以下流程实现: 1. **语音识别**:使用浏览器内置 Web Speech API 将语音转为文字 2. **信息提取**:调用后端千问大模型服务,从对话中提取结构化医疗信息 3. **自动填表**:自动填写到 HIS 系统的表单字段中 --- ## 🚀 快速开始 ### 第一步:启动后端服务 ```bash # 在项目根目录启动服务 cd /Users/destiny/dev/emoon/demos/playwright_demo mvn spring-boot:run ``` 服务启动后,访问 http://localhost:8080 确认服务正常运行。 ### 第二步:安装浏览器扩展 #### Chrome/Edge 浏览器安装步骤: 1. **打开扩展管理页面** - Chrome: 访问 `chrome://extensions/` - Edge: 访问 `edge://extensions/` 2. **开启开发者模式** - 点击右上角的 "开发者模式" 开关 3. **加载扩展** - 点击 "加载已解压的扩展程序" - 选择扩展目录:`/Users/destiny/dev/emoon/demos/playwright_demo/medical-voice-extension` 4. **确认安装成功** - 扩展列表中出现 "医生语音助手" - 浏览器工具栏出现扩展图标 #### Firefox 浏览器安装步骤: 1. **打开扩展管理页面** - 访问 `about:debugging#/runtime/this-firefox` 2. **加载临时扩展** - 点击 "临时载入附加组件" - 选择扩展目录中的 `manifest.json` 文件 ### 第三步:配置扩展(可选) 如果需要修改后端服务地址,编辑扩展配置: 1. 打开文件:`medical-voice-extension/content.js` 2. 修改配置: ```javascript const CONFIG = { BACKEND_URL: 'http://localhost:8080', // 修改为你的后端地址 API_ENDPOINT: '/api/extract' }; ``` --- ## 🎯 使用方法 ### 方式1:在演示页面测试 1. 访问演示页面:http://localhost:8080/ 2. 页面右下角会出现 "🎤 语音输入" 按钮 3. 点击按钮,开始说话(例如:"患者张三,35岁,男,咳嗽发烧3天") 4. 停止说话后,系统自动识别语音并填写表单 ### 方式2:在真实 HIS 系统使用 1. 打开医院的 HIS 系统页面 2. 页面右下角会出现 "🎤 语音输入" 按钮 3. 点击按钮并说出医患对话内容 4. 系统自动提取医疗信息并填写到对应字段 **示例对话:** ``` 医生:您好,请报一下您的姓名和年龄。 患者:我叫张三,今年35岁,男性。 医生:您今天来是因为什么不舒服? 患者:我咳嗽、发烧已经3天了,还伴有咽痛。 ``` --- ## 🔧 工作原理 ### 技术架构 ``` ┌─────────────────────────────────────────────────┐ │ 浏览器环境 │ ├─────────────────────────────────────────────────┤ │ ┌──────────┐ ┌──────────────┐ │ │ │ HIS页面 │ ↔ │ 浏览器扩展 │ │ │ │ (表单) │ │ (content.js) │ │ │ └──────────┘ └──────────────┘ │ │ ↑ ↕ │ │ │ ┌──────────────┐ │ │ │ │ Web Speech │ │ │ │ │ API (语音) │ │ │ │ └──────────────┘ │ │ │ ↕ │ │ └────────────→│ 后端服务 │ │ │ │ (千问大模型) │ │ │ └──────────────┘ │ └─────────────────────────────────────────────────┘ ``` ### 数据流转 1. **语音识别阶段** - 用户点击 "语音输入" 按钮 - 浏览器调用 Web Speech API - 实时将语音转换为文字 2. **信息提取阶段** - 扩展将识别的文字发送到后端服务 - 后端调用千问大模型进行结构化提取 - 返回 JSON 格式的医疗信息 3. **表单填写阶段** - 扩展接收结构化数据 - 智能匹配表单字段(支持ID、Name、Placeholder、Label) - 自动填写并触发 change 事件 --- ## 📝 支持的医疗字段 扩展可以自动识别并填写以下字段: | 字段名 | 中文名称 | 示例值 | |--------|---------|--------| | patientName | 患者姓名 | 张三 | | patientAge | 年龄 | 35 | | patientGender | 性别 | 男 | | patientPhone | 联系电话 | 13800138000 | | chiefComplaint | 主诉 | 咳嗽、发烧伴咽痛3天 | | presentIllness | 现病史 | 3天前受凉后出现发烧 | | pastHistory | 既往史 | 高血压病史5年 | | allergyHistory | 过敏史 | 对青霉素过敏 | | symptoms | 症状列表 | ["咳嗽", "发烧", "咽痛"] | | visitType | 就诊类型 | 门诊 | --- ## 🎨 字段匹配规则 扩展使用多种策略智能匹配表单字段: 1. **通过 ID 匹配** - 支持多种命名格式:`patientName`, `patient_name`, `xingming` 等 2. **通过 Name 属性匹配** - 查找 input/select/textarea 的 name 属性 3. **通过 Placeholder 匹配** - 查找包含字段名的占位符文本 4. **通过 Label 文本匹配** - 查找 label 标签的文本内容 5. **通过 XPath 定位** - 作为最后的兜底方案 **示例:** ```html ``` --- ## 🐛 常见问题 ### 1. 扩展按钮没有出现 **解决方法:** - 刷新页面(某些页面需要完全重新加载) - 检查扩展是否已启用(chrome://extensions/) - 打开浏览器控制台查看错误信息 ### 2. 语音识别不工作 **解决方法:** - 确保使用 Chrome/Edge/Safari(Firefox 需要额外配置) - 检查麦克风权限是否已授予 - 确认浏览器支持 Web Speech API ### 3. 表单没有自动填写 **解决方法:** - 打开浏览器控制台查看日志 - 检查后端服务是否正常启动 - 查看是否有 CORS 跨域错误 ### 4. 字段识别不准确 **解决方法:** - 手动检查表单字段的 ID/Name/Label - 根据实际情况修改 content.js 中的字段映射配置 - 联系开发人员定制字段匹配规则 --- ## 🔒 安全说明 1. **数据隐私** - 语音识别在浏览器本地完成,不上传到云端 - 医疗信息仅发送到内网部署的后端服务 - 不会保存任何患者数据 2. **网络安全** - 建议使用 HTTPS 协议访问后端服务 - 后端服务已配置 CORS 跨域支持 - 生产环境建议添加身份认证机制 --- ## 📊 浏览器兼容性 | 浏览器 | 语音识别 | 扩展支持 | 推荐度 | |--------|---------|---------|--------| | Chrome | ✅ | ✅ | ⭐⭐⭐⭐⭐ | | Edge | ✅ | ✅ | ⭐⭐⭐⭐⭐ | | Safari | ✅ | ⚠️ | ⭐⭐⭐⭐ | | Firefox | ❌ | ✅ | ⭐⭐ | **注意:** Firefox 不支持 Web Speech API,需要额外部署本地语音识别服务。 --- ## 🎓 进阶配置 ### 自定义字段映射 如果 HIS 系统使用特殊的字段命名,可以修改扩展配置: ```javascript // 编辑 content.js const fieldMappings = { patientName: [ 'patientName', 'name', 'patient_name', 'xingming', '姓名', 'hzm' // 添加 HIS 系统的特殊字段名 ], // ... 其他字段 }; ``` ### 调整录音超时时间 ```javascript recognition.lang = 'zh-CN'; recognition.continuous = false; recognition.interimResults = false; recognition.maxAlternatives = 1; // 可选:添加超时配置 ``` ### 修改按钮样式 ```javascript const BUTTON_STYLE = { position: 'fixed', bottom: '100px', right: '30px', backgroundColor: '#4CAF50', // 修改按钮颜色 padding: '15px 20px', // ... 其他样式 }; ``` --- ## 📞 技术支持 如果遇到问题,请: 1. 查看浏览器控制台的错误日志 2. 确认后端服务正常运行(访问 http://localhost:8080) 3. 检查扩展是否正确加载 --- ## 📄 许可证 MIT License --- ## 🎯 总结 **使用流程:** 1. 启动后端服务 (`mvn spring-boot:run`) 2. 安装浏览器扩展 3. 打开 HIS 系统页面 4. 点击语音按钮说话 5. 系统自动填写表单 **技术优势:** - ✅ 无需修改 HIS 系统代码 - ✅ 支持多种浏览器 - ✅ 完全离线运行(内网部署) - ✅ 智能字段匹配 - ✅ 实时语音识别