【标签】生活娱乐
【标题】【生活娱乐赛道】动醒——一款基于 AI 动作识别的智能闹钟
【正文】
一、团队介绍
队长:syh
- 小学六年级毕业生。
- 爱折腾的小学生创客,曾获十多项科创比赛奖项。
- 学习古法编程两年半,获“全国青少年信息素养大赛”(Python)复赛二等奖。
- 接触AI编程5个月,开发了三个小游戏(独立设计关卡、调优、调参)。
负责创意、APP的雏形、演示。
队友:syl
- 略懂技术的产品老人。
负责APP的构建、调试和优化。
二、产品简介
是什么
动醒是一款基于 AI 动作识别的安卓手机闹钟应用,闹钟响起后必须完成指定运动动作(深蹲、开合跳、举手、八段锦三式)才能关闭,不做完绝不停止。
面向谁
- 起床困难户: 上班族、学生党,传统闹钟按一下就关,根本起不来
- 拖延症运动者: 想运动但缺乏自律,需要外部约束
- 运动习惯养成者: 正在培养运动自律习惯的人
典型使用场景:设定每天早7:00闹钟,选择"八段锦三式",目标3次。早上闹钟响起,铃声持续播放无法关闭,必须面对摄像头完成两手托天理三焦、左右开弓似射雕、双手攀足固肾腰三个动作各3次,全部完成后闹钟才会停止,专治懒床,还顺便调理身体,一天精神爽利。
完整功能清单与用户使用路径
功能清单:
| 功能模块 | 说明 |
|---|---|
| 闹钟设置 | 设置闹钟时间、选择动作类型(4种)、设定目标次数,支持多个闹钟 |
| 闹钟周期 | 支持设置每天/工作日/自定义周期重复响铃 |
| 强制响铃 | 到达时间后铃声持续循环播放,音量最大,无法一键关闭 |
| AI动作识别 | 使用ML Kit端侧姿态识别,33个身体关键点,离线运行无需网络 |
| 深蹲检测 | 通过髋-膝-踝三点角度计算,站立>160° → 下蹲<120° → 站起,完成一次计1 |
| 开合跳检测 | 检测手腕与头部高度,双手过头顶=打开,双手回肩下=闭合,完成一次计1 |
| 举手检测 | 检测手腕与鼻子高度,手腕高于鼻子=举起,低于肩膀=放下,完成一次计1 |
| 八段锦三式 | 三式连套,必须按顺序完成:托天→开弓→攀足,每式独立计数 |
| 实时进度显示 | 进度条 + 当前次数/目标次数 + 当前动作名称 + 状态提示文字 |
| 动作引导 | 每一步都有文字提示(“请下蹲”、“请举起手”、"请双手托到头顶"等) |
| 完成统计 | 完成动作数 + 用时统计 + 日期记录 |
| 闹钟持久化 | 闹钟配置保存在本地,手机重启后自动恢复 |
| 后台响铃 | 使用Android前台服务+WakeLock,App被杀也能响铃 |
用户使用路径:
打开App
↓
主页(大字号时钟显示)
↓
设置闹钟:选择时间 → 选择动作类型 → 设定目标次数 → 设定重复周期
↓
点击"设定闹钟" → 闹钟已设定,显示倒计时
↓
(可继续添加多个闹钟)
↓
=== 闹钟时间到 ===
↓
响铃页面全屏弹出(无法返回关闭)
├── 铃声持续循环播放
├── 显示当前动作任务名称
├── 显示动作引导文字(每一步都有提示)
├── 摄像头实时画面(前置摄像头,镜像翻转)
├── 进度条实时更新
└── 计数实时更新(如:完成 2/5)
↓
完成全部目标动作
↓
响铃停止 → 跳转完成页面
├── 完成动作数
├── 用时统计
└── 返回主页
产品界面:
相比初赛 Demo 的升级
| 维度 | 初赛 Demo(网页版) | 复赛成品(安卓App) |
|---|---|---|
| 产品形态 | 网页Demo,浏览器中运行 | 原生安卓App,可安装到手机 |
| 姿态识别 | MediaPipe Web | ML Kit端侧识别 |
| 闹钟调度 | 网页定时器,关闭页面即失效 | Android AlarmManager系统级调度,App被杀也能响 |
| 铃声播放 | Web Audio API生成蜂鸣声 | 原生MediaPlayer + 前台服务,循环播放 |
| 闹钟数量 | 只能设一个 | 支持多个闹钟 |
| 闹钟周期 | 无重复,一次性 | 支持每天/工作日/自定义周期重复 |
| 交互体验 | 基础提示 | 每一步都有动作引导文字,实时状态反馈 |
| 界面优化 | 功能性UI | 暗色主题设计,动画效果,进度可视化 |
| 后台能力 | 无法后台运行 | 前台服务+WakeLock+开机自恢复 |
三、产品演示视频
四、产品创作历程
灵感来源
每天早上闹钟响起,我都迷迷糊糊把闹钟按掉,然后继续睡。结果就是妈妈发火、我迟到、被老师批评。但是有一次闹钟响了之后,我按掉了闹钟后继续睡,妈妈直接把我从床上拉起来,让我去洗把脸,我走了几步、用凉水洗了个脸,人就一下子清醒了,再也睡不着了。我发现一个规律:只要身体一动起来,人就会清醒,困意只在你躺着不动的时候才管用。
后来学校里冬天要做早操、夏天要跳绳,我每次做完运动都精神得不行。那如果闹钟不是按一下就关,而是逼我做完一组运动才能关呢?动完身体自然就醒了,不会再睡着,顺便还锻炼了身体,一举两得。
从想法到初赛Demo
最初在TRAE中描述了产品概念后,TRAE帮我生成了10个候选名称,最终选定"动醒"——两个字,一动即醒,简单有力。
接着我让TRAE做了完整的技术方案调研,对比了MediaPipe Pose、TensorFlow Lite、ML Kit、云端API等多种方案。初赛阶段先用百度AI云端API做了一个网页Demo,后来发现需要代理和注册账号很麻烦,又用MediaPipe Pose做了Web版本。初赛Demo实现了姿态识别、四种动作检测器、完成动作关闭铃声的基本功能。
从Demo到复赛成品——最难的一段路
初赛Demo虽然能跑,但毕竟是个网页,离真正能用的App还差很远。最大的挑战是把Demo变成真正的安卓App,这个过程踩了非常多的坑,当然,这些坑最后都是由TRAE帮忙填上。
关键问题一:技术方案选型
最开始我让TRAE给出了原生安卓开发方案(Kotlin + Jetpack Compose + MediaPipe),但考虑到要适用安卓和苹果系统,我又问了"能不能用跨平台方案?或者更简单的技术实现"。TRAE对比了Flutter+ML Kit、React Native+Expo、Capacitor打包、PWA四种方案,最终我选择了Flutter + ML Kit——一套代码生成安卓和iOS安装包,ML Kit端侧识别不依赖网络,完全免费。
我选择方案后,TRAE Work很快就把代码敲完了,然而高兴不过一秒,APP呢?面对一堆代码我有点束手无策,于是邀请了老爹做队友,但他说只是会点web部署,也没搞过APP。就这样,接下来才是真正各种坑的开始,开发工具也从TRAE Work转到更专业的TRAE CN。
关键问题二:环境搭建和构建
这是最痛苦的部分。Flutter环境配置、Android SDK版本、Gradle构建、虚拟机调试……每一步都可能报错。比如:
- Flutter和Dart SDK版本不匹配
- Android minSdkVersion太低导致ML Kit插件不兼容
- Gradle构建卡住、依赖下载超时
- 摄像头权限在模拟器上无法正常工作
这些都是靠TRAE一步步帮我分析错误信息、修改配置文件才解决的。
关键问题三:端侧姿态识别
初赛Demo用的Mediapipe,虽说也兼容移动端,但嵌入编译时因权限问题一直出错。于是改用ML Kit Pose Detection,33个关键点端侧识别,能力上与Mediapipe差不多,但更轻量更快。但两种方案的关键点命名不同,需要把Demo里的动作状态机逻辑全部适配到ML Kit的API。TRAE帮我把JavaScript的状态机逻辑完整移植到了Dart语言。
关键问题四:闹钟后台响铃
网页Demo的定时器关闭页面就失效了。安卓App需要用AlarmManager实现系统级闹钟调度,即使App被杀也能准点响铃。这涉及到:
- android_alarm_manager_plus插件注册系统级闹钟
- 前台服务(ForegroundService)+ MediaPlayer循环播放铃声
- WakeLock保持CPU运行
- 开机自恢复(接收BOOT_COMPLETED广播)
- MethodChannel实现Flutter与原生Kotlin代码的通信
关键问题五:多闹钟与闹钟周期
初赛Demo只能设一个闹钟,复赛版支持多个闹钟和重复周期。需要重构数据模型,支持闹钟列表管理和周期性调度。
五、TRAE 实践过程
整个产品从创意到成品,完全在TRAE中完成开发。以下是完整的开发流程:
第一步:创意命名与定位
在TRAE中描述了产品概念,TRAE生成了10个候选名称,选定"动醒"。随后生成了产品解释语和比赛报名帖。
第二步:技术方案调研
问TRAE"上面的功能有哪些技术方案能实现",得到了完整的技术选型分析,包括AI动作识别(5种方案对比)、强制响铃机制(Android/iOS分别分析)、数据追踪等模块方案。又追问了云端API服务商区别,TRAE做了百度AI、阿里云、腾讯云三家详细对比。
第三步:初赛Demo开发
因为API调用相对简单,于是让TRAE帮抓取了百度AI人体关键点识别API文档,先用百度API做了Demo,后来测试时发现API申请较麻烦(要注册、实名等),后来改用MediaPipe Pose做了Web版Demo。实现了姿态识别、四种动作检测器、八段锦三式连套、完成动作关闭铃声。
第四步:安卓App技术方案
问TRAE"我要把这个demo做成真正能用的app(安卓版),请给点方案",TRAE给出了完整的技术栈选型(Kotlin + Jetpack Compose + MediaPipe)、核心模块设计、项目结构规划、开发路线图和风险对策。
第五步:跨平台方案选型
问TRAE"能不能用跨平台方案?或者更简单的技术实现",TRAE对比了Flutter、React Native、Capacitor、PWA四种方案,最终选择Flutter + ML Kit Pose。
第六步:Flutter项目生成
TRAE生成了完整的Flutter项目骨架,包含:
- 数据模型层(动作类型枚举、闹钟配置、打卡记录)
- 核心服务层(闹钟调度、姿态识别、动作状态机)
- UI页面(主页、响铃页、完成页)
- Android原生配置(Manifest权限、build.gradle、MainActivity)
第七步:铃声播放模块
TRAE补充了原生Kotlin代码:
- RingtoneService.kt:前台服务+MediaPlayer循环播放铃声+WakeLock
- AlarmReceiver.kt:广播接收器控制启停
- MainActivity.kt:MethodChannel桥接Flutter与原生
- 修改AlarmService.dart增加startRingtone/stopRingtone方法
开发关键步骤截图
由TRAE Work完成技术选型、生成Flutter项目代码;TRAE CN调试Android原生代码、构建APP、优化动作检测逻辑等。
关键任务对话 Session ID
TRAE Work 技术选型及项目代码生成:
-
1237377394420352:6a703f4d632a62e6fe4c53ec_6a48df03caf6b4f867431322.6a703f4d632a62e6fe4c53ec:TRAE Work CN.0.1.29.no_sid.no_ppe.T(2026/8/3 15:13:33)—— 安卓App技术方案 -
1237377394420352:6a704132632a62e6fe4c5428_6a48df03caf6b4f867431322.6a704132632a62e6fe4c5428:TRAE Work CN.0.1.29.no_sid.no_ppe.T(2026/8/3 15:22:53)—— 跨平台方案选型 -
1237377394420352:6a704259632a62e6fe4c544a_6a48df03caf6b4f867431322.6a704259632a62e6fe4c544a:TRAE Work CN.0.1.29.no_sid.no_ppe.T(2026/8/3 15:34:09)—— Flutter项目生成
TRAE CN 构建、调试和优化:
-
.2116985619231051:a1e8ddd321d82827246dc05ac79da5c4_6a71885d62b4654e4b9b2710.6a7194bb62b4654e4b9b2745.6a7194ba2f117ccd33ea753d:Trae CN.T(2026/8/4 15:28:59) ——构建测试
-
.2116985619231051:31be92f772c60496123bd1b563ab1cd2_6a71885d62b4654e4b9b2710.6a71a5be62b4654e4b9b2832.6a71a5be2f117ccd33ea753f:Trae CN.T(2026/8/4 16:41:34) —— 第一坑,遇到权限问题
-
.2116985619231051:4997301d7e975f0173687f90b7d0fc4e_6a742cb73b297921b9a8df01.6a745cff3b297921b9a8e347.6a745cfef16b2aaff5746e5e:Trae CN.T(2026/8/6 18:07:59) —— 动作识别调优
六、技术方案分享
技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 跨平台框架 | Flutter 3.x | 一套Dart代码生成安卓/iOS安装包 |
| 姿态识别 | Google ML Kit Pose Detection | 端侧MediaPipe,33个关键点,离线运行 |
| 原生开发 | Kotlin(Java兼容) | Android原生服务、MethodChannel桥接 |
| 相机 | camera插件 | 前置摄像头实时画面,NV21格式 |
| 闹钟调度 | android_alarm_manager_plus | 系统级AlarmManager,精确闹钟 |
| 通知 | flutter_local_notifications | 全屏通知、震动、不可清除 |
| 铃声播放 | MediaPlayer + ForegroundService | 循环播放,WakeLock保持CPU |
| 加速度传感器 | sensors_plus | 辅助颠脚检测 |
| 本地存储 | shared_preferences | 闹钟配置持久化 |
关键实现思路
1. 动作识别状态机
每种动作都有独立的状态机,通过ML Kit返回的33个关键点坐标计算角度和位置关系:
- 深蹲:髋-膝-踝三点角度,站立>160° → 下蹲<120° → 站起 = 1次
- 开合跳:手腕Y坐标与头部Y坐标比较,过头顶=打开,回肩下=闭合
- 举手:手腕Y坐标与鼻子Y坐标比较
- 八段锦三式:三阶段状态机,必须按序完成
2. Flutter与原生通信
铃声播放需要原生Android服务,通过MethodChannel实现Flutter与Kotlin的通信:
Flutter (AlarmService.startRingtone)
→ MethodChannel: "com.example.dongxing/ringtone"
→ Kotlin (MainActivity)
→ startForegroundService(RingtoneService)
→ MediaPlayer循环播放 + WakeLock
3. 闹钟后台保活
- AlarmManager注册系统级精确闹钟,App被杀也能触发
- 前台服务+WakeLock保证铃声持续播放
- 接收BOOT_COMPLETED广播,手机重启后自动恢复闹钟
七、商业化与社会价值分析
社会价值
- 健康促进: 逼用户每天早上做运动,培养运动习惯,改善久坐不动的生活方式
- 八段锦推广: 融入国家体育总局推广的八段锦,传承传统文化,适合各年龄段
- 学生健康: 特别适合像我一样的学生,解决起床困难的同时保证每天晨练
商业化方向
- 免费基础版: 深蹲、开合跳、举手三种基础动作免费
- 付费动作包: 八段锦完整八式、太极拳、瑜伽等专业动作包
- 打卡社区: 连续打卡排行榜,好友互相监督
- 数据报告: 每周/每月运动数据报告,健康趋势分析
八、产品迭代规划
- iOS适配(AlarmKit + Vision框架)
- 打卡记录页面(日历视图 + 连续天数)
- 八段锦完整八式动作检测
- 自定义动作录制(用户录制动作,AI学习后作为闹钟任务)
- 国产ROM后台保活适配(小米/华为/OPPO/VIVO)
- 好友PK模式(两人同时响铃,先完成者获胜)
- 智能推荐(根据用户体能自动推荐动作类型和数量)










