Skip to content

tarobjtu/superTennis

Repository files navigation

SuperTennis

CI Version License

AI 驱动的网球比赛记分与鹰眼判定系统。

功能特性

核心功能

  • 智能记分 - 支持手动记分和 AI 自动记分
  • 鹰眼系统 - 实时追踪网球轨迹,自动判定界内/出界
  • 场地校准 - 四点透视变换,将摄像头画面映射到标准网球场坐标
  • 比赛回放 - 查看 AI 分析结果,包括球轨迹和落点判定
  • 视频录制 - 比赛过程完整录制
  • 数据持久化 - 比赛记录存储在服务端

v0.2.0 新增

  • AI 演示模式 - 在 Simulator 中测试鹰眼和自动记分功能
  • 国际化 (i18n) - 支持中英文切换
  • CI/CD 流水线 - GitHub Actions 自动化测试和检查
  • 代码质量 - ESLint, Prettier, Jest 测试

技术栈

移动端 (apps/mobile)

  • React Native + Expo SDK 54
  • TypeScript
  • Zustand 状态管理
  • expo-camera 摄像头采集
  • expo-router 导航

服务端 (apps/server)

  • Node.js + Express
  • Prisma ORM
  • SQLite 数据库

AI 模块

  • 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

使用流程

  1. 开始比赛 - 在首页点击"开始比赛"
  2. 场地校准 - 标记球场四个角点(左上、右上、右下、左下)
  3. 比赛记分 - 手动点击记分或开启 AI 自动记分
  4. 查看回放 - 比赛结束后可查看 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 修复历史

AI 鹰眼工作原理

  1. 帧采集 - 通过 expo-camera 周期性捕获画面
  2. 球检测 - 使用 HSV 颜色空间识别黄绿色网球
  3. 轨迹追踪 - 卡尔曼滤波平滑轨迹,计算速度向量
  4. 落点检测 - 检测速度垂直分量反向(球落地反弹)
  5. 坐标转换 - 透视变换将像素坐标转为球场坐标
  6. 界内判定 - 根据球场标准尺寸判断落点是否在界内

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •