o
    #j                     @   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
 d dlmZ g ZdZdZdZd	Zd
ZdZddddZG dd de
ZdS )    N)Image)_check_exists_and_download)Dataset)
try_importz8http://paddlemodels.bj.bcebos.com/flowers/102flowers.tgzz9http://paddlemodels.bj.bcebos.com/flowers/imagelabels.matz3http://paddlemodels.bj.bcebos.com/flowers/setid.matZ 52808999861908f626f3c1f4e79d11faZ e0620be6f572b9609742df49c70aed4dZ a5357ecc9cb78c4bef273ce3793fc85cZtstidZtrnidvalid)traintestr   c                   @   s8   e Zd ZdZ							dddZdd Zd	d
 ZdS )Flowersa  
    Implementation of `Flowers102 <https://www.robots.ox.ac.uk/~vgg/data/flowers/>`_
    dataset.

    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/flowers/.
        label_file (str, optional): Path to label file, can be set None if
            :attr:`download` is True. Default: None, default data path: ~/.cache/paddle/dataset/flowers/.
        setid_file (str, optional): Path to subset index file, can be set
            None if :attr:`download` is True. Default: None, default data path: ~/.cache/paddle/dataset/flowers/.
        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 Flowers dataset.

    Examples:

        .. code-block:: python

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

            >>> flowers = Flowers()
            >>> print(len(flowers))
            6149

            >>> for i in range(5):  # only show first 5 images
            ...     img, label = flowers[i]
            ...     # do something with img and label
            ...     print(type(img), img.size, label)
            ...     # <class 'PIL.JpegImagePlugin.JpegImageFile'> (523, 500) [1]

            >>> 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,
            ...         ),
            ...     ]
            ... )
            >>> flowers_test = Flowers(
            ...     mode="test",
            ...     transform=transform,  # apply transform to every image
            ...     backend="cv2",  # use OpenCV as image transform backend
            ... )
            >>> print(len(flowers_test))
            1020

            >>> for img, label in itertools.islice(iter(flowers_test), 5):  # only show first 5 images
            ...     # do something with img and label
            ...     print(type(img), img.shape, label)
            ...     # <class 'paddle.Tensor'> [3, 64, 96] [1]
    Nr   Tc                 C   s,  |  dv sJ d| |d u rtj }|dvr!td| || _t|   }|s:|s2J dt|tt	d|}|sJ|sBJ dt|t
td|}|sZ|sRJ dt|ttd|}|| _t|}	|d	d
| _tj| jsvt| j |	| j td}
|
|d d | _|
|| d | _d S )N)r   r   r   z3mode should be 'train', 'valid' or 'test', but got )pilcv2z4Expected backend are one of ['pil', 'cv2'], but got z>data_file is not set and downloading automatically is disabledZflowersz?label_file is not set and downloading automatically is disabledz?setid_file is not set and downloading automatically is disabledz.tgz/zscipy.iolabelsr   )lowerpaddleZvisionZget_image_backend
ValueErrorbackendMODE_FLAG_MAPr   DATA_URLDATA_MD5	LABEL_URL	LABEL_MD5	SETID_URL	SETID_MD5	transformtarfileopenreplace	data_pathospathexistsmkdir
extractallr   Zloadmatr   indexes)selfZ	data_fileZ
label_fileZ
setid_filemoder   downloadr   flagZdata_tarZscio r(   _/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/vision/datasets/flowers.py__init__l   sX   





zFlowers.__init__c                 C   s   | j | }t| j|d  g}d| }tj| j|}| jdkr't	
|}n| jdkr4tt	
|}| jd ur>| |}| jdkrJ||dfS |t |dfS )N   zjpg/image_%05d.jpgr
   r   Zint64)r#   nparrayr   r   r   joinr   r   r   r   r   Zastyper   Zget_default_dtype)r$   idxindexlabelZimg_nameimager(   r(   r)   __getitem__   s   





zFlowers.__getitem__c                 C   s
   t | jS )N)lenr#   )r$   r(   r(   r)   __len__   s   
zFlowers.__len__)NNNr   NTN)__name__
__module____qualname____doc__r*   r3   r5   r(   r(   r(   r)   r	   )   s    D
>r	   )r   r   numpyr,   ZPILr   r   Zpaddle.dataset.commonr   Z	paddle.ior   Zpaddle.utilsr   __all__r   r   r   r   r   r   r   r	   r(   r(   r(   r)   <module>   s"   