o
    `)i+                     @   s   d dl 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mZ ddlm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DictListOptionalTupleUnion   )default_loader)check_integritydownload_and_extract_archivedownload_urlverify_str_arg)VisionDatasetc                       s   e Zd ZdZdZddddZddd	d
ddddZddddZdZddde	fde
eef dedededee dee dedeegef ddf fdd Zdefd!d"Zd-d#d$Zd%ed&e
eef defd'd(Zdefd)d*Zdefd+d,Z  ZS )._LFWzlfw-pyz http://vis-www.cs.umass.edu/lfw/)Zlfwzlfw.tgzZ a17d05bd522c52d84eca14327a23d494)Zlfw_funneledzlfw-funneled.tgzZ 1b42dfed7d15c9b2dd63d5e5840c86ad)zlfw-deepfunneledzlfw-deepfunneled.tgzZ 68331da3eb755a505a502b5aacb3c201)originalfunneledZdeepfunneledZ 9f1ba174e4e1c508ff7cdf10ac338a7dZ 5132f7440eb68cf58910c8a45a2ac10bZ 4f27cbf15b2da4a85c1907eb4181ad21Z 450f0863dd89e85e73936a6d71a3474bZ e4bf5be0a43b5dcd9dc5ccfcb8fb19c5Z 54eaac34beb6d042ed3a7d883e247a21Z a6d0a479bd074669f656265a6e693f6d)z	pairs.txtzpairsDevTest.txtzpairsDevTrain.txtz
people.txtzpeopleDevTest.txtzpeopleDevTrain.txtlfw-names.txt ZDevTrainZDevTest10foldtraintestr   NFrootsplit	image_setview	transformtarget_transformdownloadloaderreturnc	           
         s   t  jtj|| j||d t| d| j	 | _
| j| j
 \}	| _| _t| dddg| _t| dg d| _| j | j| j  d| _g | _|rR|   |  sZtd	tj| j|	| _|| _d S )
N)r   r   r   r   peoplepairsr   r   z.txtzHDataset not found or corrupted. You can use download=True to download it)super__init__ospathjoinbase_folderr   lower	file_dictkeysr   filenamemd5r   r   
annot_filelabels_filedatar    _check_integrityRuntimeErrorr   
images_dir_loader)
selfr   r   r   r   r   r   r    r!   r5   	__class__ d/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/torchvision/datasets/lfw.pyr&       s   
z_LFW.__init__c                 C   st   t tj| j| j| j}t tj| j| j| j| j }|r!|s#dS | j	dkr8t tj| j| j
| j| j
 S dS )NFr#   T)r   r'   r(   r)   r   r.   r/   r1   	checksumsr   names)r7   Zst1Zst2r:   r:   r;   r3   >   s    
 z_LFW._check_integrityc                 C   st   |   rd S | j | j }t|| j| j| jd t| j | j | j | jdkr8t| j | j	 | j d S d S )N)r.   r/   r#   )
r3   download_url_prefixr.   r   r   r/   r   r1   r   r=   )r7   urlr:   r:   r;   r    G   s   
z_LFW.downloadidentitynoc                 C   s$   t j| j|| dt|ddS )N_Z04dz.jpg)r'   r(   r)   r5   int)r7   r@   rA   r:   r:   r;   	_get_pathP   s   $z_LFW._get_pathc                 C   s   d| j  d| j S )NzAlignment: z
Split: )r   r   r7   r:   r:   r;   
extra_reprS   s   z_LFW.extra_reprc                 C   s
   t | jS )N)lenr2   rE   r:   r:   r;   __len__V   s   
z_LFW.__len__)r"   N)__name__
__module____qualname__r*   r>   r,   r<   r0   r=   r   r	   strr   r   r   boolr   r&   r3   r    rC   rD   rF   rH   __classcell__r:   r:   r8   r;   r   
   sZ    	
	

		r   c                       s   e Zd ZdZdddddefdededed	ee d
ee dedeege	f ddf fddZ
deee ee f fddZdeeef fddZdedee	e	f fddZdef fddZ  ZS )	LFWPeoplea  `LFW <http://vis-www.cs.umass.edu/lfw/>`_ Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory
            ``lfw-py`` exists or will be saved to if download is set to True.
        split (string, optional): The image split to use. Can be one of ``train``, ``test``,
            ``10fold`` (default).
        image_set (str, optional): Type of image funneling to use, ``original``, ``funneled`` or
            ``deepfunneled``. Defaults to ``funneled``.
        transform (callable, optional): A function/transform that takes in a PIL image or torch.Tensor, depends on the given loader,
            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.
        loader (callable, optional): A function to load an image given its path.
            By default, it uses PIL as its image loader, but users could also pass in
            ``torchvision.io.decode_image`` for decoding image data into tensors directly.
    r   r   NFr   r   r   r   r   r    r!   r"   c              
      s:   t  j|||d||||d |  | _|  \| _| _d S )Nr#   r!   )r%   r&   _get_classesclass_to_idx_get_peopler2   targetsr7   r   r   r   r   r   r    r!   r8   r:   r;   r&   p   s   

zLFWPeople.__init__c                 C   s  g g }}t tj| j| jn}| }| jdkr"t|d dfnd\}}t	|D ]I}t|| }dd ||d || d  D }	||d 7 }t
|	D ]%\}
\}}t	dt|d D ]}| ||}|| || j|  q\qMq*W d    ||fS 1 sw   Y  ||fS )Nr   r   r
   )r
   r   c                 S      g | ]	}|  d qS 	stripr   .0liner:   r:   r;   
<listcomp>       z)LFWPeople._get_people.<locals>.<listcomp>)openr'   r(   r)   r   r1   	readlinesr   rC   range	enumeraterD   appendrR   )r7   r2   rT   flinesn_foldssfoldZn_linesr#   ir@   Znum_imgsnumimgr:   r:   r;   rS      s(   
""

zLFWPeople._get_peoplec                 C   sb   t tj| j| j}| }dd |D }W d    n1 s!w   Y  dd t|D }|S )Nc                 S   s   g | ]
}|   d  qS )r   rY   r[   r:   r:   r;   r^      s    z*LFWPeople._get_classes.<locals>.<listcomp>c                 S   s   i | ]\}}||qS r:   r:   )r\   rj   namer:   r:   r;   
<dictcomp>   s    z*LFWPeople._get_classes.<locals>.<dictcomp>)r`   r'   r(   r)   r   r=   ra   rc   )r7   re   rf   r=   rR   r:   r:   r;   rQ      s   zLFWPeople._get_classesindexc                 C   sJ   |  | j| }| j| }| jdur| |}| jdur!| |}||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: Tuple (image, target) where target is the identity of the person.
        N)r6   r2   rT   r   r   )r7   ro   rl   targetr:   r:   r;   __getitem__   s   




zLFWPeople.__getitem__c                    s   t   dt| j  S )Nz
Classes (identities): )r%   rF   rG   rR   rE   r8   r:   r;   rF      s   zLFWPeople.extra_repr)rI   rJ   rK   __doc__r   rL   r   r   rM   r   r&   r   r   rC   rS   r   rQ   rq   rF   rN   r:   r:   r8   r;   rO   Z   s:    	rO   c                       s   e Zd ZdZdddddefdededed	ee d
ee dedeege	f ddf fddZ
dedeeeeef  eeeef  ee f fddZdedee	e	ef fddZ  ZS )LFWPairsa  `LFW <http://vis-www.cs.umass.edu/lfw/>`_ Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory
            ``lfw-py`` exists or will be saved to if download is set to True.
        split (string, optional): The image split to use. Can be one of ``train``, ``test``,
            ``10fold``. Defaults to ``10fold``.
        image_set (str, optional): Type of image funneling to use, ``original``, ``funneled`` or
            ``deepfunneled``. Defaults to ``funneled``.
        transform (callable, optional): A function/transform that takes in a PIL image
            and returns a transformed version. E.g, ``transforms.RandomRotation``
        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.
        loader (callable, optional): A function to load an image given its path.
            By default, it uses PIL as its image loader, but users could also pass in
            ``torchvision.io.decode_image`` for decoding image data into tensors directly.

    r   r   NFr   r   r   r   r   r    r!   r"   c              
      s8   t  j|||d||||d | | j\| _| _| _d S )Nr$   rP   )r%   r&   
_get_pairsr5   
pair_namesr2   rT   rU   r8   r:   r;   r&      s   
zLFWPairs.__init__r5   c              	   C   s  g g g }}}t tj| j| j}| }| jdkr0|d d\}}t|t|}}n	dt|d }}d}	t	|D ]}
dd ||	|	|  D }dd ||	| |	d|   D }|	d| 7 }	|D ]1}| 
|d |d | 
|d |d d}}}||d |d f |||f || qg|D ]1}| 
|d |d | 
|d |d	 d}}}||d |d f |||f || qq?W d    n1 sw   Y  |||fS )
Nr   r   rX   r
   c                 S   rV   rW   rY   r[   r:   r:   r;   r^      r_   z'LFWPairs._get_pairs.<locals>.<listcomp>c                 S   rV   rW   rY   r[   r:   r:   r;   r^      r_         )r`   r'   r(   r)   r   r1   ra   r   rC   rb   rD   rd   )r7   r5   ru   r2   rT   re   rf   rg   Zn_pairsrh   ri   Zmatched_pairsZunmatched_pairspairimg1img2Zsamer:   r:   r;   rt      s4   
"00
zLFWPairs._get_pairsro   c                 C   sl   | j | \}}| || |}}| j| }| jdur'| || |}}| jdur1| |}|||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: (image1, image2, target) where target is `0` for different indentities and `1` for same identities.
        N)r2   r6   rT   r   r   )r7   ro   ry   rz   rp   r:   r:   r;   rq      s   




zLFWPairs.__getitem__)rI   rJ   rK   rr   r   rL   r   r   rM   r   r&   r   r   rC   rt   rq   rN   r:   r:   r8   r;   rs      s6    	8$rs   )r'   pathlibr   typingr   r   r   r   r   r   r	   folderr   utilsr   r   r   r   Zvisionr   r   rO   rs   r:   r:   r:   r;   <module>   s    $PU