o
    ^ip"                     @   sn  d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl	m
Z zd dlmZ W n ey7   d dl	mZ Y nw d dlmZ ddlmZmZ dd	lmZ d
ddejddddddejdddddddejddddddejddddddejdddd d!d"ejdd#dd$d%d&ejdd#dd'ZG d(d) d)eZG d*d+ d+eZG d,d- d-eZdS ).    N)Path)AnyCallableOptionalUnion)Element)parse)Image   )download_and_extract_archiveverify_str_arg)VisionDatasetzJhttp://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tarzVOCtrainval_11-May-2012.tar 6cd6e144f989b92b3379bac3b3de84fd	VOCdevkitVOC2012)urlfilenamemd5base_dirzJhttp://host.robots.ox.ac.uk/pascal/VOC/voc2011/VOCtrainval_25-May-2011.tarzVOCtrainval_25-May-2011.tar 6c3384ef61512963050cb5d687e5bf1eTrainValVOC2011zJhttp://host.robots.ox.ac.uk/pascal/VOC/voc2010/VOCtrainval_03-May-2010.tarzVOCtrainval_03-May-2010.tar da459979d0c395079b5c75ee67908abbVOC2010zJhttp://host.robots.ox.ac.uk/pascal/VOC/voc2009/VOCtrainval_11-May-2009.tarzVOCtrainval_11-May-2009.tar a3e00b113cfcfebf17e343f59da3caa1VOC2009zJhttp://host.robots.ox.ac.uk/pascal/VOC/voc2008/VOCtrainval_14-Jul-2008.tar 2629fa636546599198acfcfbfcf1904aVOC2008zJhttp://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tarzVOCtrainval_06-Nov-2007.tar c52e279531787c972589f7e41ab4ae64VOC2007zFhttp://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tarzVOCtest_06-Nov-2007.tar b6e924de25625d8de591ea690078ad9f)201220112010200920082007	2007-testc                       s   e Zd ZU eed< eed< eed< 						ddeeef d	ed
ededee	 dee	 dee	 f fddZ
defddZ  ZS )_VOCBase_SPLITS_DIR_TARGET_DIR_TARGET_FILE_EXTr!   trainFNrootyear	image_setdownload	transformtarget_transform
transformsc                    s  t  |||| t|ddd tddD d_g d}|dkr&|d	 t|d
|_|dkr7|d	kr7dn|}	t|	 }
|
d _|
d _	|
d _
|
d }tjj|}|rftjjj	j
d tj|sptdtj|dj}tj||dd }ttj|}dd | D }W d    n1 sw   Y  tj|d  fdd|D _tj|jfdd|D _tjtjksJ d S )Nr.   c                 S   s   g | ]}t |qS  )str).0yrr4   r4   S/var/www/html/RAG/RAG_venv/lib/python3.10/site-packages/torchvision/datasets/voc.py
<listcomp>P       z%_VOCBase.__init__.<locals>.<listcomp>i  i  )valid_values)r,   trainvalvalr&   testr/   r'   r   r   r   r   )r   r   zHDataset not found or corrupted. You can use download=True to download it	ImageSets
z.txtc                 S   s   g | ]}|  qS r4   )stripr6   xr4   r4   r8   r9   j   r:   
JPEGImagesc                    s   g | ]}t j |d  qS )z.jpg)ospathjoinrB   )	image_dirr4   r8   r9   m   s    c                    s    g | ]}t j| j qS r4   )rE   rF   rG   r+   rB   )self
target_dirr4   r8   r9   p   s     )super__init__r   ranger.   appendr/   DATASET_YEAR_DICTr   r   r   rE   rF   rG   r-   r   isdirRuntimeErrorr)   rstripopen	readlinesimagesr*   targetslen)rI   r-   r.   r/   r0   r1   r2   r3   valid_image_setskeydataset_year_dictr   voc_root
splits_dirsplit_ff
file_names	__class__)rH   rI   rJ   r8   rL   D   s6   
 



z_VOCBase.__init__returnc                 C   s
   t | jS N)rW   rU   rI   r4   r4   r8   __len__t   s   
z_VOCBase.__len__)r!   r,   FNNN)__name__
__module____qualname__r5   __annotations__r   r   boolr   r   rL   intre   __classcell__r4   r4   r`   r8   r(   ?   s4   
 
0r(   c                   @   sL   e Zd ZdZdZdZdZedee	 fddZ
dedeeef fd	d
ZdS )VOCSegmentationa2  `Pascal VOC <http://host.robots.ox.ac.uk/pascal/VOC/>`_ Segmentation Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of the VOC Dataset.
        year (string, optional): The dataset year, supports years ``"2007"`` to ``"2012"``.
        image_set (string, optional): Select the image_set to use, ``"train"``, ``"trainval"`` or ``"val"``. If
            ``year=="2007"``, can also be ``"test"``.
        download (bool, optional): If true, downloads the dataset from the internet and
            puts it in root directory. If dataset is already downloaded, it is not
            downloaded again.
        transform (callable, optional): A function/transform that  takes in a PIL image
            and returns a transformed version. E.g, ``transforms.RandomCrop``
        target_transform (callable, optional): A function/transform that takes in the
            target and transforms it.
        transforms (callable, optional): A function/transform that takes input sample and its target as entry
            and returns a transformed version.
    SegmentationSegmentationClassz.pngrb   c                 C      | j S rc   rV   rd   r4   r4   r8   masks      zVOCSegmentation.masksindexc                 C   sH   t | j| d}t | j| }| jdur | ||\}}||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: (image, target) where target is the image segmentation.
        RGBN)r	   rS   rU   convertrr   r3   rI   rt   imgtargetr4   r4   r8   __getitem__   s
   
zVOCSegmentation.__getitem__N)rf   rg   rh   __doc__r)   r*   r+   propertylistr5   rr   rk   tupler   rz   r4   r4   r4   r8   rm   x   s    rm   c                   @   sj   e Zd ZdZdZdZdZedee	 fddZ
dedeeef fd	d
Zededee	ef fddZdS )VOCDetectionan  `Pascal VOC <http://host.robots.ox.ac.uk/pascal/VOC/>`_ Detection Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of the VOC Dataset.
        year (string, optional): The dataset year, supports years ``"2007"`` to ``"2012"``.
        image_set (string, optional): Select the image_set to use, ``"train"``, ``"trainval"`` or ``"val"``. If
            ``year=="2007"``, can also be ``"test"``.
        download (bool, optional): If true, downloads the dataset from the internet and
            puts it in root directory. If dataset is already downloaded, it is not
            downloaded again.
            (default: alphabetic indexing of VOC's 20 classes).
        transform (callable, optional): A function/transform that takes in a PIL image
            and returns a transformed version. E.g, ``transforms.RandomCrop``
        target_transform (callable, required): A function/transform that takes in the
            target and transforms it.
        transforms (callable, optional): A function/transform that takes input sample and its target as entry
            and returns a transformed version.
    MainAnnotationsz.xmlrb   c                 C   rp   rc   rq   rd   r4   r4   r8   annotations   rs   zVOCDetection.annotationsrt   c                 C   sP   t | j| d}| t| j|  }| jdur$| ||\}}||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: (image, target) where target is a dictionary of the XML tree.
        ru   N)	r	   rS   rU   rv   parse_voc_xmlET_parser   getrootr3   rw   r4   r4   r8   rz      s
   
zVOCDetection.__getitem__nodec                 C   s   i }t | }|r>tt }ttj|D ]}| D ]\}}|| | qq| jdkr2|d g|d< | jdd | D i}| j	rM| j	
 }|sM||| j< |S )N
annotationobjectc                 S   s*   i | ]\}}|t |d kr|d n|qS )r
   r   )rW   )r6   indvr4   r4   r8   
<dictcomp>   s   * z.VOCDetection.parse_voc_xml.<locals>.<dictcomp>)r}   collectionsdefaultdictmapr   r   itemsrN   tagtextrA   )r   voc_dictchildrendef_dicdcr   r   r   r4   r4   r8   r      s    



zVOCDetection.parse_voc_xmlN)rf   rg   rh   r{   r)   r*   r+   r|   r}   r5   r   rk   r~   r   rz   staticmethod
ET_Elementdictr   r4   r4   r4   r8   r      s     r   )r   rE   pathlibr   typingr   r   r   r   xml.etree.ElementTreer   r   defusedxml.ElementTreer   r   ImportErrorPILr	   utilsr   r   visionr   rF   rG   rO   r(   rm   r   r4   r4   r4   r8   <module>   sh    .9,