项目起源:WAIC展会的启发
这个项目的灵感来自于我参加WAIC(世界人工智能大会)展会的经历。在展会上,我看到一个非常有趣的展品——通过视频来测量心跳的设备。当时我就被这个技术深深吸引了,心想:这怎么可能?视频怎么能测心跳?
回来后,我立刻用GPT查询了一下这个技术的原理,发现原来这个原理其实很简单,但非常巧妙:
光电容积脉搏波描记法(PPG)原理: 当心脏泵血时,血液中的血红蛋白会吸收和反射光线。通过摄像头捕捉手指表面的颜色变化,我们可以检测到这种微小的变化。具体来说:
- 心脏收缩时,血液流量增加,面部会稍微变红
- 心脏舒张时,血液流量减少,面部会稍微变暗
- 这种颜色变化非常微小,肉眼几乎看不到
- 但通过算法分析视频帧之间的颜色差异,就能计算出心率
发现这个原理后,我就想着用iPhone复刻一下这个功能。毕竟iPhone的摄像头质量很好,而且有强大的处理能力,应该能够实现类似的效果。
技术实现:从原理到代码
代码就不说了,说说这个项目我觉得有价值的地方吧。日常健康监测我们总会去医院,但是想要随时了解自己的身体状况,其实是很麻烦的事情,有时候又不想买昂贵的设备。我们就做一个页面把监测数据都记录下来,这不是挺好吗?
这里我想只需要把手指放在摄像头前,通过分析视频帧中的颜色变化就能检测心率。Apple 有个自带的AVFoundation框架,可以直接通过Swift进行调用。无需联网就能做很多事情。然后我们通过信号处理算法可以自动识别心率变化,我发现这太厉害了。
我用的这个是AVFoundation框架里面的视频捕获能力,利用苹果设备的摄像头,给他那些关键的信号处理算法然后让他识别到这些数据以后,他们就自动匹配并分析。我测试了多次,当它识别到心率变化这些数据以后,算法的能力会让应用自动分析这个数据属于正常心率范围还是异常。
而且AVFoundation和苹果设备整合的很好,Swift调用很方便,其实在开发之前我都是不知道的,结果去网上一查,能做的事情太多了,例如相机预览这个事情,把检测过程实时显示出来,方便用户了解检测状态。通过调用AVFoundation,竟然可以把检测过程可视化,并且直接显示实时数据,既有视频预览又有数据图表,这样以后就可以通过其他算法进行更深入的健康分析。
在上面这张图,简单来说是一个实时监测功能,我希望用户打开应用就能看到实时的心率和体温数据(当然Apple设备也会自动处理权限),我最初的想法是监测体温,但是,我想既然能监测体温,也能监测其他的咯,反正都是差不多的代码,我就增加了心率检测、健康状态评估、数据记录等功能。
最复杂的是心率检测算法,每秒处理多少帧、如何过滤噪声、如何计算心率,还是有很多复杂的逻辑的,虽然整体看起都不错,也能正常运行,但是还是有些bug没解决、有些逻辑比如说异常检测等,对我来说都有点太复杂了,搞不定。我想了想还是先把整个项目跑起来重要。
然后还需要做一个用户指南界面,可以指导使用者如何正确使用应用,如手指放置位置、检测时长、注意事项等。这个部分我增加了一个接口可以自动调取iPhone的相机权限,基本的检测流程、数据记录、历史查看都会自动处理。Swift有专门的方法调取相机接口,整合的非常好,调用方法也很简单。
这个项目是为了探索健康监测技术,项目的主题是设计一个能够解决实际健康问题的应用程序。我做的这个App是关于一个个人体温和心率监测的一个App,这个App可以实时监测使用者的心率和体温变化,并提供健康建议。
在这个过程中,我意识到,如果想做出一个成功的项目,首先必须有一个清晰的愿景和好的想法,但真正有效的想法,其实都是在一边做边想之中得到的。还有,要用简单的语言表达复杂的概念,不光人能听懂,机器也能听明白。这些技能不仅对编程有帮助,对日常生活和学习也很有用。
总的来说,这次开发体温监测应用,让我学到了很多技术知识,感觉这段时间学到的东西比之前半年学的还多。
为了解决一些iOS方面的技术问题,我还专门查阅了大量文档和教程,在算法方面给了我很好的建议。
整个开发过程我主要用了Claude和Cursor这两个工具,辅助我构建、调试代码、还有一些样式调优,它们真的很强大、确切的说非常强大。
界面我是用SwiftUI完成的,全原生的iOS开发体验。
另外,再去生成一个适合自己App的图标,这真的很有帮助,感觉让app看起来很专业。
最后我还发现Cursor的MCP很厉害,原来我不会git到GitHub上,但是现在只要说,并且把账号给他就可以实现了,这很厉害!
以下是我的GitHub代码原地址 “github.com/pluto627/Me… ” 请大家可以下载到本地直接使用,欢迎大家给我提出可以修改的问题。