import os import numpy as np import cv2 as cv from .base_dataloader import _BaseImageLoader from ..factory import DATALOADERS @DATALOADERS.register class RecognitionImageLoader(_BaseImageLoader): def __init__(self, **kwargs): super().__init__(**kwargs) self._labels = self._load_label() def _load_label(self): labels = dict.fromkeys(self._files, None) for filename in self._files: if os.path.exists(os.path.join(self._path, '{}.txt'.format(filename[:-4]))): labels[filename] = np.loadtxt(os.path.join(self._path, '{}.txt'.format(filename[:-4])), ndmin=2) else: labels[filename] = None return labels def __iter__(self): for filename in self._files: image = cv.imread(os.path.join(self._path, filename)) if [0, 0] in self._sizes: yield filename, image, self._labels[filename] else: for size in self._sizes: image_r = cv.resize(image, size) yield filename, image_r, self._labels[filename]