足球/篮球假动作晃过防守统计脚本
你说得比较简短,我理解你想统计假动作成功晃过防守人的次数,这通常需要视频分析或比赛事件记录,下面给你几个实用方案:

手动打点统计(最简单实用)
如果你在看比赛录像,可以用这个脚本边看边按键记录:
import time
import csv
from datetime import datetime
# 简单的手动打点统计器
records = []
print("按 Enter 记录一次成功晃过防守,输入 q 退出")
count = 0
while True:
key = input(f"[当前成功次数: {count}] 按Enter记录 / q退出: ")
if key.lower() == 'q':
break
count += 1
records.append({
'序号': count,
'时间戳': datetime.now().strftime('%H:%M:%S')
})
print(f"✅ 记录第 {count} 次假动作晃过")
# 导出CSV
with open('fake_move_stats.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=['序号', '时间戳'])
writer.writeheader()
writer.writerows(records)
print(f"\n总计:{count} 次成功晃过防守")
带类型的详细统计
区分不同假动作类型(如变向、假射、假传、身体晃动):
import csv
# 假动作类型映射
moves = {
'1': '变向过人',
'2': '假射',
'3': '假传',
'4': '身体晃动',
'5': '踩单车',
'6': '其他'
}
stats = {v: 0 for v in moves.values()}
detail = []
print("选择假动作类型(数字),回车记录:")
for k, v in moves.items():
print(f" {k}. {v}")
while True:
choice = input("\n类型编号 (q退出): ")
if choice.lower() == 'q':
break
if choice in moves:
stats[moves[choice]] += 1
detail.append(moves[choice])
print(f"✅ 记录: {moves[choice]} | 该类型累计: {stats[moves[choice]]}")
else:
print("❌ 无效输入")
# 输出统计
print("\n===== 统计结果 =====")
total = sum(stats.values())
for k, v in stats.items():
if v > 0:
print(f"{k}: {v} 次")
print(f"总计: {total} 次成功晃过防守")
# 导出
with open('fake_move_detail.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['假动作类型'])
for d in detail:
writer.writerow([d])
视频逐帧标记(进阶)
如果你有比赛视频,想精确到时间点:
import cv2
import csv
# 打开视频,按键标记假动作时间点
video_path = 'game.mp4'
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
marks = []
print("播放中:按 's' 标记成功晃过,'q' 退出")
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
cv2.imshow('Video', frame)
key = cv2.waitKey(int(1000/fps)) & 0xFF
if key == ord('s'):
t = cap.get(cv2.CAP_PROP_POS_MSEC) / 1000
marks.append(t)
print(f"✅ 标记 @ {t:.1f}s | 累计 {len(marks)} 次")
elif key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
print(f"\n总计成功晃过: {len(marks)} 次")
with open('video_marks.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['时间(秒)'])
for m in marks:
writer.writerow([f'{m:.1f}'])
AI自动识别(需要训练/现成模型)
要自动统计(不用手工打点),需要:
- 目标检测:YOLO 检测球员 + 球
- 姿态估计:MediaPipe / OpenPose 识别身体假动作
- 跟踪:ByteTrack 跟踪防守人和持球人
- 判断逻辑:持球人重心突变 + 防守人重心被带偏 → 计一次成功
这部分代码量大,且需要标注数据训练,一般用于专业球队分析,如果你有具体场景(足球还是篮球、有没有视频、是否需要 AI),我可以帮你写更针对性的脚本。
告诉我你的具体需求:
- 足球还是篮球?
- 你是想手动记录还是AI自动分析视频?
- 有没有现成的比赛视频/数据?
我按你的场景给可直接运行的完整脚本。