
    ڧgQ(                         d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlmZ ddlmZmZmZ ddlmZ  G d	 d
e          ZdS )    N)
namedtuple)Path)AnyCallableDictListOptionalTupleUnion)Image   )extract_archiveiterable_to_strverify_str_arg)VisionDatasetc                       e Zd ZdZ edg d          Zg  eddddddd	d
           eddddddd	d
           eddddddd	d
           eddddddd	d
           eddddddd	d
           eddddddd	d           eddddddd	d           edddddddd           edddddddd           ed d!ddddd	d"           ed#d$ddddd	d%           ed&d'dd(dddd)           ed*d+dd(dddd,           ed-d.dd(dddd/           ed0d1dd(ddd	d2           ed3d4dd(ddd	d5           ed6d7dd(ddd	d8           ed9d:dd;dddd<           ed=d>dd;ddd	d<           ed?d@dd;ddddA           edBdCdd;ddddD           edEdFddGddddH           edIdJd!dGddddK           edLdMd$dLddddN           edOdPd'dQdd	ddR           edSdTd+dQdd	ddU           edVdWd.dXdd	ddY           edZd[d1dXdd	dd\           ed]d^d4dXdd	dd_           ed`daddXdd	d	db           edcddddXdd	d	de           edfdgd7dXdd	ddh           edidjd:dXdd	ddk           edldmd>dXdd	ddn           edodpdpdXddd	dY          Z	 	 	 	 	 	 ddteee	f         duedvedwee
e         ef         dxee         dyee         dzee         d{dsf fd|Zd}ed{eeef         fd~Zd{efdZd{efdZded{eeef         fdZdvedwed{efdZ xZS )
Cityscapesaw  `Cityscapes <http://www.cityscapes-dataset.com/>`_ Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory ``leftImg8bit``
            and ``gtFine`` or ``gtCoarse`` are located.
        split (string, optional): The image split to use, ``train``, ``test`` or ``val`` if mode="fine"
            otherwise ``train``, ``train_extra`` or ``val``
        mode (string, optional): The quality mode to use, ``fine`` or ``coarse``
        target_type (string or list, optional): Type of target to use, ``instance``, ``semantic``, ``polygon``
            or ``color``. Can also be a list to output a tuple with all specified target types.
        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.

    Examples:

        Get semantic segmentation target

        .. code-block:: python

            dataset = Cityscapes('./data/cityscapes', split='train', mode='fine',
                                 target_type='semantic')

            img, smnt = dataset[0]

        Get multiple targets

        .. code-block:: python

            dataset = Cityscapes('./data/cityscapes', split='train', mode='fine',
                                 target_type=['instance', 'color', 'polygon'])

            img, (inst, col, poly) = dataset[0]

        Validate on the "coarse" set

        .. code-block:: python

            dataset = Cityscapes('./data/cityscapes', split='val', mode='coarse',
                                 target_type='semantic')

            img, smnt = dataset[0]
    CityscapesClass)nameidtrain_idcategorycategory_idhas_instancesignore_in_evalcolor	unlabeledr      voidFT)r   r   r   zego vehicler   zrectification border   z
out of roi   static   dynamic   )o   J   r   ground   )Q   r   r*   road   flat)   @   r.   sidewalk   )   #      parking	   )         z
rail track
   )         building   construction)F   rA   rA   wall   )f   rD      fence   )      rI   z
guard rail   )      rK   bridge   )r<   d   rO   tunnel   )r<   x   Z   pole   object)rI   rI   rI   	polegroup   ztraffic light   )r7   r8      ztraffic sign   )   r\   r   
vegetation   nature)k      r3   terrain   )      rd   sky   )rA      rK   person   human)r\   r[   <   rider   )r   r   r   car   vehicle)r   r   ra   truck   )r   r   rA   bus   )r   rl   rO   caravan   )r   r   rS   trailerrZ   )r   r   n   train   )r   P   rO   
motorcycle    )r   r   r;   bicycle!   )w   r?   r~   zlicense platefineinstanceNrootsplitmodetarget_type	transformtarget_transform
transformsreturnc           
         t                                          ||||           |dk    rdnd| _        t          j                            | j        d|          | _        t          j                            | j        | j        |          | _        || _	        || _
        g | _        g | _        t          |dd           |dk    rd}nd}d	}	|	                    ||t          |                    }	t          |d
||	           t!          |t"                    s|g| _	        d | j	        D              t          j                            | j                  r%t          j                            | j                  s<|dk    r&t          j                            | j        d          }
n%t          j                            | j        d          }
| j        dk    r.t          j                            | j        | j         d          }n8| j        dk    r-t          j                            | j        | j         d          }t          j                            |
          rLt          j                            |          r-t)          |
| j                   t)          || j                   nt+          d          t          j        | j                  D ]=}t          j                            | j        |          }t          j                            | j        |          }t          j        |          D ]}g }| j	        D ]}}d                    |
                    d          d         |                     | j        |                    }|                    t          j                            ||                     ~| j                            t          j                            ||                     | j                            |           ܐ?d S )Nr   gtFinegtCoarseleftImg8bitr   )r   coarse)rz   testval)rz   train_extrar   zOUnknown value '{}' for argument split if mode is '{}'. Valid values are {{{}}}.r   c                 0    g | ]}t          |d d          S )r   )r   semanticpolygonr   )r   ).0values     [/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchvision/datasets/cityscapes.py
<listcomp>z'Cityscapes.__init__.<locals>.<listcomp>   s5     	
 	
 	
 5-1]^^	
 	
 	
    r   zleftImg8bit_trainextra.zipzleftImg8bit_trainvaltest.zipz_trainvaltest.zipz.zip)	from_pathto_pathzDataset not found or incomplete. Please make sure all required folders for the specified "split" and "mode" are inside the "root" directoryz{}_{}_leftImg8bitr   )super__init__r   ospathjoinr   
images_dirtargets_dirr   r   imagestargetsr   formatr   
isinstancelistisdirisfiler   RuntimeErrorlistdir_get_target_suffixappend)selfr   r   r   r   r   r   r   valid_modesmsgimage_dir_ziptarget_dir_zipcityimg_dir
target_dir	file_nametarget_typesttarget_name	__class__s                      r   r   zCityscapes.__init__i   s    	z96FGGG $HHJ	',,ty-GG7<<	49eDD&
tV%78886>>2KK9K_jjok&B&BCCug{C888+t,, 	- +}D	
 	
)	
 	
 	
 	

 w}}T_-- 	RW]]4CS5T5T 	%% "TY8T U U "TY8V W WyH$$!#diDI9X9X9X!Y!Yj((!#diDI9K9K9K!L!Lw~~m,, 1O1O -KKKK.$)LLLLL"T  
 Jt// 	2 	2Dgll4?D99Gd&6==JZ00 	2 	2	!) O OA")..!77:D<S<STXT]_`<a<a# #K !''Z(M(MNNNN""27<<#C#CDDD##L1111	2	2 	2r   indexc                    t          j        | j        |                                       d          }g }t	          | j                  D ]l\  }}|dk    r'|                     | j        |         |                   }n%t          j        | j        |         |                   }|                    |           mt          |          dk    rt          |          n|d         }| j        |                     ||          \  }}||fS )a.  
        Args:
            index (int): Index
        Returns:
            tuple: (image, target) where target is a tuple of all target types if target_type is a list with more
            than one item. Otherwise, target is a json object if target_type="polygon", else the image segmentation.
        RGBr   r   r   )r   openr   convert	enumerater   
_load_jsonr   r   lentupler   )r   r   imager   ir   targets          r   __getitem__zCityscapes.__getitem__   s     
4;u-..66u==d.// 	# 	#DAqI~~e)<Q)?@@DL$7$:;;NN6""""#&w<<!#3#3w?& OOE6::ME6f}r   c                 *    t          | j                  S N)r   r   )r   s    r   __len__zCityscapes.__len__   s    4;r   c                 T    g d} d                     |          j        di | j        S )N)zSplit: {split}zMode: {mode}zType: {target_type}
 )r   r   __dict__)r   liness     r   
extra_reprzCityscapes.extra_repr   s4    III&tyy&77777r   r   c                 |    t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   |S r   )r   jsonload)r   r   filedatas       r   r   zCityscapes._load_json   sr    $ZZ 	#49T??D	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   155c                 N    |dk    r| dS |dk    r| dS |dk    r| dS | dS )Nr   z_instanceIds.pngr   z_labelIds.pngr   z
_color.pngz_polygons.jsonr   )r   r   r   s      r   r   zCityscapes._get_target_suffix   s_    *$$,,,,J&&))))G##&&&&****r   )rz   r   r   NNN)__name__
__module____qualname____doc__r   r   classesr   strr   r   r	   r   r   intr
   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      sj       - -` !jiii O
$QVQtYOO$q#vq%yQQ$ 	.35$PYZZ$ 	afaiPP	$
 	!S&!UD)LL$ 		1c61eT<PP$ 	!S&!UD+NN$ 	1fa~NN$ 	
Aq&!UE>RR$ 		1c61eT?SS$ 	b#vq%WW$ 	
B>1eULYY$ 	A~q%XX$ 	Q5%YY$ 	b#~q%__$  	"c>1eT?[[!$" 	"c>1eT>ZZ#$$ 	AxE5/RR%$& 	Rh5$XX'$( 	Q!UE>ZZ)$* 	AxE5-XX+$, 	b!Xq%WW-$. 		2q(Aue_UU/$0 	r2ua~NN1$2 	"b'1dE=QQ3$4 	R!T5+NN5$6 	r2y!T5+NN7$8 	RAtUJOO9$: 	r2y!T5,OO;$< 		2sIq$jQQ=$> 		2sIq$kRR?$@ 	RAtULQQA$B 	b"iD%UUC$D 		2r9aumTTE$F 	RAudKXXG$GR -7(,/3)-D2 D2CID2 D2 	D2
 49c>*D2 H%D2 #8,D2 X&D2 
D2 D2 D2 D2 D2 D2L sCx    6         8C 8 8 8 8s tCH~    
+s + + + + + + + + + +r   r   )r   r   collectionsr   pathlibr   typingr   r   r   r   r	   r
   r   PILr   utilsr   r   r   visionr   r   r   r   r   <module>r      s     				 " " " " " "       D D D D D D D D D D D D D D D D D D       C C C C C C C C C C ! ! ! ! ! !Q+ Q+ Q+ Q+ Q+ Q+ Q+ Q+ Q+ Q+r   