正在上传视频
自动检测球场标线 + AI 球员检测 + 距离测量
上传视频
AI 分析中
生成报告
IFAB Law 13 · 任意球距离测量

任意球距离
AI 智能测距系统

上传比赛视频,AI 自动检测球场标线 + 追踪球与球员位置,实时测量球→人墙距离、球→球门距离、人墙人数,判定是否满足 IFAB 9.15m 退距要求。

距离判定报告
测距结果
8.25m
球→人墙距离:短于 9.15m
球→球门
33.5m
人墙 10 人 · 发球员可见
测量指标
球→人墙 · 人墙人数 · 球→球门
IFAB Law 13 · 9.15m 规则
📊 报告 🖼️ 截图 📹 视频

任意球距离全面测量

基于 IFAB Law 13 官方规则,YOLO 球员检测 + 场地标定 + 距离计算,逐帧测量球与人墙、球门的实际距离。

01
🎯

上传视频 · 自动标定

拖拽任意球视频,系统自动检测球场标线作为距离测量的基准参考,无需手动操作。

02
🤖

球员检测 + 距离计算

YOLO 检测球员与球位置,结合场地标定数据逐帧计算球→人墙、球→球门实际距离(单位:米)。

03
⚖️

IFAB 规则自动判定

自动比对球→人墙距离与 IFAB 9.15m 标准,统计人墙人数,输出逐帧测量报告与标注截图。

拖拽任意球视频开始分析

支持 MP4、AVI、MOV、MKV 等常见格式,最大 200MB。上传后自动检测球场标线,无需手动标定,分析约需 30~60 秒。

📁

拖拽视频文件到此处

或点击选择本地文件

MP4 / AVI / MOV / MKV / WebM(最大 200MB)

基于 IFAB 官方规则
Law 13 · 任意球距离

IFAB Law 13 规定:任意球时防守方人墙必须距离球至少 9.15m(10 码)。系统自动测量球与人墙、球门的实际距离。

📋 IFAB Laws of the Game 2025/26
📐

系统技术文档

任意球距离分析系统的处理流程、架构设计、参数配置与核心模块说明

1. 系统处理流程

graph TD A["📹 上传视频"] --> B["🎯 首帧自动标定
HoughLinesP 门线检测"] B --> C{"标定成功?"} C -->|"✅ 是"| D["🤖 YOLO11 球员+球检测"] C -->|"❌ 否"| E["使用默认门线参数"] E --> D D --> F["🧱 DBSCAN 人墙聚类"] F --> G["📏 RANSAC 人墙线拟合"] G --> H["📐 单应性距离测量
球→人墙 / 球→球门"] H --> I["📊 逐帧数据汇总
固定人墙数 + 滑动平滑"] I --> J["🎬 生成标注视频与截图"] J --> K["📋 输出分析报告"] style A fill:#7C6BEE,stroke:#5B4EC7,color:#fff style K fill:#22c55e,stroke:#16a34a,color:#fff style D fill:#f59e0b,stroke:#d97706,color:#fff style H fill:#3b82f6,stroke:#2563eb,color:#fff

2. 系统架构

🌐 接入层 — HTTPS 终端
nginx 1.24 certbot SSL proxy_pass 200M 上传限制
🐍 Web 层 — Flask 应用
Flask 3.1 Python 3.10 systemd 服务 RESTful JSON API
🧠 AI 引擎 — 深度学习模型
YOLO11n-pose.pt yolo11n.pt OpenCV 5.0 Ultralytics 8.x
📐 计算管线 — 几何测量
单应性标定+RANSAC DBSCAN 聚类 RANSAC 线拟合 IFAB Law 13

3. 参数配置 config.yaml

参数路径默认值说明
models.poseyolo11n-pose.ptYOLO 姿态估计模型,检测球员关键点用于标定
models.detectyolo11n.ptYOLO 目标检测模型,识别球员 / 球 / 守门员
foul.forward_move_threshold_px30 px守门员前移判定阈值,超过此像素数视为犯规
foul.lookback_frames60 帧回溯窗口(约 2 秒 @30fps),用于判定发球前位置
foul.ball_speed_threshold_px6.0 px/f球速阈值,超过此值判定为已开出
foul.line_tolerance_px5 px门线判定容差,判断守门员是否踩线
output.dirdata/results分析结果(截图/视频/数据)输出目录
⚖️ IFAB Law 13915 cm人墙必须距离球 ≥ 9.15m(10 码)

4. 核心模块

⚙️

pipeline.py

主控管线,串联全部模块。支持单图/视频/手动标定三种模式,统一调度标定→检测→测量全流程。

analyze_frame(frame, idx) → FrameResult
🎯

detector.py

YOLO 检测封装(Ultralytics)。球员检测 + 球场关键点检测(32 点),为标定和距离测量提供坐标输入。

detect_players(frame, conf=0.15) → List[Detection]
📐

calibrator.py

高精度单应性标定。≥4 点 + RANSAC 外点剔除,重投影误差 ~68cm。输出像素→cm 转换矩阵。

auto_calibrate(frame) → dict
🧱

wall_detector.py

人墙检测:DBSCAN 聚类球员后 RANSAC 拟合人墙线段。识别离球最近的进攻方球员为发球员。

detect(players, ball_xy) → WallInfo
📏

distance_measurer.py

基于单应性矩阵的精确距离测量。支持球→人墙、球→球门、人墙长度的厘米级计算。

measure(ball, wall, goal) → FreeKickDistances
🎨

visualizer.py

可视化渲染引擎。球员框、球标注、人墙线、距离标注、2D 战术板俯视图,输出标注截图与视频。

draw_all_annotations(frame, results)