构建 RecallMe:使用 Flutter 与 Kiro 的本地 AI 伴侣用于痴呆护理
Source: Dev.to
引言
痴呆症影响全球超过 5500 万人。最令人心碎的挑战之一是亲人不再能够辨认家人或回忆起珍贵的记忆。传统方案往往依赖云端 AI,带来隐私担忧并且需要持续的网络连接。
RecallMe 是一款以隐私为先、运行在设备上的 AI 伴侣,使用 Flutter 构建,帮助痴呆患者识别面孔并回忆记忆,且所有数据始终留在本地。
核心特性
- 设备端人脸识别,使用 Google ML Kit 和自定义的 256 维嵌入算法。
- AI 驱动的记忆对话,具备上下文感知聊天(Azure OpenAI GPT‑4,可替换为设备端模型)。
- 语音交互,实现自然、易用的沟通(语音转文字和文字转语音)。
- 智能日程管理,包括通知、时区感知和进度追踪。
- 完全离线——无云端,无隐私顾虑,所有数据本地保存。
技术栈
| 层级 | 技术 |
|---|---|
| UI | Flutter 3.7+,Material Design,采用痴呆友好主题 |
| 状态管理 | Provider |
| 本地存储 | Hive(NoSQL) |
| 人脸检测 | Google ML Kit(针对 Arm 优化的 TensorFlow Lite) |
| 嵌入生成 | Kotlin(自定义算法) |
| 相似度搜索 | 余弦相似度 |
| 语音输入 | speech_to_text 包 |
| 相机访问 | camera 包 |
| 图像处理 | image 包 |
| 本地 TTS | Android TextToSpeech 引擎 |
| AI 对话 | Azure OpenAI(GPT‑4)——可替换为设备端 LLM |
| 构建工具 | Android Studio、VS Code、Kiro(AI 驱动的 IDE) |
自定义嵌入算法(256 维)
- 颜色直方图 – 64 维
- 空间网格特征 – 64 维
- 梯度特征 – 6 维
- LBP 纹理分析 – 16 维
- 四象限均值 – 4 维
该算法全部在 Kotlin 中运行,针对 Arm 架构使用 NEON SIMD 指令进行优化。
人脸识别工作流
// 1. Face Detection (using ML Kit)
Future<List<FaceDetection>> detectFaces(Uint8List imageBytes) async {
final result = await _channel.invokeMethod('detectFaces', {
'imageBytes': imageBytes,
});
return result.map((face) => FaceDetection.fromMap(face)).toList();
}
// 2. Generate Embedding (custom algorithm in Kotlin)
// Combines multiple feature extraction techniques
// Returns 256‑dimensional vector
// 3. Match Against Stored Embeddings
double similarity = calculateCosineSimilarity(
newEmbedding,
storedEmbedding
);
if (similarity > 0.45) {
// Match found!
}
所有步骤均在本地执行;不发起任何网络请求。
使用 Kiro 开发
Kiro 是一款 AI 驱动的 IDE,通过放置在 .kiro/steering/ 目录下的 steering documents 加速了开发:
product.md– 痴呆友好设计原则、目标用户、核心特性。structure.md– 分层架构(展示层 → 状态层 → 业务逻辑层 → 数据层)以及代码组织模式。tech.md– 技术栈、依赖和构建命令。
这些文档为 Kiro 提供了深度上下文,使其能够生成符合以下要求的代码:
- 温暖的配色方案(柔和的黄、米色、橙色)。
- 文件命名约定(
snake_case,以_screen.dart为后缀)。 - 基于 Provider 的状态管理。
- Hive 数据库模式。
示例对话
Me: Build a routine management screen with add/edit/delete functionality, notification scheduling, and completion tracking.
Kiro: Generates a complete implementation following our architecture patterns, using Provider for state, Hive for persistence, and our warm color theme.
结果:在几天内完成了 15+ 屏幕的构建,保持一致的模式、时区感知的通知以及高质量代码,而不是数周。
用户体验
- 人脸识别:将摄像头对准某人,即可瞬间看到 “这是 Sarah(置信度 85%)”。
- 记忆聊天:点击照片启动对话;AI 记住最近 5 条消息,包含照片元数据(姓名、年份、人物、记忆关键词),并以简短、易懂的句子回复。
- 语音优先交互:用户自然说话,响应通过 TTS 朗读——无需键入。
- 日程安排:每日例行任务可设定精确时间、通知,并在首页、日程和每日任务页面追踪进度。
- 每周报告:为护理人员提供可视化的进度摘要。
所有数据均保留在设备上:
- 人脸嵌入存储在 Hive 中。
- 照片保存在应用私有目录。
- 敏感信息(API 密钥、PIN)本地加密。
针对 Arm 设备的性能优化
- 使用 NEON SIMD 进行向量化直方图计算。
- 针对 Big.LITTLE 架构的任务调度。
- 高效的图像处理内存模式。
- 在支持的情况下使用 GPU 加速(通过 ML Kit)。
该应用在中端 Arm 设备上运行流畅,适合更广泛的用户群体。
经验教训
- 设备端 ML:在准确性与性能约束之间取得平衡。
- 可访问性:为认知障碍设计 UI/UX。
- 隐私:确保所有 AI 处理均在本地完成。
- 集成:无缝结合多种 AI 技术。
开源与社区
RecallMe 开源的目的在于:
- 帮助开发者学习设备端 ML 技术。
- 提供痴呆友好的设计模式。
- 展示 Arm 优化最佳实践。
- 激励更多以隐私为先的 AI 应用。
代码仓库:
git clone https://github.com/Gaurav-derry/Recall
仓库中包含完整源码、设置说明、架构文档以及 Arm 设备构建指南。
未来改进
- 用设备端 LLM 替代 Azure OpenAI。
- 多语言支持。
- 为护理人员提供带分析功能的仪表盘。
- 与健康监测设备集成。
结论
RecallMe 展示了即使在移动设备上也能运行复杂 AI,同时兼顾隐私与可访问性。通过结合 Flutter 的跨平台能力、设备端 ML 与 Kiro 的 AI 驱动开发工作流,我们能够构建真正改变人们生活的应用。
技术栈:Flutter、Dart、Kotlin、Google ML Kit、Azure OpenAI、Hive、Provider
开发工具:Kiro(AI 驱动 IDE)、Android Studio、VS Code