🏀 篮球假动作晃过防守统计脚本
下面是一个实用的Python脚本,用于统计篮球比赛中假动作晃过防守的次数,你可以手动记录事件,也可以结合视频分析使用。

📋 基础版脚本(手动记录)
import json
from datetime import datetime
class FakeMoveTracker:
def __init__(self, player_name):
self.player_name = player_name
self.events = [] # 每次成功晃过的记录
self.attempts = 0 # 假动作总次数
def record_attempt(self, move_type, success, defender=""):
"""记录一次假动作
move_type: 假动作类型 (如 '投篮假动作', '突破假动作', '传球假动作')
success: True/False 是否晃过防守
"""
self.attempts += 1
event = {
"time": datetime.now().strftime("%H:%M:%S"),
"move_type": move_type,
"success": success,
"defender": defender
}
self.events.append(event)
status = "✅ 晃过" if success else "❌ 未成功"
print(f"[{event['time']}] {move_type} -> {status} (防守: {defender or '未知'})")
def stats(self):
"""输出统计结果"""
success_count = sum(1 for e in self.events if e["success"])
rate = (success_count / self.attempts * 100) if self.attempts else 0
print("\n" + "="*40)
print(f"📊 {self.player_name} 假动作统计")
print("="*40)
print(f"假动作总次数: {self.attempts}")
print(f"成功晃过次数: {success_count}")
print(f"成功率: {rate:.1f}%")
# 按类型分类统计
print("\n📈 各类型明细:")
types = {}
for e in self.events:
t = e["move_type"]
types.setdefault(t, {"total": 0, "success": 0})
types[t]["total"] += 1
if e["success"]:
types[t]["success"] += 1
for t, d in types.items():
r = d["success"] / d["total"] * 100
print(f" {t}: {d['success']}/{d['total']} ({r:.0f}%)")
return success_count
def save(self, filename="fake_move_stats.json"):
data = {
"player": self.player_name,
"attempts": self.attempts,
"events": self.events
}
with open(filename, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"\n💾 已保存到 {filename}")
# ============ 使用示例 ============
if __name__ == "__main__":
tracker = FakeMoveTracker("8号球员")
# 模拟记录比赛中的假动作(可手动输入)
tracker.record_attempt("投篮假动作", True, "对方3号")
tracker.record_attempt("突破假动作", True, "对方5号")
tracker.record_attempt("传球假动作", False, "对方1号")
tracker.record_attempt("投篮假动作", True, "对方3号")
tracker.record_attempt("突破假动作", True, "对方5号")
tracker.stats()
tracker.save()
输出示例:
[14:23:11] 投篮假动作 -> ✅ 晃过 (防守: 对方3号)
[14:24:05] 突破假动作 -> ✅ 晃过 (防守: 对方5号)
[14:25:30] 传球假动作 -> ❌ 未成功 (防守: 对方1号)
...
========================================
📊 8号球员 假动作统计
========================================
假动作总次数: 5
成功晃过次数: 4
成功率: 80.0%
📈 各类型明细:
投篮假动作: 2/2 (100%)
突破假动作: 2/2 (100%)
传球假动作: 0/1 (0%)
🎬 进阶版:结合视频分析(OpenCV)
如果你有比赛录像,可以用下面的脚本辅助逐帧标记:
import cv2
import json
def analyze_video(video_path, output="annotations.json"):
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
annotations = []
print("操作说明:")
print(" [S] 标记成功晃过 [F] 标记未成功 [Q] 退出")
frame_id = 0
while True:
ret, frame = cap.read()
if not ret:
break
frame_id += 1
# 每帧显示
cv2.imshow("Video", frame)
key = cv2.waitKey(0) & 0xFF
if key == ord('s'):
annotations.append({
"frame": frame_id,
"time_sec": round(frame_id / fps, 2),
"success": True
})
print(f"[{frame_id/fps:.2f}s] ✅ 记录成功晃过")
elif key == ord('f'):
annotations.append({
"frame": frame_id,
"time_sec": round(frame_id / fps, 2),
"success": False
})
print(f"[{frame_id/fps:.2f}s] ❌ 记录未成功")
elif key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
success = sum(1 for a in annotations if a["success"])
print(f"\n📊 总计 {len(annotations)} 次假动作,成功 {success} 次")
with open(output, "w", encoding="utf-8") as f:
json.dump(annotations, f, ensure_ascii=False, indent=2)
print(f"💾 保存到 {output}")
# analyze_video("game.mp4")
💡 判定标准建议
为了让统计更客观,建议明确定义"晃过防守"的标准:
| 判定结果 | 标准 |
|---|---|
| ✅ 成功晃过 | 防守人重心偏移/失位,进攻方获得明显空间或突破路线 |
| ❌ 未成功 | 防守人未上当,保持防守位置 |
| ⚠️ 模糊情况 | 建议不计入,或记录为"半成功" |
🔧 后续可扩展方向
- 多人统计:把
player_name改为列表,支持全队统计 - 数据库存储:把 JSON 换成 SQLite,方便多场比赛累积分析
- 可视化:用
matplotlib生成成功率柱状图 - 导出报表:生成 Excel 表格供教练组查看
需要我帮你改成特定的假动作类型(比如只统计"投篮假动作")、加入图形界面,或者对接某款追踪软件(如 SportsCode / Hudl)吗?告诉我具体场景,我可以定制。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播