
    |j                       d dl mZ d dlZd dlZd dlmZmZmZ d dlZ	d dl
mZ d dlZd dlmZ d dlmZ er(d dlmZ d dlmZ d dlmZ d	d
lmZ ed         Zed         Zg ZdZdZdZdZdZ dZ!ddddZ" G d dee#d                            Z$dS )    )annotationsN)TYPE_CHECKINGAnyLiteral)Image)_check_exists_and_download)Dataset)	DTypeLike)
_Transform   )_ImageDataType)cv2piltrainvalidtestz=https://dataset.bj.bcebos.com/voc/VOCtrainval_11-May-2012.tar 6cd6e144f989b92b3379bac3b3de84fdz/VOCdevkit/VOC2012/ImageSets/Segmentation/{}.txtz#VOCdevkit/VOC2012/JPEGImages/{}.jpgz*VOCdevkit/VOC2012/SegmentationClass/{}.pngvoc2012trainvalr   val)r   r   r   c                      e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ded<   	 	 	 	 	 dddZd Zd dZd!dZd"dZ	dS )#VOC2012a
  
    Implementation of `VOC2012 <http://host.robots.ox.ac.uk/pascal/VOC/voc2012/>`_ dataset.

    Args:
        data_file (str|None, optional): Path to data file, can be set None if
            :attr:`download` is True. Default: None, default data path: ~/.cache/paddle/dataset/voc2012.
        mode (str, optional): Either train or test mode. Default 'train'.
        transform (Callable|None, 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|None, 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 VOC2012 dataset.

    Examples:

        .. code-block:: python

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


            >>> voc2012 = VOC2012()
            >>> print(len(voc2012))
            2913

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


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

            >>> voc2012_test = VOC2012(
            ...     mode="test",
            ...     transform=transform,  # apply transform to every image
            ...     backend="cv2",  # use OpenCV as image transform backend
            ... )
            >>> print(len(voc2012_test))
            1464

            >>> for img, label in itertools.islice(iter(voc2012_test), 5):  # only show first 5 images
            ...     # do something with img and label
            ...     print(type(img), img.shape) # type: ignore
            ...     # <class 'paddle.Tensor'> [3, 281, 500]
            ...     print(type(label), label.shape)
            ...     # <class 'numpy.ndarray'> (281, 500)
    
str | None	data_file_DatasetModemode_Transform[Any, Any] | None	transform_ImageBackendbackendstrflagr
   dtypeNr   Tdownloadbool_ImageBackend | NonereturnNonec                   |                                 dv sJ d|             |t          j                                        }|dvrt	          d|           || _        t          |                                          | _        || _        | j        3|s
J d            t          |t          t          t          |          | _        || _        |                                  t          j                    | _        d S )Nr   z3mode should be 'train', 'valid' or 'test', but got )r   r   z4Expected backend are one of ['pil', 'cv2'], but got z>data_file is not set and downloading automatically is disabled)lowerpaddlevisionget_image_backend
ValueErrorr!   MODE_FLAG_MAPr#   r   r   VOC_URLVOC_MD5	CACHE_DIRr   
_load_annoget_default_dtyper$   )selfr   r   r   r%   r!   s         n/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/vision/datasets/voc2012.py__init__zVOC2012.__init__   s    zz||  
 
 
 
 HGG	
 
 
 ?m5577G.((PwPP   !$**,,/	">!  P 8 87GY DN # 	-//


    c                   i | _         t          j        | j                  | _        | j                                        D ]}|| j         |j        <   t                              | j	                  }| j        
                    | j         |                   }g | _        g | _        |D ]}|                                }t                              |                    d                    }t                               |                    d                    }| j                            |           | j                            |           d S )Nzutf-8)name2memtarfileopenr   data_tar
getmembersnameSET_FILEformatr#   extractfiledatalabelsstrip	DATA_FILEdecode
LABEL_FILEappend)r6   eleset_filesetslinerD   labels          r7   r4   zVOC2012._load_anno   s   T^44=++-- 	* 	*C&)DM#(##??49--}((x)@AA	 	& 	&D::<<D##DKK$8$899D%%dkk'&:&:;;EIT"""Ku%%%%	& 	&r9   idxint'tuple[_ImageDataType, npt.NDArray[Any]]c                   | j         |         }| j        |         }| j                            | j        |                                                   }| j                            | j        |                                                   }t          j        t          j	        |                    }t          j        t          j	        |                    }| j
        dk    r(t          j        |          }t          j        |          }| j        |                     |          }| j
        dk    r4|                    | j                  |                    | j                  fS ||fS )Nr   )rD   rE   r>   rC   r;   readr   r=   ioBytesIOr!   nparrayr   astyper$   )r6   rP   r   
label_filerD   rO   s         r7   __getitem__zVOC2012.__getitem__   s   IcN	[%
}((y)ABBGGII))$-
*CDDIIKKz"*T**++
2:e,,--<5  8D>>DHUOOE>%>>$''D<5  ;;tz**ELL,D,DDDU{r9   c                *    t          | j                  S N)lenrD   r6   s    r7   __len__zVOC2012.__len__   s    49~~r9   c                J    | j         r| j                                          d S d S r]   )r>   closer_   s    r7   __del__zVOC2012.__del__   s0    = 	"M!!!!!	" 	"r9   )Nr   NTN)r   r   r   r   r   r   r%   r&   r!   r'   r(   r)   )rP   rQ   r(   rR   )r(   rQ   )r(   r)   )
__name__
__module____qualname____doc____annotations__r8   r4   r[   r`   rc    r9   r7   r   r   6   s         A AF ****III !%$15(,%0 %0 %0 %0 %0N& & &&   *   " " " " " "r9   r   )r   znpt.NDArray[Any])%
__future__r   rU   r<   typingr   r   r   numpyrW   PILr   r,   paddle.dataset.commonr   	paddle.ior	   numpy.typingnptpaddle._typingr
   #paddle.vision.transforms.transformsr   imager   r    r   __all__r1   r2   rA   rG   rI   r3   r0   tupler   ri   r9   r7   <module>rw      st   # " " " " " 				  . . . . . . . . . .            < < < < < <       
5((((((>>>>>>&&&&&&L)M34L

I
,<1	9
	$gFF_" _" _" _" _"ge@AB _" _" _" _" _"r9   