Ha-GRID手势识别数据集 包含图片553994张,已标注为YOLO txt格式
Ha-GRID手势识别数据集介绍
数据集概览
Ha-GRID手势识别数据集是一个大型的手势识别数据集,包含553994张图片,每张图片都已按照YOLO格式进行了标注。数据集覆盖了18种不同的手势类别,包括但不限于打电话、不喜欢、拳头、四指、喜欢、静音、OK、一、手掌、和平、石头、停止、倒置的停止、三、向上两指、倒置的向上两指、三2、倒置的和平手势等。这个数据集可以用于各种与手势相关的机器学习和人工智能任务,例如YOLO目标检测、深度学习和手势识别。
数据集特点
- 大规模: 包含553994张图片,提供大量的训练数据。
- 多类别标注: 标注了18种不同的手势类别。
- YOLO格式: 标签采用YOLO格式,适合用于YOLO系列目标检测模型。
- 适用领域广: 可应用于手势识别、手势检测、人机交互等领域。
数据集结构
假设数据集文件夹结构如下:
ha_grid_dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
├── labels/
│ ├── train/
│ ├── val/
│ └── test/
└── data.yaml
images/
目录下存放图片文件。labels/
目录下存放对应的YOLO格式的文本标注文件。data.yaml
文件定义了数据集的配置信息。
data.yaml
文件示例
# data.yaml
train: ./images/train
val: ./images/val
test: ./images/test
nc: 18 # 类别数量
names: ['call', 'dislike', 'fist', 'four', 'like', 'mute', 'ok', 'one', 'palm', 'peace', 'rock', 'stop', 'stop_inverted', 'three', 'two_up', 'two_up_inverted', 'three2', 'peace_inverted']
关键代码示例
以下是一段Python代码示例,展示如何加载和查看数据集中的部分图片及其标注:
import os
import cv2
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
def load_image_and_label(image_path, label_path):
"""
加载图片和其对应的标注信息。
Parameters:
image_path (str): 图片路径。
label_path (str): 标注文件路径。
Returns:
img (numpy.ndarray): 加载的图片。
labels (list of dict): 标注信息列表。
"""
img = cv2.imread(image_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转换颜色空间
with open(label_path, 'r') as f:
lines = f.readlines()
labels = []
for line in lines:
class_id, x_center, y_center, width, height = map(float, line.strip().split())
labels.append({
'class_id': int(class_id),
'x_center': x_center,
'y_center': y_center,
'width': width,
'height': height
})
return img, labels
def draw_bounding_boxes(img, labels, class_names):
"""
在图片上绘制边界框。
Parameters:
img (numpy.ndarray): 图片。
labels (list of dict): 标注信息列表。
class_names (list of str): 类别名称列表。
"""
fig, ax = plt.subplots(1, figsize=(12, 12))
ax.imshow(img)
for label in labels:
x_center, y_center, width, height = label['x_center'], label['y_center'], label['width'], label['height']
h, w, _ = img.shape
x_min = int((x_center - width / 2) * w)
y_min = int((y_center - height / 2) * h)
x_max = int((x_center + width / 2) * w)
y_max = int((y_center + height / 2) * h)
rect = Rectangle((x_min, y_min), x_max - x_min, y_max - y_min, linewidth=2, edgecolor='r', facecolor='none')
ax.add_patch(rect)
class_name = class_names[label['class_id'] - 1] # YOLO的类别ID从0开始
ax.text(x_min, y_min, class_name, fontsize=12, color='red', backgroundcolor='white')
plt.axis('off')
plt.show()
if __name__ == "__main__":
data_dir = "/path/to/your/dataset"
train_images_dir = os.path.join(data_dir, "images/train")
train_labels_dir = os.path.join(data_dir, "labels/train")
# 选择任何一张训练集中的图片及其对应的标注信息
image_name = os.listdir(train_images_dir)[0] # 选择第一张图片
label_name = image_name.replace(".jpg", ".txt") # 假设图片是.jpg格式,标签文件名相同但扩展名为.txt
image_path = os.path.join(train_images_dir, image_name)
label_path = os.path.join(train_labels_dir, label_name)
img, labels = load_image_and_label(image_path, label_path)
print(f"Loaded image shape: {img.shape}")
print(f"Number of objects: {len(labels)}")
print(f"First object's label: {labels[0]}")
# 绘制边界框
class_names = ['call', 'dislike', 'fist', 'four', 'like', 'mute', 'ok', 'one', 'palm', 'peace', 'rock', 'stop', 'stop_inverted', 'three', 'two_up', 'two_up_inverted', 'three2', 'peace_inverted']
draw_bounding_boxes(img, labels, class_names)
请确保替换"/path/to/your/dataset"
为你本地数据集的实际路径。这段代码会加载训练集中的一张图片及其对应的标注信息,并显示带有边界框和类别的图片。