Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /