【生活娱乐赛道】动醒——一款基于 AI 动作识别的智能闹钟

【标签】生活娱乐

【标题】【生活娱乐赛道】动醒——一款基于 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 技术选型及项目代码生成:

  1. 1237377394420352:6a703f4d632a62e6fe4c53ec_6a48df03caf6b4f867431322.6a703f4d632a62e6fe4c53ec:TRAE Work CN.0.1.29.no_sid.no_ppe.T(2026/8/3 15:13:33) —— 安卓App技术方案

  2. 1237377394420352:6a704132632a62e6fe4c5428_6a48df03caf6b4f867431322.6a704132632a62e6fe4c5428:TRAE Work CN.0.1.29.no_sid.no_ppe.T(2026/8/3 15:22:53) —— 跨平台方案选型

  3. 1237377394420352:6a704259632a62e6fe4c544a_6a48df03caf6b4f867431322.6a704259632a62e6fe4c544a:TRAE Work CN.0.1.29.no_sid.no_ppe.T(2026/8/3 15:34:09) —— Flutter项目生成

TRAE CN 构建、调试和优化:

  1. .2116985619231051:a1e8ddd321d82827246dc05ac79da5c4_6a71885d62b4654e4b9b2710.6a7194bb62b4654e4b9b2745.6a7194ba2f117ccd33ea753d:Trae CN.T(2026/8/4 15:28:59) ——构建测试

  2. .2116985619231051:31be92f772c60496123bd1b563ab1cd2_6a71885d62b4654e4b9b2710.6a71a5be62b4654e4b9b2832.6a71a5be2f117ccd33ea753f:Trae CN.T(2026/8/4 16:41:34) —— 第一坑,遇到权限问题

  3. .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模式(两人同时响铃,先完成者获胜)
  • 智能推荐(根据用户体能自动推荐动作类型和数量)

Demo帖: 【生活娱乐赛道】动醒——一款基于 AI 动作识别的智能闹钟APP