§
    ù²Åjƒ'  ã                   ó  — d dl Z d dlZd dlZd dlmZ d dlm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 d dlmZ dd	lmZmZ dd
lmZmZmZmZ ddlmZ ddlmZ deee	f         deee	f         deddfd„Z  G d„ de¦  «        Z!dS )é    N)Úpartial)ÚPool)Úpath)ÚPath)ÚAnyÚCallableÚDictÚOptionalÚTupleÚUnion)ÚTensoré   )Úfind_classesÚmake_dataset)Úcheck_integrityÚdownload_and_extract_archiveÚdownload_urlÚverify_str_arg)Ú
VideoClips)ÚVisionDatasetÚtarpathÚ	videopathÚlineÚreturnc                 ó(   — t          || |¦  «         d S ©N)r   )r   r   r   s      úNC:\Projects\Historical\venv\Lib\site-packages\torchvision/datasets/kinetics.pyÚ_dl_wrapr      s   € Ý   w°	Ñ:Ô:Ð:Ð:Ð:ó    c            )       óv  ‡ — e Zd ZdZddddœZddddœZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d.deeef         de	dedede
e	         de	de
e         deedf         dede	de	de
eeef                  de	de	d e	d!e	d"e	d#ed$ed%df(ˆ fd&„Zd/d'„Zd/d(„Zd/d)„Zed%eeef         fd*„¦   «         Zd%e	fd+„Zd,e	d%eeee	f         fd-„Zˆ xZS )0ÚKineticsu†  `Generic Kinetics <https://www.deepmind.com/open-source/kinetics>`_
    dataset.

    Kinetics-400/600/700 are action recognition video datasets.
    This dataset consider every video as a collection of video clips of fixed size, specified
    by ``frames_per_clip``, where the step in frames between each clip is given by
    ``step_between_clips``.

    To give an example, for 2 videos with 10 and 15 frames respectively, if ``frames_per_clip=5``
    and ``step_between_clips=5``, the dataset size will be (2 + 3) = 5, where the first two
    elements will come from video 1, and the next three elements from video 2.
    Note that we drop clips which do not have exactly ``frames_per_clip`` elements, so not all
    frames in a video might be present.

    Args:
        root (str or ``pathlib.Path``): Root directory of the Kinetics Dataset.
            Directory should be structured as follows:
            .. code::

                root/
                â”œâ”€â”€ split
                â”‚   â”œâ”€â”€  class1
                â”‚   â”‚   â”œâ”€â”€  vid1.mp4
                â”‚   â”‚   â”œâ”€â”€  vid2.mp4
                â”‚   â”‚   â”œâ”€â”€  vid3.mp4
                â”‚   â”‚   â”œâ”€â”€  ...
                â”‚   â”œâ”€â”€  class2
                â”‚   â”‚   â”œâ”€â”€   vidx.mp4
                â”‚   â”‚    â””â”€â”€ ...

            Note: split is appended automatically using the split argument.
        frames_per_clip (int): number of frames in a clip
        num_classes (int): select between Kinetics-400 (default), Kinetics-600, and Kinetics-700
        split (str): split of the dataset to consider; supports ``"train"`` (default) ``"val"`` ``"test"``
        frame_rate (float): If omitted, interpolate different frame rate for each clip.
        step_between_clips (int): number of frames between each clip
        transform (callable, optional): A function/transform that takes in a TxHxWxC video
            and returns a transformed version.
        download (bool): Download the official version of the dataset to root folder.
        num_workers (int): Use multiple workers for VideoClips creation
        num_download_workers (int): Use multiprocessing in order to speed up download.
        output_format (str, optional): The format of the output video tensors (before transforms).
            Can be either "THWC" or "TCHW" (default).
            Note that in most other utils and datasets, the default is actually "THWC".

    Returns:
        tuple: A 3-tuple with the following entries:

            - video (Tensor[T, C, H, W] or Tensor[T, H, W, C]): the `T` video frames in torch.uint8 tensor
            - audio(Tensor[K, L]): the audio frames, where `K` is the number of channels
              and `L` is the number of points in torch.float tensor
            - label (int): class of the video clip

    Raises:
        RuntimeError: If ``download is True`` and the video archives are already extracted.
    zChttps://s3.amazonaws.com/kinetics/400/{split}/k400_{split}_path.txtzChttps://s3.amazonaws.com/kinetics/600/{split}/k600_{split}_path.txtzMhttps://s3.amazonaws.com/kinetics/700_2020/{split}/k700_2020_{split}_path.txt©Ú400Ú600Ú700z=https://s3.amazonaws.com/kinetics/400/annotations/{split}.csvz=https://s3.amazonaws.com/kinetics/600/annotations/{split}.csvzBhttps://s3.amazonaws.com/kinetics/700_2020/annotations/{split}.csvr#   ÚtrainNr   ©ÚaviÚmp4Fr   ÚTCHWÚrootÚframes_per_clipÚnum_classesÚsplitÚ
frame_rateÚstep_between_clipsÚ	transformÚ
extensions.ÚdownloadÚnum_download_workersÚnum_workersÚ_precomputed_metadataÚ_video_widthÚ_video_heightÚ_video_min_dimensionÚ_audio_samplesÚ_audio_channelsÚ_legacyÚoutput_formatr   c                 óz  •— t          |dg d¢¬¦  «        | _        || _        |
| _        || _        || _        |r"|| _        d| _        d}|	rt          d¦  «        ‚n3t          j
        ||¦  «        | _        t          |dg d¢¬¦  «        | _        |	r|                      ¦   «          t          ¦   «                              | j        ¦  «         t          | j        ¦  «        \  | _        }t!          | j        ||d ¬	¦  «        | _        d
„ | j        D ¦   «         }t%          ||||||||||||¬¦  «        | _        || _        d S )Nr-   r"   )ÚargÚvalid_valuesÚunknownÚTHWCz2Cannot download the videos using legacy_structure.r.   )r&   ÚvalÚtest)Úis_valid_filec                 ó   — g | ]
}|d          ‘ŒS )r   © )Ú.0Úxs     r   ú
<listcomp>z%Kinetics.__init__.<locals>.<listcomp>‹   s   € Ð1Ð1Ð1˜q�a˜”dÐ1Ð1Ð1r   )r5   r7   r8   r9   r:   r;   r=   )r   r-   r2   r4   r+   r<   Úsplit_folderr.   Ú
ValueErrorr   ÚjoinÚdownload_and_process_videosÚsuperÚ__init__r   Úclassesr   Úsamplesr   Úvideo_clipsr1   )Úselfr+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Úclass_to_idxÚ
video_listÚ	__class__s                         €r   rP   zKinetics.__init__[   sr  ø€ õ0 *¨+¸=ÐWlÐWlÐWlÐmÑmÔmˆÔØ$ˆŒØ$8ˆÔ!àˆŒ	ØˆŒàð 	cØ $ˆDÔØ"ˆDŒJØ"ˆMØð WÝ Ð!UÑVÔVÐVðWõ !%¤	¨$°Ñ 6Ô 6ˆDÔÝ'¨°7ÐIaÐIaÐIaÐbÑbÔbˆDŒJàð 	/Ø×,Ò,Ñ.Ô.Ð.å‰Œ×Ò˜œÑ#Ô#Ð#å%1°$Ô2CÑ%DÔ%DÑ"ˆŒ�lÝ# DÔ$5°|ÀZÐ_cÐdÑdÔdˆŒØ1Ð1 D¤LÐ1Ñ1Ô1ˆ
Ý%ØØØØØ!Ø#Ø%Ø'Ø!5Ø)Ø+Ø'ð
ñ 
ô 
ˆÔð #ˆŒˆˆr   c                 óV   — |                       ¦   «          |                      ¦   «          dS )zEDownloads all the videos to the _root_ folder in the expected format.N)Ú_download_videosÚ_make_ds_structure©rT   s    r   rN   z$Kinetics.download_and_process_videosœ   s,   € à×ÒÑÔÐØ×ÒÑ!Ô!Ð!Ð!Ð!r   c                 ó  — t          j        | j        ¦  «        rdS t          j        | j        d¦  «        }t          j        | j        d¦  «        }| j        | j                                      | j        ¬¦  «        }t          j        |t          j	        |¦  «        ¦  «        }t          |¦  «        st          ||¦  «         t          |¦  «        5 }d„ |                     ¦   «                              ¦   «         D ¦   «         }ddd¦  «         n# 1 swxY w Y   | j        dk    r|D ]}t!          ||| j        ¦  «         ŒdS t#          t$          || j        ¦  «        }t'          | j        ¦  «        }	|	                     ||¦  «         dS )a  download tarballs containing the video to "tars" folder and extract them into the _split_ folder where
        split is one of the official dataset splits.

        Raises:
            RuntimeError: if download folder exists, break to prevent downloading entire dataset again.
        NÚtarsÚfiles©r.   c                 óP   — g | ]#}t           j                             |d ¬¦  «        ‘Œ$S )z/,:)Úsafe)ÚurllibÚparseÚquote)rH   r   s     r   rJ   z-Kinetics._download_videos.<locals>.<listcomp>²   s-   € ÐiÐiÐiÈ�vœ|×1Ò1°$¸UÐ1ÑCÔCÐiÐiÐir   r   )r   ÚexistsrK   rM   r+   Ú	_TAR_URLSr-   Úformatr.   Úbasenamer   r   ÚopenÚreadÚ
splitlinesr4   r   r   r   r   Úmap)
rT   Útar_pathÚfile_list_pathÚ	split_urlÚsplit_url_filepathÚfileÚlist_video_urlsr   ÚpartÚpoolprocs
             r   rY   zKinetics._download_videos¡   sÅ  € õ Œ;�tÔ(Ñ)Ô)ð 	ØˆFÝ”9˜TœY¨Ñ/Ô/ˆÝœ 4¤9¨gÑ6Ô6ˆà”N 4Ô#3Ô4×;Ò;À$Ä*Ð;ÑMÔMˆ	Ý!œY ~µt´}ÀYÑ7OÔ7OÑPÔPÐÝÐ1Ñ2Ô2ð 	4Ý˜ NÑ3Ô3Ð3ÝÐ$Ñ%Ô%ð 	j¨ØiÐiÐPT×PYÒPYÑP[ÔP[×PfÒPfÑPhÔPhÐiÑiÔiˆOð	jð 	jð 	jñ 	jô 	jð 	jð 	jð 	jð 	jð 	jð 	jøøøð 	jð 	jð 	jð 	jð Ô$¨Ò)Ð)Ø'ð Pð P�Ý,¨T°8¸TÔ=NÑOÔOÐOÐOðPð Põ �8 X¨tÔ/@ÑAÔAˆDÝ˜DÔ5Ñ6Ô6ˆHØ�LŠL˜˜Ñ/Ô/Ð/Ð/Ð/s   Ã1DÄDÄDc           
      ó  — t          j        | j        d¦  «        }t          t          j        || j        › d�¦  «        ¦  «        s9t          | j        | j                                      | j        ¬¦  «        |¦  «         t          j        || j        › d�¦  «        }d}t          |¦  «        5 }t          j        |¦  «        }|D �])}|                     |d         t          |d         ¦  «        t          |d         ¦  «        ¬¦  «        }|d	                              d
d¦  «                             dd¦  «                             dd¦  «                             dd¦  «        }t          j        t          j        | j        |¦  «        d¬¦  «         t          j        | j        |¦  «        }	t          j        |	¦  «        r.t          j        |	t          j        | j        ||¦  «        ¦  «         �Œ+	 ddd¦  «         dS # 1 swxY w Y   dS )uü   move videos from
        split_folder/
            â”œâ”€â”€ clip1.avi
            â”œâ”€â”€ clip2.avi

        to the correct format as described below:
        split_folder/
            â”œâ”€â”€ class1
            â”‚   â”œâ”€â”€ clip1.avi

        Úannotationsz.csvr_   z{ytid}_{start:06}_{end:06}.mp4Ú
youtube_idÚ
time_startÚtime_end)ÚytidÚstartÚendÚlabelú Ú_ú'Ú ú(ú)T)Úexist_okN)r   rM   r+   r   r.   r   Ú_ANNOTATION_URLSr-   rg   ri   ÚcsvÚ
DictReaderÚintÚreplaceÚosÚmakedirsrK   Úisfile)
rT   Úannotation_pathrv   Úfile_fmtstrÚcsvfileÚreaderÚrowÚfr}   Údownloaded_files
             r   rZ   zKinetics._make_ds_structure¼   s'  € õ œ) D¤I¨}Ñ=Ô=ˆÝ�tœy¨¸T¼ZÐ:MÐ:MÐ:MÑNÔNÑOÔOð 	lÝ˜Ô.¨tÔ/?Ô@×GÒGÈdÌjÐGÑYÔYÐ[jÑkÔkÐkÝ”i °D´JÐ1DÐ1DÐ1DÑEÔEˆà6ˆÝ�+ÑÔð 	 'Ý”^ GÑ,Ô,ˆFØð ñ �Ø×&Ò&Ø˜\Ô*Ý˜c ,Ô/Ñ0Ô0Ý˜C 
œOÑ,Ô,ð 'ñ ô �ð
 ˜Gœ×,Ò,¨S°#Ñ6Ô6×>Ò>¸sÀBÑGÔG×OÒOÐPSÐUWÑXÔX×`Ò`ÐadÐfhÑiÔi�Ý”�DœI dÔ&7¸Ñ?Ô?È$ÐOÑOÔOÐOÝ"&¤)¨DÔ,=¸qÑ"AÔ"A�Ý”;˜Ñ/Ô/ð Ý”JØ'Ýœ	 $Ô"3°U¸AÑ>Ô>ñô ð ùðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Â,EG<Ç<H ÈH c                 ó   — | j         j        S r   )rS   Úmetadatar[   s    r   r•   zKinetics.metadataß   s   € àÔÔ(Ð(r   c                 ó4   — | j                              ¦   «         S r   )rS   Ú	num_clipsr[   s    r   Ú__len__zKinetics.__len__ã   s   € ØÔ×)Ò)Ñ+Ô+Ð+r   Úidxc                 ó¨   — | j                              |¦  «        \  }}}}| j        |         d         }| j        �|                      |¦  «        }|||fS )Nr   )rS   Úget_cliprR   r1   )rT   r™   ÚvideoÚaudioÚinfoÚ	video_idxr}   s          r   Ú__getitem__zKinetics.__getitem__æ   sX   € Ø(,Ô(8×(AÒ(AÀ#Ñ(FÔ(FÑ%ˆˆu�d˜IØ”˜YÔ'¨Ô*ˆàŒ>Ð%Ø—N’N 5Ñ)Ô)ˆEà�e˜UÐ"Ð"r   )r#   r&   Nr   Nr'   Fr   r   Nr   r   r   r   r   Fr*   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rf   r…   r   Ústrr   rˆ   r
   r   r   Úboolr	   r   rP   rN   rY   rZ   Úpropertyr•   r˜   r   r    Ú__classcell__)rW   s   @r   r!   r!      sV  ø€ € € € € ð7ð 7ðt UØTØ^ðð €Ið OØNØSðð Ðð !ØØ$(Ø"#Ø(,Ø&4ØØ$%ØØ:>ØØØ$%ØØ ØØ#ð)?#ð ?#à�C˜�IÔð?#ð ð?#ð ð	?#ð
 ð?#ð ˜S”Mð?#ð  ð?#ð ˜HÔ%ð?#ð ˜#˜s˜(”Oð?#ð ð?#ð "ð?#ð ð?#ð  (¨¨S°#¨X¬Ô7ð?#ð ð?#ð ð?#ð  "ð!?#ð" ð#?#ð$ ð%?#ð& ð'?#ð( ð)?#ð* 
ð+?#ð ?#ð ?#ð ?#ð ?#ð ?#ðB"ð "ð "ð "ð
0ð 0ð 0ð 0ð6!ð !ð !ð !ðF ð)˜$˜s C˜xœ.ð )ð )ð )ñ „Xð)ð,˜ð ,ð ,ð ,ð ,ð#˜sð # u¨V°V¸SÐ-@Ô'Að #ð #ð #ð #ð #ð #ð #ð #r   r!   )"r†   rŠ   rb   Ú	functoolsr   Úmultiprocessingr   r   Úpathlibr   Útypingr   r   r	   r
   r   r   Útorchr   Úfolderr   r   Úutilsr   r   r   r   Úvideo_utilsr   Úvisionr   r¥   r   r!   rG   r   r   ú<module>r²      s‹  ðØ 
€
€
€
Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >à Ð Ð Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ø #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !ð;�e˜C ˜IÔ&ð ;°5¸¸d¸Ô3Cð ;È3ð ;ÐSWð ;ð ;ð ;ð ;ðW#ð W#ð W#ð W#ð W#ˆ}ñ W#ô W#ð W#ð W#ð W#r   