o
    #jy$                     @   s   d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dl	m
Z
 g ZdZed ZdZed Zd	Zd
ddddZG dd de
ZG dd deZdS )    N)Image)_check_exists_and_download)Datasetz$https://dataset.bj.bcebos.com/cifar/zcifar-10-python.tar.gzZ c58f30108f718f92721af3b95e74349azcifar-100-python.tar.gzZ eb9058c3a382ffc7106e4002c42a8d85Z
data_batchZ
test_batchtraintest)Ztrain10Ztest10Ztrain100Ztest100c                   @   sD   e Zd ZdZ					dddZdd Zd	d
 Zdd Zdd ZdS )Cifar10a
  
    Implementation of `Cifar-10 <https://www.cs.toronto.edu/~kriz/cifar.html>`_
    dataset, which has 10 categories.

    Args:
        data_file (str, optional): Path to data file, can be set None if
            :attr:`download` is True. Default None, default data path: ~/.cache/paddle/dataset/cifar
        mode (str, optional): Either train or test mode. Default 'train'.
        transform (Callable, optional): transform to perform on image, None for no transform. Default: None.
        download (bool, optional): download dataset automatically if :attr:`data_file` is None. Default True.
        backend (str, optional): Specifies which type of image to be returned:
            PIL.Image or numpy.ndarray. Should be one of {'pil', 'cv2'}.
            If this option is not set, will get backend from :ref:`paddle.vision.get_image_backend <api_paddle_vision_get_image_backend>`,
            default backend is 'pil'. Default: None.

    Returns:
        :ref:`api_paddle_io_Dataset`. An instance of Cifar10 dataset.

    Examples:

        .. code-block:: python

            >>> # doctest: +TIMEOUT(60)
            >>> import itertools
            >>> import paddle.vision.transforms as T
            >>> from paddle.vision.datasets import Cifar10

            >>> cifar10 = Cifar10()
            >>> print(len(cifar10))
            50000

            >>> for i in range(5):  # only show first 5 images
            ...     img, label = cifar10[i]
            ...     # do something with img and label
            ...     print(type(img), img.size, label)
            ...     # <class 'PIL.Image.Image'> (32, 32) 6


            >>> transform = T.Compose(
            ...     [
            ...         T.Resize(64),
            ...         T.ToTensor(),
            ...         T.Normalize(
            ...             mean=[0.5, 0.5, 0.5],
            ...             std=[0.5, 0.5, 0.5],
            ...             to_rgb=True,
            ...            ),
            ...     ]
            ... )
            >>> cifar10_test = Cifar10(
            ...     mode="test",
            ...     transform=transform,  # apply transform to every image
            ...     backend="cv2",  # use OpenCV as image transform backend
            ... )
            >>> print(len(cifar10_test))
            10000

            >>> for img, label in itertools.islice(iter(cifar10_test), 5):  # only show first 5 images
            ...     # do something with img and label
            ...     print(type(img), img.shape, label)
            ...     # <class 'paddle.Tensor'> [3, 64, 64] 3

    Nr   Tc                 C   s   |  dv sJ d| |  | _|d u rtj }|dvr&td| || _|   || _| jd u rF|s;J dt	|| j
| jd|| _|| _|   t | _d S )N)r   r   z2mode.lower() should be 'train' or 'test', but got )pilZcv2z4Expected backend are one of ['pil', 'cv2'], but got z>data_file is not set and downloading automatically is disabledZcifar)lowermodepaddleZvisionZget_image_backend
ValueErrorbackend_init_url_md5_flag	data_filer   data_urldata_md5	transform
_load_dataZget_default_dtypedtypeselfr   r
   r   downloadr    r   ]/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/vision/datasets/cifar.py__init__j   s0   


zCifar10.__init__c                 C       t | _t| _t| jd  | _d S )N10)CIFAR10_URLr   CIFAR10_MD5r   MODE_FLAG_MAPr
   flagr   r   r   r   r         zCifar10._init_url_md5_flagc           	   	      s   g  _ tj jddK} fdd|D }t|}|D ]2}tj||dd}|d }|d|d	d }|d us;J t	||D ]\}} j 
||f q@qW d    d S 1 sYw   Y  d S )
Nr)r
   c                 3   s"    | ]} j |jv r|jV  qd S N)r    name).0Z	each_itemr!   r   r   	<genexpr>   s    z%Cifar10._load_data.<locals>.<genexpr>bytes)encodings   datas   labelss   fine_labels)datatarfileopenr   sortedpickleloadextractfilegetzipappend)	r   fnamesr%   batchr*   labelssamplelabelr   r!   r   r      s    
"zCifar10._load_datac                 C   s   | j | \}}t|g d}|g d}| jdkr#t|d}| jd ur-| |}| jdkr<|t	|dfS || j
t	|dfS )N)       r;   )      r   r   Zuint8Zint64)r*   npZreshapeZ	transposer   r   Z	fromarrayZastyper   arrayr   )r   idximager9   r   r   r   __getitem__   s   



zCifar10.__getitem__c                 C   s
   t | jS r$   )lenr*   r!   r   r   r   __len__   s   
zCifar10.__len__Nr   NTN)	__name__
__module____qualname____doc__r   r   r   rB   rD   r   r   r   r   r   )   s    B
(r   c                       s4   e Zd ZdZ					d	 fdd	Zdd Z  ZS )
Cifar100a*
  
    Implementation of `Cifar-100 <https://www.cs.toronto.edu/~kriz/cifar.html>`_
    dataset, which has 100 categories.

    Args:
        data_file (str, optional): path to data file, can be set None if
            :attr:`download` is True. Default: None, default data path: ~/.cache/paddle/dataset/cifar
        mode (str, optional): Either train or test mode. Default 'train'.
        transform (Callable, optional): transform to perform on image, None for no transform. Default: None.
        download (bool, optional): download dataset automatically if :attr:`data_file` is None. Default True.
        backend (str, optional): Specifies which type of image to be returned:
            PIL.Image or numpy.ndarray. Should be one of {'pil', 'cv2'}.
            If this option is not set, will get backend from :ref:`paddle.vision.get_image_backend <api_paddle_vision_get_image_backend>`,
            default backend is 'pil'. Default: None.

    Returns:
        :ref:`api_paddle_io_Dataset`. An instance of Cifar100 dataset.

    Examples:

        .. code-block:: python

            >>> # doctest: +TIMEOUT(60)
            >>> import itertools
            >>> import paddle.vision.transforms as T
            >>> from paddle.vision.datasets import Cifar100

            >>> cifar100 = Cifar100()
            >>> print(len(cifar100))
            50000

            >>> for i in range(5):  # only show first 5 images
            ...     img, label = cifar100[i]
            ...     # do something with img and label
            ...     print(type(img), img.size, label)
            ...     # <class 'PIL.Image.Image'> (32, 32) 19


            >>> transform = T.Compose(
            ...     [
            ...         T.Resize(64),
            ...         T.ToTensor(),
            ...         T.Normalize(
            ...             mean=[0.5, 0.5, 0.5],
            ...             std=[0.5, 0.5, 0.5],
            ...             to_rgb=True,
            ...         ),
            ...     ]
            ... )

            >>> cifar100_test = Cifar100(
            ...     mode="test",
            ...     transform=transform,  # apply transform to every image
            ...     backend="cv2",  # use OpenCV as image transform backend
            ... )
            >>> print(len(cifar100_test))
            10000

            >>> for img, label in itertools.islice(iter(cifar100_test), 5):  # only show first 5 images
            ...     # do something with img and label
            ...     print(type(img), img.shape, label)
            ...     # <class 'paddle.Tensor'> [3, 64, 64] 49

    Nr   Tc                    s   t  ||||| d S r$   )superr   r   	__class__r   r   r      s   zCifar100.__init__c                 C   r   )N100)CIFAR100_URLr   CIFAR100_MD5r   r   r
   r    r!   r   r   r   r     r"   zCifar100._init_url_md5_flagrE   )rF   rG   rH   rI   r   r   __classcell__r   r   rL   r   rJ      s    C
rJ   )r.   r+   numpyr>   ZPILr   r   Zpaddle.dataset.commonr   Z	paddle.ior   __all__Z
URL_PREFIXr   r   rO   rP   r   r   rJ   r   r   r   r   <module>   s*    