Source code for tensorbay.opendataset.KenyanFood.loader
#!/usr/bin/env python3
#
# Copyright 2021 Graviti. Licensed under MIT License.
#
# pylint: disable=invalid-name
"""Dataloaders of KenyanFoodType dataset and KenyanFoodOrNonfood dataset."""
import os
from tensorbay.dataset import Data, Dataset
from tensorbay.label import Classification
from tensorbay.opendataset._utility import glob
DATASET_NAME_FOOD_TYPE = "KenyanFoodType"
DATASET_NAME_FOOD_OR_NONFOOD = "KenyanFoodOrNonfood"
SEGMENTS_FOOD_TYPE = ["test", "train", "val"]
SEGMENTS_FOOD_OR_NONFOOD = {"test": "test.txt", "train": "train.txt"}
[docs]def KenyanFoodOrNonfood(path: str) -> Dataset:
"""`Kenyan Food or Nonfood <https://github.com/monajalal/Kenyan-Food>`_ dataset.
The file structure should be like::
<path>
images/
food/
236171947206673742.jpg
...
nonfood/
168223407.jpg
...
data.csv
split.py
test.txt
train.txt
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_FOOD_OR_NONFOOD)
dataset.load_catalog(os.path.join(os.path.dirname(__file__), "catalog_food_or_nonfood.json"))
for segment_name, filename in SEGMENTS_FOOD_OR_NONFOOD.items():
segment = dataset.create_segment(segment_name)
with open(os.path.join(root_path, filename), encoding="utf-8") as fp:
for image_path in fp:
image_path = os.path.join(root_path, image_path)
data = Data(image_path.strip())
category = image_path.split("/")[1]
data.label.classification = Classification(category)
segment.append(data)
return dataset
[docs]def KenyanFoodType(path: str) -> Dataset:
"""`Kenyan Food Type <https://github.com/monajalal/Kenyan-Food>`_ dataset.
The file structure should be like::
<path>
test.csv
test/
bhaji/
1611654056376059197.jpg
...
chapati/
1451497832469337023.jpg
...
...
train/
bhaji/
190393222473009410.jpg
...
chapati/
1310641031297661755.jpg
...
val/
bhaji/
1615408264598518873.jpg
...
chapati/
1553618479852020228.jpg
...
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_FOOD_TYPE)
dataset.load_catalog(os.path.join(os.path.dirname(__file__), "catalog_food_type.json"))
for segment_name in SEGMENTS_FOOD_TYPE:
segment = dataset.create_segment(segment_name)
segment_path = os.path.join(root_path, segment_name)
for category in sorted(os.listdir(segment_path)):
image_paths = glob(os.path.join(segment_path, category, "*.jpg"))
label = Classification(category)
for image_path in image_paths:
data = Data(image_path)
data.label.classification = label
segment.append(data)
return dataset