a
    PSic                     @  sd   d dl mZ d dlZd dlmZmZmZmZ d dlZ	ddl
mZmZ ddlmZ G dd deZdS )	    )annotationsN)AnyCallableOptionalTuple   )download_and_extract_archiveverify_str_arg)VisionDatasetc                	      sp   e Zd ZdZdZddddddd	d
d fddZddddZddddZd
dddZd	dddZ	  Z
S )FGVCAircrafta  `FGVC Aircraft <https://www.robots.ox.ac.uk/~vgg/data/fgvc-aircraft/>`_ Dataset.

    The dataset contains 10,000 images of aircraft, with 100 images for each of 100
    different aircraft model variants, most of which are airplanes.
    Aircraft models are organized in a three-levels hierarchy. The three levels, from
    finer to coarser, are:

    - ``variant``, e.g. Boeing 737-700. A variant collapses all the models that are visually
        indistinguishable into one class. The dataset comprises 100 different variants.
    - ``family``, e.g. Boeing 737. The dataset comprises 70 different families.
    - ``manufacturer``, e.g. Boeing. The dataset comprises 30 different manufacturers.

    Args:
        root (string): Root directory of the FGVC Aircraft dataset.
        split (string, optional): The dataset split, supports ``train``, ``val``,
            ``trainval`` and ``test``.
        annotation_level (str, optional): The annotation level, supports ``variant``,
            ``family`` and ``manufacturer``.
        transform (callable, optional): A function/transform that  takes in an 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.
        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.
    zWhttps://www.robots.ox.ac.uk/~vgg/data/fgvc-aircraft/archives/fgvc-aircraft-2013b.tar.gztrainvalvariantNFstrzOptional[Callable]boolNone)rootsplitannotation_level	transformtarget_transformdownloadreturnc              	     s  t  j|||d t|dd| _t|dd| _tj| jd| _	|rL| 
  |  s\tdtj| j	dd	d
dd| j }t|d }dd |D | _W d    n1 s0    Y  tt| jtt| j| _tj| j	dd}	tj| j	dd| j d| j d}
g | _g | _t|
d^}|D ]H}| dd\}}| jtj|	| d | j| j|  q$W d    n1 s0    Y  d S )N)r   r   r   )trainvalr   testr   )r   familyZmanufacturerzfgvc-aircraft-2013bz;Dataset not found. You can use download=True to download itdatazvariants.txtzfamilies.txtzmanufacturers.txtrc                 S  s   g | ]}|  qS  )strip).0liner   r   ^/var/www/html/django/DPS/env/lib/python3.9/site-packages/torchvision/datasets/fgvc_aircraft.py
<listcomp>J       z)FGVCAircraft.__init__.<locals>.<listcomp>imagesZimages__z.txt r   z.jpg)super__init__r	   _splitZ_annotation_levelospathjoinr   
_data_path	_download_check_existsRuntimeErroropenclassesdictziprangelenclass_to_idx_image_files_labelsr   r   append)selfr   r   r   r   r   r   Zannotation_filefZimage_data_folderZlabels_filer!   Z
image_name
label_name	__class__r   r"   r)   *   s@    		.$zFGVCAircraft.__init__int)r   c                 C  s
   t | jS N)r7   r9   r<   r   r   r"   __len__Z   s    zFGVCAircraft.__len__zTuple[Any, Any]c                 C  sP   | j | | j|  }}tj|d}| jr8| |}| jrH| |}||fS )NRGB)r9   r:   PILImager2   convertr   r   )r<   idx
image_filelabelimager   r   r"   __getitem__]   s    

zFGVCAircraft.__getitem__c                 C  s   |   rdS t| j| j dS )zW
        Download the FGVC Aircraft dataset archive and extract it under root.
        N)r0   r   _URLr   rC   r   r   r"   r/   i   s    zFGVCAircraft._downloadc                 C  s   t j| jot j| jS rB   )r+   r,   existsr.   isdirrC   r   r   r"   r0   q   s    zFGVCAircraft._check_exists)r   r   NNF)__name__
__module____qualname____doc__rN   r)   rD   rM   r/   r0   __classcell__r   r   r?   r"   r      s         0r   )
__future__r   r+   typingr   r   r   r   	PIL.ImagerF   utilsr   r	   visionr
   r   r   r   r   r"   <module>   s   