Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(opendataset): add dataloader for HKD #1194

Merged
merged 1 commit into from
Jan 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/source/reference/api/opendataset.rst
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ tensorbay.opendataset
HalpeFullBody
HardHatWorkers
HeadPoseImage
HKD
ImageEmotionAbstract
ImageEmotionArtphoto
JHU_CROWD
Expand Down
11 changes: 11 additions & 0 deletions tensorbay/opendataset/HKD/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/usr/bin/env python3
Joey9933 marked this conversation as resolved.
Show resolved Hide resolved
Joey9933 marked this conversation as resolved.
Show resolved Hide resolved
#
Joey9933 marked this conversation as resolved.
Show resolved Hide resolved
# Copyright 2022 Graviti. Licensed under MIT License.
#
Joey9933 marked this conversation as resolved.
Show resolved Hide resolved
# pylint: disable=invalid-name

"""Dataloader of the HKD dataset."""

from tensorbay.opendataset.HKD.loader import HKD

__all__ = ["HKD"]
18 changes: 18 additions & 0 deletions tensorbay/opendataset/HKD/catalog.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"KEYPOINTS2D": {
"keypoints": [
{
"number": 7,
"names": [
"translated centroid of right hand",
"right wrist",
"right thumb",
"right index finger",
"right middle finger",
"right ring finger",
"right little finger"
]
}
]
}
}
102 changes: 102 additions & 0 deletions tensorbay/opendataset/HKD/loader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#!/usr/bin/env python3
#
# Copyright 2022 Graviti. Licensed under MIT Licence.
#
# pylint: disable=invalid-name

"""Dataloader for Finger Tapping Hand Keypoints Dataset(HKD)."""
Joey9933 marked this conversation as resolved.
Show resolved Hide resolved

import csv
import os

from tensorbay.dataset import Data, Dataset
from tensorbay.label import LabeledKeypoints2D
from tensorbay.utility import chunked

DATASET_NAME = "HKD"
_SEGMENT_INFO = {
"subject1": (
"subject1_fingercount_2D_Annotations_cropped.csv",
"subject1_fingercount_cropframe_{}.jpg",
),
"subject2": (
"subject2_fingercount_2D_Annotations_cropped.csv",
"subject2_fingercount_cropframe_{}.jpg",
),
"subject3": (
"fingerappose_subject3_2D_Annotations_cropped.csv",
"fingerappose_subject3_cropframe_{}.jpg",
),
"subject4": ("subject4_2D_Annotations_cropped.csv", "subject4_cropframe_{}.jpg"),
}


def HKD(path: str) -> Dataset:
"""`HKD <http://vlm1.uta.edu/~srujana/HandPoseDataset/HK_Dataset.html>`_ dataset.

The file structure should be like::

<path>
AnnotatedData_subject1/
CropImages/
subject1_fingercount_cropframe_2.jpg
subject1_fingercount_cropframe_3.jpg
...
subject1_fingercount_cropframe_210.jpg
subject1_fingercount_2D_Annotations_cropped.csv

AnnotatedData_subject2/
CropImages/
subject2_fingercount_cropframe_2.jpg
subject2_fingercount_cropframe_3.jpg
...
subject2_fingercount_cropframe_207.jpg
subject2_fingercount_2D_Annotations_cropped.csv

AnnotatedData_subject3/
CropImages/
fingerappose_subject3_cropframe_2.jpg
fingerappose_subject3_cropframe_3.jpg
...
fingerappose_subject3_cropframe_235.jpg
fingerappose_subject3_2D_Annotations_cropped.csv

AnnotatedData_subject4/
CropImages/
subject4_cropframe_2.jpg
subject4_cropframe_3.jpg
...
subject4_cropframe_147.jpg
subject4_2D_Annotations_cropped.csv

Joey9933 marked this conversation as resolved.
Show resolved Hide resolved
Arguments:
path: The root directory of the dataset.

Returns:
Loaded :class:`~tensorbay.dataset.dataset.Dataset` instance.

"""
root_path = os.path.abspath(os.path.expanduser(path))
dataset = Dataset(DATASET_NAME)
dataset.load_catalog(os.path.join(os.path.dirname(__file__), "catalog.json"))
for segment_name, (csv_name, image_name_template) in _SEGMENT_INFO.items():
segment = dataset.create_segment(segment_name)
segment_path = os.path.join(root_path, f"AnnotatedData_{segment_name}")
csv_path = os.path.join(root_path, segment_path, csv_name)
with open(csv_path, encoding="utf-8") as fp:
# The csv files should be like::
# subject1_fingercount_2D_Annotations_cropped.csv
# 2,4.523,28.569,136.8,181.37,154.63,80.348,130.86,57.322,...
# 3,4.523,32.731,135.31,176.17,147.2,80.348,123.43,65.493,...
# 4,-2.413,39.668,149.41,164.28,143.47,70.692,137.53,64.75,...
# 5,-1.026,31.344,138.77,178.4,136.54,78.863,135.06,75.149,...
# ...
# ...
for csv_line in csv.reader(fp):
Joey9933 marked this conversation as resolved.
Show resolved Hide resolved
image_path = os.path.join(
segment_path, "CropImages", image_name_template.format(csv_line.pop(0))
)
data = Data(image_path)
data.label.keypoints2d = [LabeledKeypoints2D(chunked(map(float, csv_line), 2))]
segment.append(data)
return dataset
2 changes: 2 additions & 0 deletions tensorbay/opendataset/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
from tensorbay.opendataset.HalpeFullBody import HalpeFullBody
from tensorbay.opendataset.HardHatWorkers import HardHatWorkers
from tensorbay.opendataset.HeadPoseImage import HeadPoseImage
from tensorbay.opendataset.HKD import HKD
from tensorbay.opendataset.ImageEmotion import ImageEmotionAbstract, ImageEmotionArtphoto
from tensorbay.opendataset.JHU_CROWD import JHU_CROWD
from tensorbay.opendataset.KenyanFood import KenyanFoodOrNonfood, KenyanFoodType
Expand Down Expand Up @@ -104,6 +105,7 @@
"Flower17",
"HardHatWorkers",
"HeadPoseImage",
"HKD",
"ImageEmotionAbstract",
"ImageEmotionArtphoto",
"JHU_CROWD",
Expand Down