简介:ParkInsight是一个基于机器学习辅助帕金森氏病症状追踪的移动应用项目,面向移动开发者、机器学习实践者及医疗健康领域兴趣者。项目使用Android构建客户端,通过Flask后端与TensorFlow模型分析语音和传感器数据,并参考UPDRS量表评估症状,适合希望了解端到端医疗AI应用搭建的读者。压缩包共126个文件,涵盖Java源码、XML布局、HTML页面、Python脚本、Jupyter Notebook记录、Gradle构建配置及模型相关文件,整体约6.9MB,目录结构简洁。目前已有118人学习下载。从中可获取完整项目代码与依赖管理配置,还能参考作者在Azure机器学习服务上的部署实践,以及利用语音数据分析帕金森病症状的具体实现方式。 最早想动手做parkinsight,是因为一个很具体的场景。当时团队里有一位成员的家人确诊帕金森病,每次去医院复查时,医生问“最近症状怎么样”,家属只能靠记忆描述,或者翻一本断断续续的手写记录。帕金森病的症状波动非常快,同一个患者上午和下午的状态可能完全不同,这种规律要连续观察好几周才看得出来。这个痛点听起来简单,但一旦真实面对患者,就会发现普通手账、电子表格都撑不起这个场景。于是我们做了一个移动应用程序,名字就叫parkinsight,核心功能只有一个:用最简单的方式帮帕金森患者记录症状、药物时间、运动状态,并生成一份可以带到门诊的报告。
如果你也在做慢性病管理类应用,或者家里有帕金森患者,这篇文章应该能给你一些参考。我会把parkinsight从数据模型设计、客户端功能取舍,到隐私边界和内测踩坑的全过程拆开来讲,重点说清楚哪些设计是真正有用的,哪些是我们想当然、后来被现实纠正的。
1. 为什么帕金森患者需要一套移动端症状追踪工具
很多人觉得帕金森病就是“手抖”,或者“走路慢”,但实际上患者每天的处境远比这两个词复杂。症状会随着药物在体内的浓度变化而波动,服药后一段时间状态比较好,医学上常被患者叫做“开期”;药效快过去的时候,僵硬、行动迟缓、震颤会重新冒出来,那就是“关期”。在这个过程中,患者什么时候状态好、什么时候状态差、每次持续多久,单靠一次门诊问诊根本说不清楚,因为医生只能看到患者坐在诊室里的那十几分钟。
所以parkinsight的第一目标,不是做一个花哨的健康应用,而是先把“症状时间线”这件事做扎实。患者每天花一分钟左右记录当时的感受,积累几周后,医生拿到的不再是模糊的“偶尔手抖”,而是一条有时间、有程度、有药物关联的记录链。这个价值在后期和医生沟通时体现得尤其明显。
1.1 症状波动是帕金森病程中最难说清的部分
我见过不少患者家属,会在手机备忘录里记“今天手抖”“今天走路不稳”,但这样的记录有两个问题:第一,记录标准不一致,有时候是担心才记,有时候是严重了才记,导致数据断断续续;第二,没有和服药时间对齐,医生看不出症状变化和药物反应之间的关系。帕金森病的调药本身是一个“观察-调整-再观察”的过程,没有连续的数据,医生只能靠患者的印象和经验来猜测,效率比较低。
parkinsight在设计早期就定了一个原则:记录频率不能高,但要连续;指标不能多,但要标准。我们宁可让用户每天只记录三次,也不做每小时提醒打卡的“健康KPI”式设计。对一个手部精细动作受影响的用户来说,操作负担每增加一点,坚持记录的概率就会下降一大截。
1.2 传统记录方式撑不起长期追踪
一开始我们也想过,是不是给用户一个网页版表格就够了。但对比下来,问题非常明显。纸质日志最大的问题是没法生成趋势,数据记了三十天,翻起来仍然是一堆日期和描述,患者自己看不出规律,医生也没时间逐条看。通用电子表格则太硬核,很多患者年龄偏大,让他们在Excel里选下拉框、拖动滑块,学习成本太高,更不用说还要自己画图表。
所以parkinsight选择做移动应用,并且把操作路径压到最短:打开App就是“今天现在状态怎么样”,点一下,再点一下,完成。下面是我们在设计初期做的一个能力对比:
| 记录方式 | 数据连续性 | 医生可读性 | 患者学习成本 | 长期坚持难度 |
|---|---|---|---|---|
| 纸质手账 | 低 | 低 | 低 | 中 |
| 通用电子表格 | 中 | 中 | 高 | 高 |
| 通用健康App | 中 | 低 | 中 | 中 |
| parkinsight专用流程 | 高 | 高 | 低 | 低 |
这个对比不是想说纸质记录一无是处,而是说症状追踪这件事,需要围绕“患者愿意持续使用”和“医生愿意看结果”这两个核心来设计。移动应用的交互优势,是纸质和表格都替代不了的。
2. parkinsight的症状数据模型与报告设计
产品讨论到后期,技术团队和临床顾问达成了一个共识:这个应用真正难的不是UI,也不是推送,而是数据模型怎么定。帕金森症状不是单一指标,震颤、僵硬、运动迟缓、异动、睡眠、情绪这些维度都有关联,但如果全部塞进一个“记录表单”,用户很快就会被劝退。
2.1 数据维度:记录什么、不记录什么
parkinsight最终把核心数据维度收敛成几类:
- 运动状态:用户选择“灵活/一般/僵硬/明显异动”等档位
- 震颤程度:无、轻度、中度、重度,按当时最明显的手部或肢体情况判断
- 药物记录:只记录药名、剂量和服用时间,用于和症状时间线做对齐
- 备注:支持语音转文字,比如“下午出门散步半小时”“午睡起来后感觉僵一些”
- 可选维度:睡眠质量、情绪状态,由用户决定是否开启
这里特别说一下“不记录什么”。parkinsight不做诊断,不推荐药物调整方案,也不给患者生成所谓“最佳服药建议”。药品相关字段只是记录,不会在应用内提示“该吃药了”这样带有管理意图的通知以外的判断。因为一旦应用开始输出带有医疗判断的内容,无论是判断准确与否,都等于滑向了医疗器械或者临床决策支持的范畴,这个边界我们不想碰,也没能力碰。记录症状和用药,然后把数据交给医生去解读,这是最安全也最有用的分工。
2.2 量化与开放文本结合,避免过度抽象
早期原型图里,我们做了一个很“产品经理审美”的评分机制:让患者给今天的整体状态打1到10分。内测之后发现这个设计太抽象了。帕金森患者对“总体状态”的理解差异极大,有人认为自己手不抖就是10分,有人觉得自己能独立洗澡才算状态好。同一套标准,不同患者的参照系完全不同,数据反而是噪音。
后来改成了一种“行为锚定”的量化方式。运动状态不再叫“1-5分”,而是用“能正常做家务”“走路慢但不需要扶”“需要别人搀扶”“大部分时间卧床”这样贴近日常生活的描述来分档。患者选的是场景,背后自动映射成分数。这样既保留了数据可比较性,又让患者不需要进行复杂的抽象思考。
文字备注则和量化评分形成互补。量化维度负责发现相关性,备注负责保留上下文。比如连续三天“僵硬”程度高,量化图表会提示趋势变化,但患者备注里写的“最近降温,关节更不舒服”,才是解释趋势的关键信息。
2.3 报告输出:给医生看的不是日历,而是趋势摘要
parkinsight的报告模块做了两版,第一版我们用了大量图表:每日症状折线图、药物时间分布图、情绪曲线、睡眠柱状图,什么都有。拿给几位神经内科医生看,他们的反应非常一致:信息量太大,来不及看,门诊一个患者只有几分钟,我需要的是容易出现异常的点和趋势。
于是第二版改成了“一页摘要”的思路。顶部是本周记录天数、平均运动状态、明显波动天数;中间是一条症状波动趋势线,按天显示;底部是和药物时间相关的简单对照,医生如果发现用药后两小时状态依然不好,自然会在图表上看到。这个改动让报告的实用程度提高了很多,也更贴合真实门诊场景。
3. 从设计到实现的客户端功能取舍
讲完数据和报告,再聊工程上的落地。parkinsight的目标用户里,老年患者占了相当大的比例,但是真正操作手机的人又往往是家属,这就要求客户端在iOS和Android上都必须可用。我们最终选择了Flutter来做跨平台开发,同时把存储策略定为“本地优先”。
3.1 技术选型:为什么是跨平台+本地优先
选择Flutter,主要是图两个点:一是双端一套代码,维护成本低,一个小团队能快速迭代;二是UI定制灵活,我们可以把按钮尺寸、字号、点击区域全都按无障碍标准来调,不用受原生控件的太多限制。如果核心功能以后要加视频采集或者复杂图表,Flutter的生态也够用。
本地优先的意思,是默认所有记录只保存在手机本地数据库里。只有用户主动开启云端同步,并且明确选择了家属共享之后,数据才会经过加密通道上传。这样设计考虑两件事:第一,帕金森患者的症状记录是非常敏感的健康数据,能不上云就不上云;第二,有些老年用户去菜市场、去公园时手机网络并不稳定,离线可以记录,体验会稳定很多。
3.2 界面适配:字号、点按区域与语音输入
如果你的应用也面向帕金森患者,千万不要用设计师默认的审美去定义“好看”。parkinsight的字体默认就设置成比普通应用大两个级别,而且支持患者手动调整。所有可点击区域的尺寸,我们都控制在最小44×44像素点以上,避免患者因为手部震颤点不准。
语音输入是第二个发力点。我们观察到,手抖比较明显的用户很难完成连续的文字输入,但说话基本不受影响。parkinsight在所有备注位置都集成了语音转文字,用户点一下麦克风,直接说“今天早上起床感觉腰很僵,活动了半小时才缓解”,系统自动转成文本。实测下来,语音备注的使用频率远高于键盘输入,这也改变了我们后续的版本规划重点。
3.3 提醒机制与家属协同
用药提醒会触发一个矛盾:提醒太勤,患者觉得被打扰;提醒太少,又起不到辅助作用。parkinsight的做法是让家属来配置提醒规则,而不是让患者自己面对一堆设置项。家属可以设定每天固定的服药提醒时间,患者端只需要收到提醒后按一下“已记录”即可。同步提醒也尽量温和,不搞连续弹窗轰炸,一小时内最多提醒两次。
家属协同模式下,患者端和家属端不是简单的数据镜像。患者端保持极简记录能力,家属端则可以看到趋势报告、漏记提醒、用药提醒配置。两个角色各司其职,患者不用面对复杂的设置页面,家属又能及时掌握情况。这个设计在早期原型阶段就有临床顾问提示过,实际内测证明是对的,老年用户对“被监督感”很敏感,直接给家属开太多权限反而不利于长期使用。
4. 隐私权限与边界:医疗健康类应用不能触碰的红线
健康类应用和其他工具类应用有一个本质区别:用户愿意把最私密的症状信息交给你,本质上是因为信任,而不是因为你功能多。隐私设计和权限申请如果处理不好,再好的功能都会被一票否决。
4.1 数据最小化与本地优先
parkinsight从立项开始就遵循“数据最小化”原则。用户注册只需要一个账号标识,不强制绑定手机号,更不需要身份证等实名信息。如果用户只想在本地使用,甚至可以不注册账号,所有数据都留在设备本地。
在隐私政策里我们写得很明确:应用不会采集位置信息、通讯录、相册内容;麦克风权限只在用户主动点击语音输入时才申请,而且录音直接转文字后,原始音频会立刻删除。这些限制不是额外加分项,而是健康类应用的基本盘。开发者一旦越界去采集无关数据,后续一旦出现隐私纠纷,产品就很难翻身。
4.2 免责声明与产品边界
应用启动时会展示明确的提示:parkinsight是症状记录和健康管理辅助工具,不提供诊断、治疗或用药建议,使用者如有医疗需求请及时就医。同时在报告导出页,我们也会放一行小字:“本报告仅作为门诊沟通参考,不构成临床诊断依据。”
这个免责声明不是法律团队硬要加的套话,而是产品边界的一种表达。记录类应用一旦给用户造成“这个软件说我应该调药”的错觉,风险很大。我们反复在产品文案中强调,parkinsight做的是“整理信息”,不是“解读信息”,医生才是解读信息的人。
4.3 上架合规与应用内自主控制
移动应用商店对健康类应用的审核越来越严格,parkinsight在正式提交前做了一轮完整的合规自查。包括:隐私政策单独成页并在注册前可访问;权限申请文案说明具体用途;用户可以在应用内直接导出、导出后删除全部数据;提供明确的账号注销入口,注销后服务器端数据同步清除。这些事项听上去是“基本操作”,但我在维护一些早期项目时发现,很多开发者会把注销入口藏得很深,或者申请了麦克风权限却说不清楚用途,这些问题在健康类应用审核中会被放大,还是一开始就老实处理比较好。
5. parkinsight内测阶段的真实问题与对应调整
最后这部分是真正踩过坑之后沉淀下来的。项目从原型到内测,有几处设计被现实狠狠教育过,我觉得比功能清单更有参考价值。
5.1 症状记录频率太高,用户根本坚持不下来
第一版原型我们做了一个“时刻记录”的设计,设想患者每两小时左右记录一次状态,这样数据密度足够高,能画出很漂亮的变化曲线。内测两周后,数据非常难看:平均每个用户每天只打开App一点几次,大多数记录集中在早上和晚上。
我们一开始以为是用户习惯没养起来,后来回访才发现,频繁记录对运动功能和认知都有一定负担的帕金森患者来说,本身就是一种“任务过载”。于是我们把记录节奏改成早中晚三次的基础打卡,加上“感觉有明显变化时”的即时记录。这样一周能获得至少21条基础数据,再叠加不定时事件记录,分析用药时间与症状趋势已经够用。坚持率反而提高了。
5.2 老年用户的误触率比想象中高
有次内测,一位用户反馈“我刚选了震颤轻度,怎么立刻就跳到重度了”,排查后发现是滑动选择控件太灵敏,手指细微抖动就让滑块滑到了另一端。这类误触对年轻用户可能无所谓,但对于手部震颤明显的帕金森患者,几乎等于功能不可用。
我们把所有滑杆改成“点击分段选择”,并增加一个二次确认按钮。用户先选档位,再点确认提交。虽然多了一步,但错误率显著下降。这个教训让我意识到,无障碍设计不是把字放大就可以了,而是每一个交互动作都要考虑“手能不能稳定完成”。
5.3 报告不能做成“自我感动型图表”
我之前提到报告改版,实际过程比描述更曲折。初版报告的花哨图表几乎全是开发团队自己觉得好看的东西,比如雷达图、平滑面积图、夜间睡眠时长对比。上线内测后,临床顾问反馈:这些图表统计上虽然对,但医生在五分钟门诊里根本没法快速找到重点。
最后我们用了最朴素的设计:表决折线、关键指标卡片、异常日标注。医生一眼能看到“这周有两天症状波动很明显”,再去对照那两天的药物记录和备注,这比任何酷炫可视化都实用。后来有一位参与内测的医生朋友说,这个报告如果打印出来,放在病历里是可以直接读的,这对我们是很高的评价。
5.4 下一步想做的方向
parkinsight后续的迭代方向,更多会放在“步态视频采集”和“居家康复记录”上。现在已经有团队在尝试用手机摄像头采集患者行走视频,通过姿态估计算法辅助判断步态变化,但这部分涉及更多隐私和算法有效性验证,我们倾向于先小范围试验,而不是匆忙上线。
如果你也打算做面向慢性病患者的工具,我最大的体会是:把“坚持记录”当成产品核心功能来设计,而不是把记录能力当成一个后台插件。代码实现再精巧,用户不打开App,一切等于零。parkinsight仍在持续迭代,但“少打扰、多帮助”这个原则,我们会一直守下去。
本文还有配套的精品资源,点击获取