o
    Ni-                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlm  m	Z
 ddlmZ ddlmZ dZdZG d	d
 d
ejjZG dd dejjZedZdd ZdS )zCityscapes Datasets.    )absolute_import)division)print_functionN)	api_utilsa  @inproceedings{Cordts2016Cityscapes,
  title={The Cityscapes Dataset for Semantic Urban Scene Understanding},
  author={Cordts, Marius and Omran, Mohamed and Ramos, Sebastian and Rehfeld, Timo and Enzweiler, Markus and Benenson, Rodrigo and Franke, Uwe and Roth, Stefan and Schiele, Bernt},
  booktitle={Proc. of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2016}
}
a    Cityscapes is a dataset consisting of diverse urban street scenes across 50 different cities
  at varying times of the year as well as ground truths for several vision tasks including
  semantic segmentation, instance level segmentation (TODO), and stereo pair disparity inference.


  For segmentation tasks (default split, accessible via 'cityscapes/semantic_segmentation'), Cityscapes provides
  dense pixel level annotations for 5000 images at 1024 * 2048 resolution pre-split into training (2975),
  validation (500) and test (1525) sets. Label annotations for segmentation tasks span across 30+ classes
  commonly encountered during driving scene perception. Detailed label information may be found here:
  https://github.com/mcordts/cityscapesScripts/blob/master/cityscapesscripts/helpers/labels.py#L52-L99

  Cityscapes also provides coarse grain segmentation annotations (accessible via 'cityscapes/semantic_segmentation_extra')
  for 19998 images in a 'train_extra' split which may prove useful for pretraining / data-heavy models.


  Besides segmentation, cityscapes also provides stereo image pairs and ground truths for disparity inference
  tasks on both the normal and extra splits (accessible via 'cityscapes/stereo_disparity' and
  'cityscapes/stereo_disparity_extra' respectively).

  Ingored examples:
  - For 'cityscapes/stereo_disparity_extra':
    - troisdorf_000000_000073_{*} images (no disparity map present)

  WARNING: this dataset requires users to setup a login and password in order to get the files.
c                       s,   e Zd ZdZej		d fdd	Z  ZS )CityscapesConfiga  BuilderConfig for Cityscapes.

    Args:
      right_images (bool): Enables right images for stereo image tasks.
      segmentation_labels (bool): Enables image segmentation labels.
      disparity_maps (bool): Enables disparity maps.
      train_extra_split (bool): Enables train_extra split. This automatically
          enables coarse grain segmentations, if segmentation labels are used.
  FTc                    s   t t| jdddi| || _|| _|| _|| _t | _i | _	d| j	d< | jr-d| j	d< | jr=d| j	d< | jr=d	| j	d
< | jrY| jsLd| j	d< d| _
nd| j	d< d| j	d< d| _
| jrqd| j	d< | jrsd| j	d< | jd d S d S d S )Nversionz1.0.0)zleftImg8bit_trainvaltest.zipleftImg8bitimages_left)zleftImg8bit_trainextra.zipr   zimages_left/extra)zrightImg8bit_trainvaltest.ziprightImg8bitimages_right)zrightImg8bit_trainextra.zipr
   zimages_right/extra)zgtFine_trainvaltest.zipgtFinesegmentation_labelsgtFine_labelIds)zgtCoarse.zipgtCoarsezsegmentation_labels/extragtCoarse_labelIds)zdisparity_trainvaltest.zip	disparitydisparity_maps)zdisparity_trainextra.zipr   zdisparity_maps/extratroisdorf_000000_000073 )superr   __init__right_imagesr   r   train_extra_splitsetignored_idszip_rootlabel_suffixadd)selfr   r   r   r   kwargs	__class__r   X/home/ubuntu/.local/lib/python3.10/site-packages/tensorflow_datasets/image/cityscapes.pyr   N   s8   








zCityscapesConfig.__init__)FTFF)__name__
__module____qualname____doc__r   disallow_positional_argsr   __classcell__r   r   r    r"   r   C   s    
r   c                   @   sx   e Zd ZdZdZedddddddedd	ddddded
ddddddedddddddgZdd Zdd Zdd Z	dS )
Cityscapesz#Base class for Cityscapes datasets.aC    You have to download files from https://www.cityscapes-dataset.com/login/
  (This dataset requires registration).
  For basic config (semantic_segmentation) you must download
  'leftImg8bit_trainvaltest.zip' and 'gtFine_trainvaltest.zip'.
  Other configs do require additional files - please see code for more details.
  semantic_segmentationz)Cityscapes semantic segmentation dataset.FT)namedescriptionr   r   r   r   semantic_segmentation_extrazRCityscapes semantic segmentation dataset with train_extra split and coarse labels.stereo_disparityz3Cityscapes stereo image and disparity maps dataset.stereo_disparity_extrazJCityscapes stereo image and disparity maps dataset with train_extra split.c                 C   s   i }t j |d< t jjddd|d< | jjr!t jjddd|d< | jjr/t jjddd|d< | jjr=t jjddd|d	< t jj	| t
t j|d
tdS )Nimage_id)         png)shapeencoding_format
image_leftimage_right)r1   r2      segmentation_labeldisparity_mapz"https://www.cityscapes-dataset.com)builderr,   featureshomepagecitation)tfdsr=   TextImagebuilder_configr   r   r   coreDatasetInfo_DESCRIPTIONFeaturesDict	_CITATION)r   r=   r   r   r"   _info   s0   




zCityscapes._infoc           	      C   s<  i }| j j D ]\}\}}tj|j|||< qtdd | D r3d}|d| 7 }t	|| j j D ]\}\}}tj|
|| |||< q9tjjtjjdd | D dtjjtjjdd | D dg}| j js|tjjtjjd	d | D d |S |tjjd
dd | D d |S )Nc                 s   s     | ]}t jj| V  qd S )N)tfiogfileexists).0zr   r   r"   	<genexpr>   s    z/Cityscapes._split_generators.<locals>.<genexpr>z@You must download the dataset files manually and place them in: z, c                 S   *   i | ]\}}| d s|tj|dqS )/extratrainendswithospathjoinrN   feat_dirrW   r   r   r"   
<dictcomp>       z0Cityscapes._split_generators.<locals>.<dictcomp>)r+   
gen_kwargsc                 S   rQ   )rR   valrT   rY   r   r   r"   r[      r\   c                 S   rQ   )rR   testrT   rY   r   r   r"   r[      r\   train_extrac                 S   s2   i | ]\}}| d r|d dtj|dqS )rR    r`   )rU   replacerV   rW   rX   rY   r   r   r"   r[      s    )rC   r   itemsrV   rW   rX   
manual_diranyvaluesAssertionErrorextractr@   rD   SplitGeneratorSplitTRAIN
VALIDATIONr   appendTEST)	r   
dl_managerpathssplitzip_file_msgr   splitsr   r   r"   _split_generators   sJ   

zCityscapes._split_generatorsc           	   	   +   s    |d }t jj|D ]p  fdd| D }|d }t jj|D ]W}tj||}t|}|| j	j
v r8q$||d}| j	jrOtj|d d||d< | j	jrdtj|d d	|| j	j|d
< | j	jrvtj|d d||d< ||fV  q$qd S )Nr	   c                    s    i | ]\}}|t j| qS r   )rV   rW   rX   rY   city_idr   r"   r[     s    z1Cityscapes._generate_examples.<locals>.<dictcomp>)r0   r7   r   z{}_rightImg8bit.pngr8   r   z	{}_{}.pngr:   r   z{}_disparity.pngr;   )rJ   rK   rL   listdirrc   rV   rW   rX   _get_left_image_idrC   r   r   formatr   r   r   )	r   rp   left_imgs_rootpaths_city_rootleft_city_rootleft_imgleft_img_pathr0   r=   r   rw   r"   _generate_examples  sF   
zCityscapes._generate_examplesN)
r#   r$   r%   r&   MANUAL_DOWNLOAD_INSTRUCTIONSr   BUILDER_CONFIGSrI   rv   r   r   r   r   r"   r)      sN    	#5r)   z'([a-z\-]+)_(\d+)_(\d+)_leftImg8bit\.pngc                 C   s   t | }dj|  S )a  Returns the id of an image file.

  Used to associate an image file with its corresponding label.
  Example:
    'bonn_000001_000019_leftImg8bit' -> 'bonn_000001_000019'

  Args:
    left_image: name of the image file.

  Returns:
    Id of the image (see example above).
  z{}_{}_{})LEFT_IMAGE_FILE_REmatchr{   groups)
left_imager   r   r   r"   rz   +  s   
rz   )r&   
__future__r   r   r   rV   retensorflow.compat.v2compatv2rJ   tensorflow_datasets.corer   tensorflow_datasets.public_api
public_apir@   rH   rF   rD   BuilderConfigr   GeneratorBasedBuilderr)   compiler   rz   r   r   r   r"   <module>   s    	? 
'