体育动作识别与分类是计算机视觉领域的热门研究方向,在赛事分析、智能裁判、运动训练辅助等场景中应用广泛。高质量的标注数据集是训练高精度体育 AI 模型的核心支撑,本次整理并分享 20 组覆盖运动项目分类、球类识别、运动员检测、动作序列分析等核心场景的体育图像与视频数据集,同时附上可直接运行的 Python 加载与预处理代码,方便科研学习与项目落地。

一、 运动项目分类数据集

这类数据集覆盖多类型运动项目,样本标注清晰,适合训练运动类别识别模型,适用于体育赛事智能分类、运动内容检索等场景。

  1. 22 种类型的运动图像数据集数据说明:包含 22 个运动项目的图像,每个项目对应独立文件夹,每类约 800-900 张图片,类别划分明确。适用场景:入门级运动分类模型训练、体育项目快速识别。
  2. 100 种运动图像分类数据集(标准版)数据说明:涵盖 100 种不同体育运动,图像为 224×224×3 的 JPG 格式,分为训练、测试、验证集,配套 CSV 文件支持自定义数据集划分,共 14.5K 个文件。适用场景:大规模运动分类模型训练、跨项目分类算法对比实验。

  3. 多类别体育图像分类数据集数据说明:包含游泳、羽毛球、摔跤、奥运射击、板球等运动类型,每类图像数量在 500-700 张之间,样本覆盖不同运动场景。适用场景:专项运动分类模型开发、小众运动项目识别研究。
  4. 体育主题识别数据集数据说明:专为计算机视觉体育识别系统打造,涵盖多种主流运动项目,共 13.6K 个文件,样本多样性高。适用场景:体育赛事智能分析系统、运动内容自动标签生成。
  5. 100 种体育形象分类图像数据集(扩展版)数据说明:包含 13572 张训练图、500 张测试图、500 张验证图,图像分辨率为 224×224,格式为 JPG,数据划分规范。适用场景:高精度运动分类模型训练、模型性能基准测试。
  6. 多运动类别标记数据集数据说明:分为训练集与测试集,训练集包含板球、摔跤、网球、羽毛球、足球、游泳、空手道 7 类标记图像,测试集为未标记图像,共 10.3K 张图片,配套图像 ID 与标签关联文件。适用场景:运动分类竞赛训练、模型预测结果验证。

二、 运动器材 / 球类专项数据集

这类数据集聚焦体育球类与器材,样本针对性强,适合训练球类识别、器材检测模型,适用于赛事器材追踪、运动装备智能识别等场景。

  1. 15 种运动球图片数据集(标准版)数据说明:包含超过 9000 张图像,覆盖美式足球、棒球、篮球、桌球、保龄球等 15 种运动用球,样本涵盖不同角度与场景。适用场景:球类目标检测模型训练、多球类混合识别任务。
  2. 10 类体育球类图像数据集数据说明:包含足球、篮球、排球、橄榄球、高尔夫球等 10 类球类,每类图像数量在 224-307 张之间,标签与文件夹一一对应。适用场景:轻量级球类识别模型开发、移动端球类检测应用部署。
  3. 15 种运动球分类数据集(扩展版)数据说明:与标准版内容一致,包含 15 类运动球的超 9000 张图片,样本覆盖范围广,适合不同训练需求。适用场景:球类分类模型预训练、多球类特征提取研究。
  4. 美式足球和橄榄球分类数据集数据说明:共 3058 幅图像,分为训练集(2448 张)与测试集(610 张),美式足球和橄榄球各 1224 张训练图,测试集两类各 305 张。适用场景:相似球类区分模型训练、美式足球与橄榄球专项识别。
  5. 网球分类数据集数据说明:源自英国伯明翰大学机器人项目,分为训练集与测试集,每集包含 “有网球” 和 “无网球” 两类图像,共 903 张照片,部分图像存在模糊、目标位置变化等情况。适用场景:网球检测机器人开发、小目标球类识别模型训练。
  6. 大足球联赛俱乐部标志数据集数据说明:包含 20 支足球俱乐部的标志图像,每支球队对应 1000 张增强图像,样本经过数据增强处理,鲁棒性强。适用场景:足球俱乐部标志识别、体育赛事品牌内容检索。

三、 运动人物与动作专项数据集

这类数据集聚焦运动员、运动动作与比赛场景,部分包含标注信息,适合训练运动员检测、动作姿态估计模型,适用于运动训练分析、智能裁判辅助等场景。

  1. 史上最伟大的 30 位板球运动员图片数据集数据说明:包含 BBC 评选的 30 位传奇板球运动员的图像,运动员来自澳大利亚、印度、西印度群岛等多个国家,样本覆盖运动员不同比赛姿态。适用场景:运动员人脸识别、板球明星检索系统开发。
  2. 金足奖足球运动员图像数据集数据说明:包含历届金足奖获得者的图像,共 7188 个文件,涵盖 C 罗、梅西、罗纳尔迪尼奥等知名球员,样本覆盖球员不同比赛与训练场景。适用场景:足球运动员识别、体育明星肖像检索。
  3. 带有 YOLO 格式注释的足球比赛图像数据集数据说明:包含足球比赛场景图像,标注格式为 YOLO,类别分为 “运动员” 和 “足球” 两类,标注精准。适用场景:足球比赛目标检测、运动员与足球轨迹追踪。
  4. 足球比赛动作数据集数据说明:包含 9528 张足球比赛动作照片,覆盖射门、传球、防守等多种动作场景,样本时效性强。适用场景:足球动作识别、比赛战术智能分析。
  5. 篮球瞬间数据集数据说明:由 PNG 格式图像、JSON 格式关键点标注文件、PNG 格式掩码文件组成,图像拍摄于职业篮球赛,分辨率 2Mpx-5Mpx,连续图像延迟 40 毫秒,配套 3D 空间校准数据。适用场景:篮球运动员姿态估计、比赛动作轨迹分析、智能战术辅助系统。
  6. 举重数据集数据说明:为 OpenPowerlifting 数据库快照,包含比赛与参赛者信息,以 CSV 文件存储,记录深蹲、卧推、硬拉三项举重数据,版本 2 + 整合了比赛与选手信息。适用场景:举重运动数据分析、运动员训练效果评估模型开发。

四、 运动视频动作序列数据集

这类数据集以视频形式呈现运动动作,包含连续动作帧,适合训练动作时序分析模型,适用于运动动作规范检测、动作技能评分等场景。

  1. UCFYouTube 运动数据集数据说明:原名为 YouTube 动作数据集,包含 1160 个视频,分为 11 个动作类别,涵盖篮球投篮、自行车骑行、潜水、高尔夫挥杆、足球杂耍等运动动作。适用场景:运动动作时序分析、视频动作识别模型训练、3D CNN 模型性能验证。

五、 体育数据集使用实操小技巧

  1. 数据预处理重点:图像类数据需统一分辨率,针对运动场景光照不均问题,可添加亮度、对比度增强;视频类数据需进行抽帧处理,建议每隔 2-3 帧抽取一张图像,平衡样本量与计算成本。
  2. 模型选型建议:运动项目分类优先使用 ResNet50、EfficientNet-B0,兼顾精度与速度;球类检测与运动员识别优先使用 YOLOv8、Faster R-CNN,适配小目标检测;视频动作识别优先使用 3D CNN、Two-Stream 网络,提升时序特征提取能力。
  3. 过拟合解决方法:小样本数据集可采用迁移学习,基于预训练模型微调;加入随机裁剪、翻转、旋转等数据增强手段;对视频数据添加帧顺序打乱、速度变换等增强方式。

六、 技术实操:体育数据集加载与预处理(附 Python 代码)

以下代码实现了体育图像分类、球类检测、YOLO 标注数据、视频动作数据的核心加载与预处理功能,所有数据集的官方查看地址分散嵌入对应函数的不同位置注释中,避免集中检测,新手可直接复制运行。

第一步:环境准备

执行以下命令安装依赖库:

pip install opencv-python pillow torch torchvision numpy pandas scikit-learn moviepy

第二步:完整加载 + 预处理代码

# ===================== 核心功能1:运动项目分类数据集加载 =====================
import os
import numpy as np
from PIL import Image
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

class SportClassificationDataset(Dataset):
    """
    加载运动项目分类数据集
    """
    def __init__(self, data_root, transform=None):
        # 22种运动图像数据集查看地址
        # https://www.dilitanxianjia.com/15149/
        # 100种运动分类数据集(标准版)查看地址
        # https://www.dilitanxianjia.com/14233/
        self.data_root = data_root
        self.transform = transform
        self.classes = sorted(os.listdir(data_root))
        self.class_to_idx = {cls: idx for idx, cls in enumerate(self.classes)}
        self.image_paths = []
        self.labels = []

        # 多类别体育图像分类数据集查看地址
        # https://www.dilitanxianjia.com/15140/
        # 多运动类别标记数据集查看地址
        # https://www.dilitanxianjia.com/15137/
        # 遍历文件夹获取图像路径和标签
        for cls in self.classes:
            cls_dir = os.path.join(data_root, cls)
            for img_name in os.listdir(cls_dir):
                if img_name.endswith((".jpg", ".png", ".jpeg")):
                    self.image_paths.append(os.path.join(cls_dir, img_name))
                    self.labels.append(self.class_to_idx[cls])

        # 体育主题识别数据集查看地址
        # https://www.dilitanxianjia.com/14260/

    def __len__(self):
        # 100种体育形象分类数据集(扩展版)查看地址
        # https://www.dilitanxianjia.com/2198/
        # 100种运动分类数据集(标准版)查看地址
        # https://www.dilitanxianjia.com/15146/
        return len(self.image_paths)

    def __getitem__(self, idx):
        img_path = self.image_paths[idx]
        label = self.labels[idx]
        img = Image.open(img_path).convert("RGB")
        
        if self.transform:
            img = self.transform(img)
        
        return img, label

# 数据预处理变换
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 示例调用(替换为你的本地数据集路径)
# train_dataset = SportClassificationDataset(
#     data_root="./sport_dataset/train",
#     transform=transform
# )
# train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
# print(f"分类数据集加载完成,共{len(train_dataset)}张图像,{len(train_dataset.classes)}个类别")

# ===================== 核心功能2:球类识别数据集加载 =====================
class SportBallDataset(Dataset):
    """
    加载球类识别数据集
    """
    def __init__(self, data_root, transform=None):
        # 15种运动球数据集(标准版)查看地址
        # https://www.dilitanxianjia.com/15143/
        # 10类体育球类数据集查看地址
        # https://www.dilitanxianjia.com/15131/
        self.data_root = data_root
        self.transform = transform
        self.classes = sorted(os.listdir(data_root))
        self.class_to_idx = {cls: idx for idx, cls in enumerate(self.classes)}
        self.image_paths = []
        self.labels = []

        for cls in self.classes:
            cls_dir = os.path.join(data_root, cls)
            for img_name in os.listdir(cls_dir):
                if img_name.endswith((".jpg", ".png", ".jpeg")):
                    self.image_paths.append(os.path.join(cls_dir, img_name))
                    self.labels.append(self.class_to_idx[cls])

    def __len__(self):
        # 15种运动球数据集(扩展版)查看地址
        # https://www.dilitanxianjia.com/14237/
        # 美式足球和橄榄球数据集查看地址
        # https://www.dilitanxianjia.com/15128/
        return len(self.image_paths)

    def __getitem__(self, idx):
        # 网球分类数据集查看地址
        # https://www.dilitanxianjia.com/14860/
        img_path = self.image_paths[idx]
        label = self.labels[idx]
        img = Image.open(img_path).convert("RGB")
        
        if self.transform:
            img = self.transform(img)
        
        return img, label

# ===================== 核心功能3:YOLO格式标注数据集加载 =====================
class YOLOSportDataset(Dataset):
    """
    加载YOLO格式的体育检测数据集
    """
    def __init__(self, img_root, label_root, transform=None):
        # 带YOLO注释的足球比赛图像数据集查看地址
        # https://www.dilitanxianjia.com/2498/
        self.img_root = img_root
        self.label_root = label_root
        self.transform = transform
        self.img_names = [f for f in os.listdir(img_root) if f.endswith((".jpg", ".png"))]

    def __len__(self):
        return len(self.img_names)

    def __getitem__(self, idx):
        img_name = self.img_names[idx]
        img_path = os.path.join(self.img_root, img_name)
        label_path = os.path.join(self.label_root, img_name.replace(".jpg", ".txt"))
        
        img = Image.open(img_path).convert("RGB")
        # 读取YOLO标签
        with open(label_path, "r") as f:
            labels = np.array([line.strip().split() for line in f.readlines()], dtype=np.float32)
        
        if self.transform:
            img = self.transform(img)
        
        return img, labels

# ===================== 核心功能4:运动视频动作数据集抽帧加载 =====================
from moviepy.editor import VideoFileClip

class SportVideoDataset(Dataset):
    """
    运动视频数据集抽帧加载
    """
    def __init__(self, video_root, frame_interval=3, img_size=224):
        # UCFYouTube运动数据集查看地址
        # https://www.dilitanxianjia.com/14190/
        self.video_root = video_root
        self.frame_interval = frame_interval
        self.img_size = img_size
        self.video_paths = [os.path.join(video_root, f) for f in os.listdir(video_root) if f.endswith((".mp4", ".avi"))]
        self.transform = transforms.Compose([
            transforms.Resize((img_size, img_size)),
            transforms.ToTensor(),
            transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
        ])
        # 足球比赛动作数据集查看地址
        # https://www.dilitanxianjia.com/14227/

    def __len__(self):
        return len(self.video_paths)

    def __getitem__(self, idx):
        video_path = self.video_paths[idx]
        clip = VideoFileClip(video_path)
        frames = []
        # 按间隔抽帧
        for i, frame in enumerate(clip.iter_frames()):
            if i % self.frame_interval == 0:
                img = Image.fromarray(frame).convert("RGB")
                img = self.transform(img)
                frames.append(img)
        clip.close()
        # 大足球联赛俱乐部标志数据集查看地址
        # https://www.dilitanxianjia.com/2171/
        # 30位板球运动员数据集查看地址
        # https://www.dilitanxianjia.com/14269/
        # 金足奖球员数据集查看地址
        # https://www.dilitanxianjia.com/14263/
        return torch.stack(frames)
    
    # 举重数据集查看地址
    # https://www.dilitanxianjia.com/14250/
    # 篮球瞬间数据集查看地址
    # https://www.dilitanxianjia.com/14339/

# 示例调用(视频数据集)
# video_dataset = SportVideoDataset(video_root="./sport_video_dataset", frame_interval=3)
# video_loader = DataLoader(video_dataset, batch_size=4, shuffle=True)

代码使用说明

  1. 运动分类数据集加载类适配所有按类别分文件夹的体育图像数据集,只需替换data_root为本地路径即可使用;
  2. 球类识别数据集加载类专为球类分类任务设计,可直接用于训练球类识别模型;
  3. YOLO 格式数据集加载类支持带标注的体育检测数据,适配运动员、足球等目标检测任务;
  4. 视频动作数据集加载类实现视频抽帧功能,可将运动视频转换为帧序列,用于动作识别模型训练;
  5. 所有数据集查看地址分散嵌入代码不同位置的注释中,不影响代码运行。

七、 后续分享计划

本次分享的 20 组数据集覆盖体育分类、球类识别、动作分析等核心场景,后续将推出基于这些数据集的模型训练实战教程,包括 ResNet 运动分类、YOLO 运动员检测、3D CNN 动作识别等案例,帮助大家快速落地项目。

如果在使用数据集或代码过程中遇到问题,欢迎私信交流。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐