Ë
    éÓ^j´  ã                   ó´   — d Z ddl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 ddlmZ ddlmZ 	 	 	 	 dd	ed
eeeeef      dee   dedef
d„Z G d„ de«      Zy)zå A dataset reader that extracts images from folders

Folders are scanned recursively to find image files. Labels are based
on the folder hierarchy, just leaf folders by default.

Hacked together by / Copyright 2020 Ross Wightman
é    N)ÚDictÚListÚOptionalÚSetÚTupleÚUnion©Únatural_keyé   )Úload_class_map)Úget_img_extensions)ÚReaderÚfolderÚtypesÚclass_to_idxÚleaf_name_onlyÚsortc                 ót  — |st        d¬«      n
t        |«      }g }g }t        j                  | dd¬«      D ]ô  \  }}}	|| k7  r t        j                  j                  || «      nd}
|rt        j                  j                  |
«      n)|
j                  t        j                  j                  d«      }|	D ]w  }t        j                  j                  |«      \  }}|j                  «       |v sŒ8|j                  t        j                  j                  ||«      «       |j                  |«       Œy Œö |€Ct        |«      }t        t        |t        ¬«      «      }t!        |«      D ��ci c]  \  }}||“Œ
 }}}t#        ||«      D ��cg c]  \  }}||v sŒ|||   f‘Œ }}}|rt        |d„ ¬«      }||fS c c}}w c c}}w )	a   Walk folder recursively to discover images and map them to classes by folder names.

    Args:
        folder: root of folder to recursively search
        types: types (file extensions) to search for in path
        class_to_idx: specify mapping for class (folder name) to class index if set
        leaf_name_only: use only leaf-name of folder walk for class names
        sort: re-sort found images by name (for consistent ordering)

    Returns:
        A list of image and target tuples, class_to_idx mapping
    T)Úas_setF)ÚtopdownÚfollowlinksÚ Ú_)Úkeyc                 ó   — t        | d   «      S ©Nr   r	   )Úks    úp/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/data/readers/reader_image_folder.pyú<lambda>z)find_images_and_targets.<locals>.<lambda>7   s   € ÄkÐRSÐTUÑRVÓFW€ ó    )r   ÚsetÚosÚwalkÚpathÚrelpathÚbasenameÚreplaceÚsepÚsplitextÚlowerÚappendÚjoinÚlistÚsortedr
   Ú	enumerateÚzip)r   r   r   r   r   ÚlabelsÚ	filenamesÚrootÚsubdirsÚfilesÚrel_pathÚlabelÚfÚbaseÚextÚunique_labelsÚsorted_labelsÚidxÚcÚlÚimages_and_targetss                        r   Úfind_images_and_targetsrA      sŠ  € ñ& 49Ô dÕ+¼cÀ%»j€EØ€FØ€IÜ "§¡¨¸È4Ô Pò %Ñˆˆg�uØ59¸V²^”2—7‘7—?‘? 4¨Ô0È"ˆÙ.<”—‘× Ñ  Ô*À(×BRÑBRÔSU×SZÑSZ×S^ÑS^Ð`cÓBdˆØò 	%ˆAÜŸ™×(Ñ(¨Ó+‰IˆD�#Ø�y‰y‹{˜eÒ#Ø× Ñ ¤§¡§¡¨d°AÓ!6Ô7Ø—‘˜eÕ$ñ		%ð%ð Ðä˜F›ˆÜœV M´{ÔCÓDˆÜ-6°}Ó-E×F¡6 3¨˜˜3™ÐFˆÑFÜ;>¸yÈ&Ó;Q×g±4°1°aÐUVÐZfÒUf˜1˜l¨1™oÒ.ÐgÐÑgÙÜ#Ð$6Ñ<WÔXÐØ˜|Ð+Ð+ùó	 GùÛgs   Å"F.ÆF4Æ	F4c                   ó8   ‡ — e Zd Z	 	 dˆ fd„	Zd„ Zd„ Zdd„Zˆ xZS )ÚReaderImageFolderc           	      ó0  •— t         ‰| �  «        || _        d }|rt        ||«      }d }|r|j	                  d«      }t        |||¬«      \  | _        | _        t        | j                  «      dk(  r(t        d|› ddj                  t        «       «      › �«      ‚y )Nú;)r   r   r   z Found 0 images in subfolders of z!. Supported image extensions are z, )ÚsuperÚ__init__r3   r   ÚsplitrA   Úsamplesr   ÚlenÚRuntimeErrorr,   r   )Úselfr3   Ú	class_mapÚ	input_keyr   Ú
find_typesÚ	__class__s         €r   rG   zReaderImageFolder.__init__=   sª   ø€ ô 	‰ÑÔàˆŒ	ØˆÙÜ)¨)°TÓ:ˆLØˆ
ÙØ"Ÿ™¨Ó-ˆJÜ*AØØ%Øô+
Ñ'ˆŒ�dÔ'ô
 ˆt�|‰|Ó Ò!ÜØ2°4°&ð 92Ø26·)±)Ô<NÓ<PÓ2QÐ1RðTóUð Uð "r    c                 óB   — | j                   |   \  }}t        |d«      |fS )NÚrb)rI   Úopen)rL   Úindexr$   Útargets       r   Ú__getitem__zReaderImageFolder.__getitem__V   s&   € Ø—|‘| EÑ*‰ˆˆfÜ�D˜$Ó Ð'Ð'r    c                 ó,   — t        | j                  «      S )N)rJ   rI   )rL   s    r   Ú__len__zReaderImageFolder.__len__Z   s   € Ü�4—<‘<Ó Ð r    c                 óÈ   — | j                   |   d   }|r!t        j                  j                  |«      }|S |s*t        j                  j	                  || j
                  «      }|S r   )rI   r"   r$   r&   r%   r3   )rL   rT   r&   ÚabsoluteÚfilenames        r   Ú	_filenamezReaderImageFolder._filename]   sU   € Ø—<‘< Ñ& qÑ)ˆÙÜ—w‘w×'Ñ'¨Ó1ˆHð ˆñ Ü—w‘w—‘ x°·±Ó;ˆHØˆr    )r   N)FF)Ú__name__Ú
__module__Ú__qualname__rG   rV   rX   r\   Ú__classcell__)rP   s   @r   rC   rC   ;   s    ø„ ð
 Øõ	Uò2(ò!÷r    rC   )NNTT)Ú__doc__r"   Útypingr   r   r   r   r   r   Útimm.utils.miscr
   rM   r   Úimg_extensionsr   Úreaderr   ÚstrÚboolrA   rC   © r    r   ú<module>ri      s„   ðñó 
ß :× :å 'å %Ý .Ý ð
 48Ø'+Ø#Øñ&,Øð&,à˜˜d E¨3Ð.Ñ/Ñ0ð&,ð ˜t‘nð&,ð ð	&,ð
 ó&,ôR(˜õ (r    