ó
    qyüi/  ã            
       óR  • S r SSKrSSKrSSKJr  SSKJr  SSKJ	r	J
r
Jr  SSKJrJrJrJr  SSKJrJr  SS	KJrJrJrJrJr  \" 5       (       a  SSKrSS
KJr  \R<                  " \5      r S r!  SSSS\"S-  S\"S-  S\"\-  S-  4S jjr# " S S\SS9r$\ " S S\5      5       r%S/r&g)z%Image processor class for LayoutLMv2.é    Né   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_imagesÚto_pil_image)ÚChannelDimensionÚ
ImageInputÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringÚis_pytesseract_availableÚloggingÚrequires_backends)Ú
functionalc                 óž   • [        SU S   U-  -  5      [        SU S   U-  -  5      [        SU S   U-  -  5      [        SU S   U-  -  5      /$ )Niè  r   é   é   r   )Úint)ÚboxÚwidthÚheights      Úw/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/layoutlmv2/image_processing_layoutlmv2.pyÚnormalize_boxr   *   s`   € äˆD�C˜‘F˜U‘NÑ#Ó$ÜˆD�C˜‘F˜V‘OÑ$Ó%ÜˆD�C˜‘F˜U‘NÑ#Ó$ÜˆD�C˜‘F˜V‘OÑ$Ó%ð	ð ó    Úimageznp.ndarray | torch.TensorÚlangÚtesseract_configÚinput_data_formatc                 óÂ  • [        [        S/5        [        U S5      (       a  U R                  5       R	                  5       n O5[        U [        R                  5      (       d  [        R                  " U 5      n Ub  UOSn[        XS9nUR                  u  pV[        R                  " XASUS9nUS   US   US	   US
   US   4u  p‰p«n[        U5       VVs/ s H  u  pÞUR                  5       (       a  M  UPM      nnn[        U5       VVs/ s H  u  pÞXß;  d  M  UPM     nnn[        U	5       VVs/ s H  u  nnXß;  d  M  UPM     n	nn[        U
5       VVs/ s H  u  nnXß;  d  M  UPM     n
nn[        U5       VVs/ s H  u  nnXß;  d  M  UPM     nnn[        U5       VVs/ s H  u  nnXß;  d  M  UPM     nnn/ n[        XšX¼5       H%  u  nnnnUUUU-   UU-   /nUR!                  U5        M'     / nU H  nUR!                  [#        UXV5      5        M      [%        U5      [%        U5      :X  d   S5       eUU4$ s  snnf s  snnf s  snnf s  snnf s  snnf s  snnf )zdApplies Tesseract OCR on a document image, and returns recognized words + normalized bounding boxes.ÚpytesseractÚcpuÚ ©r"   Údict)r    Úoutput_typeÚconfigÚtextÚleftÚtopr   r   z-Not as many words as there are bounding boxes)r   Úapply_tesseractÚhasattrr%   ÚnumpyÚ
isinstanceÚnpÚndarrayÚarrayr   Úsizer$   Úimage_to_dataÚ	enumerateÚstripÚzipÚappendr   Úlen)r   r    r!   r"   Ú	pil_imageÚimage_widthÚimage_heightÚdataÚwordsr,   r-   r   r   ÚidxÚwordÚirrelevant_indicesÚcoordÚactual_boxesÚxÚyÚwÚhÚ
actual_boxÚnormalized_boxesr   s                            r   r.   r.   3   s;  € ô ”o¨ Ô7ô ˆu�e×ÑØ—	‘	“×!Ñ!Ó#‰Ü˜œrŸz™z×*Ñ*Ü—’˜“ˆà+;Ñ+GÑ'ÈRÐô ˜UÑH€IØ )§¡Ñ€KÜ×$Ò$ YÀvÐVfÑg€DØ&*¨6¡l°D¸±LÀ$ÀuÁ+ÈtÐT[É}Ð^bÐckÑ^lÐ&lÑ#€E�˜Vô 09¸Ô/?ÔTÒ/?¡) #ÀtÇzÁzÇ|Ÿ#Ñ/?ÐÑTÜ#,¨UÔ#3ÔUÒ#3‘i�c°sÑ7T�TÑ#3€EÑUÜ$-¨d¤OÔU¢O‘j�c˜5°sÑ7T�E¡O€DÑUÜ#,¨S¤>Ô
S¢>‘Z�S˜%°SÑ5R�5¡>€CÑ
SÜ%.¨uÔ%5ÔWÒ%5‘z�s˜E¸Ñ9V�UÑ%5€EÑWÜ&/°Ô&7ÔYÒ&7™
˜˜U¸3Ñ;X�eÑ&7€FÑYð €LÜ˜$ UÖ3‰
ˆˆ1ˆa�Ø˜˜A ™E 1 q¡5Ð)ˆ
Ø×Ñ˜JÖ'ñ 4ð
 ÐÛˆØ×Ñ¤¨c°;Ó MÖNñ ô ˆu‹:œÐ-Ó.Ó.Ð_Ð0_Ó_Ð.àÐ"Ð"Ð"ùó) UùÛUùÛUùÛ
SùÛWùÛYsH   ÃH=Ã2H=Ä	IÄIÄ/I	Ä?I	ÅIÅ&IÅ=IÆIÆ$IÆ4Ic                   óD   • \ rS rSr% Sr\\S'   \S-  \S'   \S-  \S'   Srg)ÚLayoutLMv2ImageProcessorKwargséb   aÏ  
apply_ocr (`bool`, *optional*, defaults to `self.apply_ocr`):
    Whether to apply the Tesseract OCR engine to get words + normalized bounding boxes. Can be overridden by
    the `apply_ocr` parameter in the `preprocess` method.
ocr_lang (`str`, *optional*):
    The language, specified by its ISO code, to be used by the Tesseract OCR engine. By default, English is
    used. Can be overridden by the `ocr_lang` parameter in the `preprocess` method.
tesseract_config (`str`, *optional*):
    Any additional custom configuration flags that are forwarded to the `config` parameter when calling
    Tesseract. For example: '--psm 6'. Can be overridden by the `tesseract_config` parameter in the
    `preprocess` method.
Ú	apply_ocrNÚocr_langr!   © )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚboolÚ__annotations__ÚstrÚ__static_attributes__rQ   r   r   rM   rM   b   s"   ‡ ñð ƒOØ�D‰jÓØ˜D‘jÖ r   rM   F)Útotalc                   óü   ^ • \ rS rSr\r\R                  rSSS.r	Sr
SrSrSrSrS\\   4U 4S jjr\S	\S\\   S
\4U 4S jj5       r   SS	\S   S\S\SSS\S-  S\\-  S-  S\S\S-  S\S-  S
\4S jjrSrU =r$ )ÚLayoutLMv2ImageProcessoréu   éà   )r   r   NTr&   Úkwargsc                 ó&   >• [         TU ]  " S0 UD6  g )NrQ   )ÚsuperÚ__init__)Úselfr`   Ú	__class__s     €r   rc   Ú!LayoutLMv2ImageProcessor.__init__€   s   ø€ Ü‰ÒÑ"˜6Ó"r   ÚimagesÚreturnc                 ó&   >• [         TU ]  " U40 UD6$ )N)rb   Ú
preprocess)rd   rg   r`   re   s      €r   rj   Ú#LayoutLMv2ImageProcessor.preprocessƒ   s   ø€ ä‰wÒ! &Ñ3¨FÑ3Ð3r   ztorch.TensorÚ	do_resizer5   Úresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚdisable_groupingÚreturn_tensorsrO   rP   r!   c
                 ó˜  • U(       aŠ  [        U S5        / n/ nU Ht  nUR                  (       a  [        R                  S5        [	        UR                  5       X‰[        R                  S9u  pïUR                  U5        UR                  U5        Mv     [        XS9u  nn0 nUR                  5        H"  u  nnU(       a  U R                  UX4S9nUUU'   M$     [        UU5      n[        UUS9u  nn0 nUR                  5        H  u  nnUR                  S5      nUUU'   M     [        UU5      n[        SU0US9nU(       a
  WUS	'   WUS
'   U$ )Nr$   z]apply_ocr can only be performed on cpu. Tensors will be transferred to cpu before processing.r'   )rn   )r   r5   rm   r   Úpixel_values)r?   Útensor_typer@   Úboxes)r   Úis_cudaÚloggerÚwarning_oncer.   r%   r	   ÚFIRSTr:   r   ÚitemsÚresizer   Úflipr   )rd   rg   rl   r5   rm   rn   ro   rO   rP   r!   r`   Úwords_batchÚboxes_batchr   r@   rs   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedÚshapeÚstacked_imagesÚresized_imagesÚprocessed_images_groupedÚprocessed_imagesr?   s                            r   Ú_preprocessÚ$LayoutLMv2ImageProcessor._preprocess‡   sk  € ö Ü˜d MÔ2ØˆKØˆKÛ�Ø—=—=Ü×'Ñ'Øwôô  /Ø—I‘I“K ÔO_×OeÑOeñ ‘�ð ×"Ñ" 5Ô)Ø×"Ñ" 5Ö)ñ  ô 0EÀVÑ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%§¡°>È Ð!`�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆô 0EÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>à+×0Ñ0°Ó3ˆNØ.<Ð$ UÓ+ñ &<ô
 *Ð*BÐDXÓYÐä .Ð2BÐ!CÐQ_Ñ`ˆæØ'ˆD�‰MØ'ˆD�‰Màˆr   rQ   )TNN)rR   rS   rT   rU   rM   Úvalid_kwargsr   ÚBILINEARrm   r5   Úrescale_factorrl   rO   rP   r!   r   rc   r   r
   r   rj   ÚlistrW   r   rY   r   r…   rZ   Ú__classcell__)re   s   @r   r]   r]   u   s  ø† à1€LØ!×*Ñ*€HØ CÑ(€DØ€NØ€IØ€IØ€HØÐð# Ð(FÑ!G÷ #ð ð4 ð 4°vÐ>\Ñ7]ð 4Ðbnö 4ó ð4ð Ø#Ø'+ñ7à�^Ñ$ð7ð ð7ð ð	7ð
 Lð7ð  ™+ð7ð ˜jÑ(¨4Ñ/ð7ð ð7ð ˜‘*ð7ð  ™*ð7ð 
÷7ó 7r   r]   )NN)'rV   r0   r2   ÚtorchÚimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r   r   Úimage_utilsr	   r
   r   r   Úprocessing_utilsr   r   Úutilsr   r   r   r   r   r$   Útorchvision.transforms.v2r   ÚtvFÚ
get_loggerrR   ru   r   rY   r.   rM   r]   Ú__all__rQ   r   r   Ú<module>r—      sÔ   ðñ ,ã Û å ;Ý 2ß SÑ Sß UÓ Uß 4÷õ ñ ×ÑÛå 7ð 
×	Ò	˜HÓ	%€òð $(Ø7;ñ	,#Ø&ð,#à
�‰*ð,#ð ˜D‘jð,#ð Ð-Ñ-°Ñ4õ	,#ô^! \¸ò !ð& ôHÐ1ó Hó ðHðV &Ð
&�r   