Ë
    –\;j„%  ã                   ó¦   — 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   ZdZedz   Zd	Zd
ddddœZ G d„ de
«      Z G d„ de«      Zy)é    N)ÚImage)Ú_check_exists_and_download)ÚDatasetz$https://dataset.bj.bcebos.com/cifar/zcifar-10-python.tar.gzÚ c58f30108f718f92721af3b95e74349azcifar-100-python.tar.gzÚ eb9058c3a382ffc7106e4002c42a8d85Ú
data_batchÚ
test_batchÚtrainÚtest)Útrain10Útest10Útrain100Útest100c                   ó:   — e Zd ZdZ	 	 	 	 	 dd„Zd„ Zd„ Zd„ Zd„ Zy)	Ú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

    Nc                 óà  — |j                  «       dv s
J d|› �«       ‚|j                  «       | _        |€t        j                  j	                  «       }|dvrt        d|› �«      ‚|| _        | j                  «        || _        | j                  €1|sJ d«       ‚t        || j                  | j                  d|«      | _        || _        | j                  «        t        j                  «       | _        y )N)r
   r   z2mode.lower() should be 'train' or 'test', but got )ÚpilÚcv2z4Expected backend are one of ['pil', 'cv2'], but got z>data_file is not set and downloading automatically is disabledÚcifar)ÚlowerÚmodeÚpaddleÚvisionÚget_image_backendÚ
ValueErrorÚbackendÚ_init_url_md5_flagÚ	data_filer   Údata_urlÚdata_md5Ú	transformÚ
_load_dataÚget_default_dtypeÚdtype)Úselfr   r   r!   Údownloadr   s         úeG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/vision/datasets/cifar.pyÚ__init__zCifar10.__init__j   sù   € ð �z‰z‹|ð  
ñ 
ð 	Gð @À¸vÐFó	Gð 
ð —J‘J“LˆŒ	àˆ?Ü—m‘m×5Ñ5Ó7ˆGØ˜.Ñ(ÜØFÀwÀiÐPóð ð ˆŒà×ÑÔ!à"ˆŒØ�>‰>Ð!áðPàOóPØä7Ø˜4Ÿ=™=¨$¯-©-¸À(óˆDŒNð #ˆŒð 	�‰Ôä×-Ñ-Ó/ˆ�
ó    c                 óf   — t         | _        t        | _        t        | j
                  dz      | _        y )NÚ10)ÚCIFAR10_URLr   ÚCIFAR10_MD5r    ÚMODE_FLAG_MAPr   Úflag©r%   s    r'   r   zCifar10._init_url_md5_flag’   s%   € Ü#ˆŒÜ#ˆŒÜ! $§)¡)¨dÑ"2Ñ3ˆ�	r)   c           	      óÀ  ‡ — g ‰ _         t        j                  ‰ j                  d¬«      5 }ˆ fd„|D «       }t	        |«      }|D ]„  }t        j                  |j                  |«      d¬«      }|d   }|j                  d|j                  dd «      «      }|€J ‚t        ||«      D ]"  \  }}‰ j                   j                  ||f«       Œ$ Œ† 	 d d d «       y # 1 sw Y   y xY w)	NÚr)r   c              3   óh   •K  — | ])  }‰j                   |j                  v sŒ|j                  –— Œ+ y ­w©N)r/   Úname)Ú.0Ú	each_itemr%   s     €r'   Ú	<genexpr>z%Cifar10._load_data.<locals>.<genexpr>š   s(   øè ø€ ð Ù01 9°T·Y±YÀ)Ç.Á.Ò5P�	—•±ùs   ƒ2¡2Úbytes)Úencodings   datas   labelss   fine_labels)ÚdataÚtarfileÚopenr   ÚsortedÚpickleÚloadÚextractfileÚgetÚzipÚappend)	r%   ÚfÚnamesr5   Úbatchr;   ÚlabelsÚsampleÚlabels	   `        r'   r"   zCifar10._load_data—   sÂ   ø€ ØˆŒ	Ü�\‰\˜$Ÿ.™.¨sÕ3°qóÙ01óˆEô ˜5“MˆEã�ÜŸ™ A§M¡M°$Ó$7À'ÔJ�à˜W‘~�ØŸ™ 9¨e¯i©i¸ÈÓ.MÓN�ØÐ)Ð)Ð)Ü%(¨¨vÖ%6‘M�F˜EØ—I‘I×$Ñ$ f¨e _Õ5ñ &7ñ ÷ 4×3Ñ3ús   ªB CÃCc                 ó  — | j                   |   \  }}t        j                  |g d¢«      }|j                  g d¢«      }| j                  dk(  r$t        j                  |j                  d«      «      }| j                  �| j                  |«      }| j                  dk(  r&|t        j                  |«      j                  d«      fS |j                  | j                  «      t        j                  |«      j                  d«      fS )N)é   é    rM   )é   é   r   r   Úuint8Úint64)r;   ÚnpÚreshapeÚ	transposer   r   Ú	fromarrayÚastyper!   Úarrayr$   )r%   ÚidxÚimagerJ   s       r'   Ú__getitem__zCifar10.__getitem__©   sÁ   € Ø—y‘y ‘~‰ˆˆuÜ—
‘
˜5¢+Ó.ˆØ—‘¢	Ó*ˆà�<‰<˜5Ò Ü—O‘O E§L¡L°Ó$9Ó:ˆEØ�>‰>Ð%Ø—N‘N 5Ó)ˆEà�<‰<˜5Ò Øœ"Ÿ(™( 5›/×0Ñ0°Ó9Ð9Ð9à�|‰|˜DŸJ™JÓ'¬¯©°%«×)?Ñ)?ÀÓ)HÐHÐHr)   c                 ó,   — t        | j                  «      S r4   )Úlenr;   r0   s    r'   Ú__len__zCifar10.__len__¸   s   € Ü�4—9‘9‹~Ðr)   ©Nr
   NTN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r   r"   rZ   r]   © r)   r'   r   r   )   s4   „ ñ>ðD ØØØØó&0òP4ò
6ò$Iór)   r   c                   ó4   ‡ — e Zd ZdZ	 	 	 	 	 dˆ fd„	Zd„ Zˆ x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

    c                 ó,   •— t         ‰| �  |||||«       y r4   )Úsuperr(   )r%   r   r   r!   r&   r   Ú	__class__s         €r'   r(   zCifar100.__init__þ   s   ø€ ô 	‰Ñ˜ D¨)°X¸wÕGr)   c                 óf   — t         | _        t        | _        t        | j
                  dz      | _        y )NÚ100)ÚCIFAR100_URLr   ÚCIFAR100_MD5r    r.   r   r/   r0   s    r'   r   zCifar100._init_url_md5_flag  s%   € Ü$ˆŒÜ$ˆŒÜ! $§)¡)¨eÑ"3Ñ4ˆ�	r)   r^   )r_   r`   ra   rb   r(   r   Ú__classcell__)rh   s   @r'   re   re   ¼   s%   ø„ ñ?ðF ØØØØõHö5r)   re   )r?   r<   ÚnumpyrR   ÚPILr   r   Úpaddle.dataset.commonr   Ú	paddle.ior   Ú__all__Ú
URL_PREFIXr,   r-   rk   rl   r.   r   re   rc   r)   r'   Ú<module>rt      sx   ðó Û ã Ý ã Ý <Ý à
€à3€
ØÐ3Ñ3€Ø0€ØÐ5Ñ5€Ø1€ð ØØØñ	€ôPˆgô PôfO5ˆwõ O5r)   