Ë
    –\;jõ/  ã                   óx   — 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 G d„ de
«      Z G d„ de«      Zy)	é    N)ÚImage)Ú_check_exists_and_download)ÚDatasetc                   óx   — e Zd ZdZdZdZedz   ZdZedz   ZdZ	edz   Z
d	Zed
z   ZdZ	 	 	 	 	 	 dd„Zdd„Zd„ Zd„ Zy)ÚMNISTa4
  
    Implementation of `MNIST <http://yann.lecun.com/exdb/mnist/>`_ dataset.

    Args:
        image_path (str, optional): Path to image file, can be set None if
            :attr:`download` is True. Default: None, default data path: ~/.cache/paddle/dataset/mnist.
        label_path (str, optional): Path to label file, can be set None if
            :attr:`download` is True. Default: None, default data path: ~/.cache/paddle/dataset/mnist.
        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:`image_path` :attr:`label_path` is not set. 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 MNIST dataset.

    Examples:

        .. code-block:: python

            >>> import itertools
            >>> import paddle.vision.transforms as T
            >>> from paddle.vision.datasets import MNIST


            >>> mnist = MNIST()
            >>> print(len(mnist))
            60000

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


            >>> transform = T.Compose(
            ...     [
            ...         T.ToTensor(),
            ...         T.Normalize(
            ...             mean=[127.5],
            ...             std=[127.5],
            ...         ),
            ...     ]
            ... )

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

            >>> for img, label in itertools.islice(iter(mnist_test), 5):  # only show first 5 images
            ...     # do something with img and label
            ...     print(type(img), img.shape, label)
            ...     # <class 'paddle.Tensor'> [1, 28, 28] [7]
    Úmnistz$https://dataset.bj.bcebos.com/mnist/út10k-images-idx3-ubyte.gzÚ 9fb629c4189551a2d022fa330f9573f3út10k-labels-idx1-ubyte.gzÚ ec29112dd5afa0611ce80d1b7f02629cútrain-images-idx3-ubyte.gzÚ f68b3c2dcbeaaa9fbdd348bbdeb94873útrain-labels-idx1-ubyte.gzÚ d53e105ee54ea40749a09fcbcd1e9432Nc                 ó0  — |j                  «       dv s
J d|› �«       ‚|€t        j                  j                  «       }|dvrt	        d|› �«      ‚|| _        |j                  «       | _        || _        | j                  €a|sJ d«       ‚|dk(  r| j                  n| j                  }|dk(  r| j                  n| j                  }t        |||| j                  |«      | _        || _        | j                  €u|sJ d«       ‚| j                  dk(  r| j                  n| j                   }	| j                  dk(  r| j"                  n| j$                  }
t        ||	|
| j                  |«      | _        || _        | j)                  «        t        j*                  «       | _        y )N)ÚtrainÚtestz*mode should be 'train' or 'test', but got )ÚpilÚcv2z4Expected backend are one of ['pil', 'cv2'], but got z?image_path is not set and downloading automatically is disabledr   z?label_path is not set and downloading automatically is disabled)ÚlowerÚpaddleÚvisionÚget_image_backendÚ
ValueErrorÚbackendÚmodeÚ
image_pathÚTRAIN_IMAGE_URLÚTEST_IMAGE_URLÚTRAIN_IMAGE_MD5ÚTEST_IMAGE_MD5r   ÚNAMEÚ
label_pathÚTRAIN_LABEL_URLÚTEST_LABEL_URLÚTRAIN_LABEL_MD5ÚTEST_LABEL_MD5Ú	transformÚ_parse_datasetÚget_default_dtypeÚdtype)Úselfr   r#   r   r(   Údownloadr   Ú	image_urlÚ	image_md5Ú	label_urlÚ	label_md5s              úeG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/vision/datasets/mnist.pyÚ__init__zMNIST.__init__h   s¹  € ð �z‰z‹|ð  
ñ 
ð 	?ð 8¸°vÐ>ó	?ð 
ð
 ˆ?Ü—m‘m×5Ñ5Ó7ˆGØ˜.Ñ(ÜØFÀwÀiÐPóð ð ˆŒà—J‘J“LˆŒ	Ø$ˆŒØ�?‰?Ð"áðQàPóQØð )-°ª�×$Ò$¸T×=PÑ=Pð ð )-°ª�×$Ò$¸T×=PÑ=Pð ô 9Ø˜I y°$·)±)¸XóˆDŒOð %ˆŒØ�?‰?Ð"áðQàPóQØð —9‘9 Ò'ð ×$Ò$à×(Ñ(ð ð —9‘9 Ò'ð ×$Ò$à×(Ñ(ð ô
 9Ø˜I y°$·)±)¸XóˆDŒOð #ˆŒð 	×ÑÔä×-Ñ-Ó/ˆ�
ó    c           	      óz  — g | _         g | _        t        j                  | j                  d«      5 }|j                  «       }t        j                  | j                  d«      5 }|j                  «       }d}d}d}t        j                  |||«      \  }	}
}}|t        j                  |«      z  }d}d}t        j                  |||«      \  }}|t        j                  |«      z  }	 ||k\  r�n*dt        |«      z   dz   }t        j                  |||«      }|t        j                  |«      z  }||z  }dt        ||z  |z  «      z   dz   }t        j                  |||«      }t        j                  ||||z  f«      j                  d«      }|t        j                  |«      z  }t        |«      D ]e  }| j                   j                  ||d d …f   «       | j                  j                  t        j                   ||   g«      j                  d«      «       Œg �Œ1	 d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)	NÚrbr   z>IIIIz>IIÚ>ÚBÚfloat32Úint64)ÚimagesÚlabelsÚgzipÚGzipFiler   Úreadr#   ÚstructÚunpack_fromÚcalcsizeÚstrÚnpÚreshapeÚastypeÚrangeÚappendÚarray)r,   Úbuffer_sizeÚ
image_fileÚimg_bufÚ
label_fileÚlab_bufÚ
step_labelÚ
offset_imgÚmagic_byte_imgÚ	magic_imgÚ	image_numÚrowsÚcolsÚ
offset_labÚmagic_byte_labÚ	magic_labÚ	label_numÚ	fmt_labelr<   Ú
fmt_imagesÚimages_tempr;   Úis                          r2   r)   zMNIST._parse_dataset¨   s  € ØˆŒØˆŒÜ�]‰]˜4Ÿ?™?¨DÔ1°ZØ —o‘oÓ'ˆGÜ—‘˜tŸ™°Ô5¸Ø$Ÿ/™/Ó+�à�
Ø�
ð ")�Ü39×3EÑ3EØ" G¨Zó4Ñ0�	˜9 d¨Dð œfŸo™o¨nÓ=Ñ=�
à�
à!&�Ü'-×'9Ñ'9Ø" G¨Zó(Ñ$�	˜9ð œfŸo™o¨nÓ=Ñ=�
àØ! YÒ.ÙØ #¤c¨+Ó&6Ñ 6¸Ñ <�IÜ#×/Ñ/°	¸7ÀJÓO�FØ¤&§/¡/°)Ó"<Ñ<�JØ +Ñ-�Jà!$¤s¨;¸Ñ+=ÀÑ+DÓ'EÑ!EÈÑ!K�JÜ"(×"4Ñ"4Ø" G¨Zó#�Kô  ŸZ™ZØ# k°4¸$±;Ð%?óç‘f˜YÓ'ð ð ¤&§/¡/°*Ó"=Ñ=�Jä" ;Ö/˜ØŸ™×*Ñ*¨6°!²Q°$©<Ô8ØŸ™×*Ñ*ÜŸH™H f¨Q¡i [Ó1×8Ñ8¸ÓAõð 0ñ# à÷1 6÷ 2Ð1ç5Ð5ú÷ 2Ð1ús$   ¯1H1Á F3H%ÈH1È%H.	È*H1È1H:c                 ó®  — | j                   |   | j                  |   }}t        j                  |ddg«      }| j                  dk(  r&t        j                  |j                  d«      d¬«      }| j                  �| j                  |«      }| j                  dk(  r||j                  d«      fS |j                  | j                  «      |j                  d«      fS )Né   r   Úuint8ÚL)r   r:   )
r;   r<   rD   rE   r   r   Ú	fromarrayrF   r(   r+   )r,   ÚidxÚimageÚlabels       r2   Ú__getitem__zMNIST.__getitem__Ú   s¯   € Ø—{‘{ 3Ñ'¨¯©°SÑ)9ˆuˆÜ—
‘
˜5 2 r (Ó+ˆà�<‰<˜5Ò Ü—O‘O E§L¡L°Ó$9ÀÔDˆEà�>‰>Ð%Ø—N‘N 5Ó)ˆEà�<‰<˜5Ò Ø˜%Ÿ,™, wÓ/Ð/Ð/à�|‰|˜DŸJ™JÓ'¨¯©°gÓ)>Ð>Ð>r4   c                 ó,   — t        | j                  «      S )N)Úlenr<   )r,   s    r2   Ú__len__zMNIST.__len__é   s   € Ü�4—;‘;ÓÐr4   )NNr   NTN)éd   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   Ú
URL_PREFIXr   r!   r%   r'   r   r    r$   r&   r3   r)   rf   ri   © r4   r2   r   r      s~   „ ñ>ð@ €DØ7€JØÐ"=Ñ=€NØ7€NØÐ"=Ñ=€NØ7€NØ Ð#?Ñ?€OØ8€OØ Ð#?Ñ?€OØ8€Oð ØØØØØó>0ó@0òd?ó r4   r   c                   óP   — e Zd ZdZdZdZedz   ZdZedz   ZdZ	edz   Z
d	Zed
z   ZdZy)ÚFashionMNISTa²
  
    Implementation of `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`_ dataset.

    Args:
        image_path (str, optional): Path to image file, can be set None if
            :attr:`download` is True. Default: None, default data path: ~/.cache/paddle/dataset/fashion-mnist.
        label_path (str, optional): Path to label file, can be set None if
            :attr:`download` is True. Default: None, default data path: ~/.cache/paddle/dataset/fashion-mnist.
        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): Whether to download dataset automatically if
            :attr:`image_path` :attr:`label_path` is not set. 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 FashionMNIST dataset.

    Examples:

        .. code-block:: python

            >>> import itertools
            >>> import paddle.vision.transforms as T
            >>> from paddle.vision.datasets import FashionMNIST


            >>> fashion_mnist = FashionMNIST()
            >>> print(len(fashion_mnist))
            60000

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


            >>> transform = T.Compose(
            ...     [
            ...         T.ToTensor(),
            ...         T.Normalize(
            ...             mean=[127.5],
            ...             std=[127.5],
            ...         ),
            ...     ]
            ... )

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

            >>> for img, label in itertools.islice(iter(fashion_mnist_test), 5):  # only show first 5 images
            ...     # do something with img and label
            ...     print(type(img), img.shape, label)
            ...     # <class 'paddle.Tensor'> [1, 28, 28] [9]
    zfashion-mnistz,https://dataset.bj.bcebos.com/fashion_mnist/r	   Ú bef4ecab320f06d8554ea6380940ec79r   Ú bb300cfdad3c16e7a12a480ee83cd310r   Ú 8d4fb7e6c68d591d4c3dfef9ec88bf0dr   Ú 25c81989df183df01b3e8a0aad5dffbeN)rk   rl   rm   rn   r"   ro   r   r!   r%   r'   r   r    r$   r&   rp   r4   r2   rr   rr   í   sT   „ ñ>ð@ €DØ?€JØÐ"=Ñ=€NØ7€NØÐ"=Ñ=€NØ7€NØ Ð#?Ñ?€OØ8€OØ Ð#?Ñ?€OØ8�Or4   rr   )r=   r@   ÚnumpyrD   ÚPILr   r   Úpaddle.dataset.commonr   Ú	paddle.ior   Ú__all__r   rr   rp   r4   r2   Ú<module>r|      s>   ðó Û ã Ý ã Ý <Ý à
€ôN ˆGô N ôbJ9�5õ J9r4   