实用脚本统计凌空抽射次数多不多?

wen 实用脚本 1

本文目录导读:

实用脚本统计凌空抽射次数多不多?

  1. 足球比赛视频:统计凌空抽射次数
  2. 更实用的方案:用现成模型
  3. 文字/数据统计场景
  4. 直接回答你的问题

“凌空抽射”的统计要看你想统计什么场景,下面给你几个实用脚本方向,按需取用。

足球比赛视频:统计凌空抽射次数

如果你有比赛视频,想统计“凌空抽射”出现次数,可以用 Python + OpenCV + 简单动作识别:

import cv2
import numpy as np
def detect_volley(video_path, output_path=None):
    """
    简易凌空抽射检测:
    通过检测球员脚部快速上摆 + 球在空中的组合动作来粗略计数
    """
    cap = cv2.VideoCapture(video_path)
    fps = cap.get(cv2.CAP_PROP_FPS)
    frame_count = 0
    volley_count = 0
    prev_gray = None
    motion_history = []
    # 球检测:用颜色/圆形检测粗略找球
    def detect_ball(frame):
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        # 白色球(可根据实际调整)
        mask = cv2.inRange(hsv, (0, 0, 200), (180, 40, 255))
        contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        for c in contours:
            area = cv2.contourArea(c)
            if 50 < area < 2000:
                (x, y), r = cv2.minEnclosingCircle(c)
                return (int(x), int(y), int(r))
        return None
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        frame_count += 1
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        ball = detect_ball(frame)
        if ball:
            x, y, r = ball
            # 球在画面中上部,视为空中
            if y < frame.shape[0] * 0.5:
                motion_history.append((frame_count, x, y))
        # 简单逻辑:短时间内球从空中快速下坠 + 附近有大幅腿部动作
        # 这里只做示例,实际需要更精细的模型
        if len(motion_history) > 5:
            recent = motion_history[-5:]
            dy = recent[-1][2] - recent[0][2]
            if abs(dy) > 30:  # 球快速垂直移动
                volley_count += 1
                motion_history.clear()
        prev_gray = gray
    cap.release()
    print(f"总帧数: {frame_count}, 粗略凌空抽射次数: {volley_count}")
    return volley_count
# 使用
# detect_volley("match.mp4")

这个脚本只能做非常粗略的估计,真正准确统计需要:

  • 目标检测模型(YOLO)识别球员和球
  • 姿态估计(MediaPipe/OpenPose)判断腿部动作
  • 轨迹分析判断球是否在空中被击打

更实用的方案:用现成模型

# 推荐组合
# pip install ultralytics mediapipe
from ultralytics import YOLO
import mediapipe as mp
# YOLO 检测球和球员
model = YOLO("yolov8n.pt")
# MediaPipe 做姿态估计,判断"脚部高于髋部"等凌空特征
mp_pose = mp.solutions.pose

凌空抽射的判定条件可以设为:

  • 球在空中(y 坐标低于球员脚部)
  • 球员脚部快速摆动
  • 球速突然变化

文字/数据统计场景

如果你是想统计文字报道、弹幕、评论里“凌空抽射”出现次数:

import re
from collections import Counter
def count_volley_mentions(text):
    keywords = ["凌空抽射", "凌空", "抽射", "volley", "volley shot"]
    results = {}
    for kw in keywords:
        results[kw] = len(re.findall(kw, text, re.IGNORECASE))
    return results
# 示例
text = open("match_report.txt", encoding="utf-8").read()
print(count_volley_mentions(text))

直接回答你的问题

如果你问的是“凌空抽射次数多不多”这个统计本身是否常见:

  • 在单场比赛里,真正的凌空抽射通常 0–3 次,属于稀有高光动作
  • 在赛季数据里,顶级联赛球员一个赛季凌空抽射尝试也就 几次到十几次
  • 次数多不多”结论一般是:不多,属于低频但高观赏性动作

你具体想统计什么?告诉我:

  1. 视频文件?
  2. 文字数据?
  3. 还是某个球员/球队的赛季数据?

我可以给你更精准的脚本。

抱歉,评论功能暂时关闭!