AI 驱动的网球比赛记分与鹰眼判定系统。
- 智能记分 - 支持手动记分和 AI 自动记分
- 鹰眼系统 - 实时追踪网球轨迹,自动判定界内/出界
- 场地校准 - 四点透视变换,将摄像头画面映射到标准网球场坐标
- 比赛回放 - 查看 AI 分析结果,包括球轨迹和落点判定
- 视频录制 - 比赛过程完整录制
- 数据持久化 - 比赛记录存储在服务端
- AI 演示模式 - 在 Simulator 中测试鹰眼和自动记分功能
- 国际化 (i18n) - 支持中英文切换
- CI/CD 流水线 - GitHub Actions 自动化测试和检查
- 代码质量 - ESLint, Prettier, Jest 测试
- React Native + Expo SDK 54
- TypeScript
- Zustand 状态管理
- expo-camera 摄像头采集
- expo-router 导航
- Node.js + Express
- Prisma ORM
- SQLite 数据库
- HSV 颜色空间网球检测
- 卡尔曼滤波轨迹平滑
- 速度方向变化落点检测
- 透视变换坐标转换
- Node.js 18+
- npm 或 yarn
- iOS 模拟器 或 真机 (需要 Expo Go)
# 安装移动端依赖
cd apps/mobile
npm install
# 安装服务端依赖
cd ../server
npm install# 启动服务端 (端口 3001)
cd apps/server
npm run dev
# 启动移动端
cd apps/mobile
npx expo start --ios- 开始比赛 - 在首页点击"开始比赛"
- 场地校准 - 标记球场四个角点(左上、右上、右下、左下)
- 比赛记分 - 手动点击记分或开启 AI 自动记分
- 查看回放 - 比赛结束后可查看 AI 分析结果
superTennis/
├── apps/
│ ├── mobile/ # React Native 移动端
│ │ ├── app/ # 页面路由
│ │ │ ├── (tabs)/ # Tab 导航页面
│ │ │ │ └── index.tsx # 首页
│ │ │ ├── demo/ # AI 演示模式
│ │ │ │ └── index.tsx # 演示页面
│ │ │ └── match/ # 比赛相关页面
│ │ │ ├── setup.tsx # 比赛设置
│ │ │ ├── calibration.tsx # 场地校准
│ │ │ ├── playing.tsx # 比赛记分
│ │ │ ├── replay.tsx # 比赛回放
│ │ │ └── result.tsx # 比赛结果
│ │ └── src/
│ │ ├── services/ # AI 服务
│ │ │ ├── tennisAI.ts # 鹰眼核心
│ │ │ ├── ballDetection.ts # 网球检测
│ │ │ ├── frameProcessor.ts # 帧处理器
│ │ │ ├── hawkEye.ts # 落点判定
│ │ │ └── __tests__/ # 单元测试
│ │ ├── stores/ # 状态管理
│ │ │ └── matchStore.ts
│ │ └── i18n/ # 国际化
│ │ ├── index.ts
│ │ └── locales/
│ │ ├── zh.ts # 中文
│ │ └── en.ts # 英文
│ └── server/ # Express 服务端
│ ├── src/
│ │ └── index.ts
│ └── prisma/
│ └── schema.prisma
├── docs/ # 项目文档
│ ├── PRD.md # 产品需求文档
│ ├── ARCHITECTURE.md # 技术架构文档
│ ├── AI_ALGORITHM.md # AI 算法设计文档
│ ├── API.md # API 接口文档
│ └── CHANGELOG.md # 版本变更记录
├── .github/
│ └── workflows/
│ └── ci.yml # CI/CD 配置
├── .eslintrc.js # ESLint 配置
├── .prettierrc # Prettier 配置
├── jest.config.js # Jest 配置
└── README.md
| 文档 | 说明 |
|---|---|
| PRD.md | 产品需求文档 - 功能定义、用户流程、里程碑规划 |
| ARCHITECTURE.md | 技术架构文档 - 系统设计、目录结构、数据流 |
| AI_ALGORITHM.md | AI 算法文档 - 检测算法、轨迹追踪、落点判定 |
| API.md | API 接口文档 - RESTful 接口定义、数据模型 |
| CHANGELOG.md | 版本变更记录 - 功能迭代、Bug 修复历史 |
- 帧采集 - 通过 expo-camera 周期性捕获画面
- 球检测 - 使用 HSV 颜色空间识别黄绿色网球
- 轨迹追踪 - 卡尔曼滤波平滑轨迹,计算速度向量
- 落点检测 - 检测速度垂直分量反向(球落地反弹)
- 坐标转换 - 透视变换将像素坐标转为球场坐标
- 界内判定 - 根据球场标准尺寸判断落点是否在界内
MIT