
    jX                     j   d dl Z d dlmZ d dlZd dlmZ d dlmZmZ ddl	m
Z
 ddgZd	ad
eeef         ddfdZ	 	 	 	 	 ddej        d
eeef         dededededz  dedededej        fdZ	 	 	 	 	 ddeeef         dededz  dedededej        fdZ	 	 d deeef         dededz  dej        fdZdS )!    N)Any)anyascii)Image	ImageDraw   )get_fontsynthesize_pagesynthesize_kie_pageFentryreturnc                 z    t           s1t          | d                   dk    rt          j        d           da d S d S d S )Ngeometry   z@Polygons with larger rotations will lead to inaccurate renderingT)ROTATION_WARNINGlenloggingwarning)r   s    ]/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/doctr/utils/reconstitution.py_warn_rotationr      sN      E*$5 6 6! ; ;Z[[[    ; ;          ?   2   responsewh
draw_probafont_familysmoothing_factormin_font_sizemax_font_sizec	                    t          |d                   dk    r |d         \  \  }	}
\  }}|	|
f||
f||f|	|fg}n|d         }t          | \  }}t          t          t	          |          z                      t          t          t	          |          z                      t          t          t          |          z                      t          t          t          |          z                      f\  }	}
}}||	z
  }||
z
  }d|v r&d                    d |d         D                       }n|d         }	 t	          ||          }t          ||          }|                    |          dd         \  }}||k    s||k    rh||k    rbt          t          ||z            |          }t          ||          }|                    |          dd         \  }}||k    s||k    r||k    bn # t          $ r t          ||          }Y nw xY wt          j        dfd	          }t          j        |                              fd
|D             d           t          j        |           }	 	 |                    |	|
f||dd           n9# t           $ r, |                    |	|
ft#          |          |dd           Y nw xY wn'# t$          $ r t'          j        d|            Y nw xY w|rd|v r|d         n4t+          d |d         D                       t          |d                   z  }t          d|z            }d|z
  d	|f}|                    |	|
f||fg|d           t          |d          }|d}|                    |          dd         \  }}||z
  dz  } |
|z
  dz
  }!t          d	|!          }!|                    |	| z   |!f|||d           | S )Nr      words c              3   &   K   | ]}|d          V  dS )valueN ).0words     r   	<genexpr>z_synthesize.<locals>.<genexpr>:   s&      FFtT']FFFFFFr   r'   r   Lr   c           	          g | ]C\  }}t          t          |z                      t          t          |z                      fDS r(   )intround)r)   xyr   r   s      r   
<listcomp>z_synthesize.<locals>.<listcomp>L   sG    !]!]!]TQPQ3uQU||#4#4c%A,,6G6G"H!]!]!]r      )fill)r   r   r   lt)fontr4   anchorzCould not render word: 
confidencec              3   &   K   | ]}|d          V  dS )r8   Nr(   )r)   r   s     r   r+   z_synthesize.<locals>.<genexpr>]   s&      ==Q|_======r   )outlinewidth   z.2f)r   zipr.   r/   minmaxjoinr   getbbox
ValueErrorr   newr   DrawpolygontextUnicodeEncodeErrorr   	Exceptionr   r   sum	rectangle)"r   r   r   r   r   r   r   r    r!   xminyminxmaxymaxrE   x_coordsy_coords
word_widthword_height	word_text	font_sizer6   
text_widthtext_heightmaskdr8   pcolor	prob_font	prob_textprob_text_widthprob_text_heightprob_x_offsetprob_y_offsets"     ``                              r   _synthesizera      s    5""%*:%6"tltT$<$d|dD\J
# gHhE!c(mm#$$%%E!c(mm#$$%%E!c(mm#$$%%E!c(mm#$$%%	D$d J+K %HHFFuW~FFFFF		'N	
4]33	Y//"&,,y"9"9!A#">
KJ&&+*C*CUbIbIbC	,< <==}MMIK33D&*ll9&=&=ac&B#J J&&+*C*CUbIbIb  4 4 4]334 9S1a&!$$DN4  !]!]!]!]!]U\!]!]!]dg hhh 	x  A?	^FFD$<IdFSSSS! 	^ 	^ 	^FFD$<)!4!44iX\F]]]]]	^  ? ? ?=)==>>>>>?  j u$$ ,==eGn=====E'N@S@SS 	
 j !!q!Q	dD\D$<0%qIII["--	!''	,5,=,=i,H,H1,M)) $o5!;//!3A}--	}$m4iiV[dhiiiOsC    B4G5 5HH9J K 3K	K KK !K43K4ffffff?   pagec                    | d         \  }}t          j        d||fd          }| d         D ]}	t          |	d                   dk    r3|	d         D ])}
t          |	           t	          ||
|||||||	  	        }*N|	d         D ]4}
t          |	           |
d	         D ]}t	          |||||||||	  	        }5t          j        |t
          j        
          S )  Draw a the content of the element page (OCR response) on a blank page.

    Args:
        page: exported Page object to represent
        draw_proba: if True, draw words in colors to represent confidence. Blue: p=1, red: p=0
        font_family: family of the font
        smoothing_factor: factor to smooth the font size
        min_font_size: minimum font size
        max_font_size: maximum font size

    Returns:
        the synthesized page
    
dimensionsRGBr3   r3   r3   rZ   blockslinesr   )	r   r   r   r   r   r   r   r    r!   r$   dtype)r   rC   r   r   ra   nparrayuint8)rd   r   r   r   r    r!   r   r   r   blockliner*   s               r   r	   r	   q   s7   , DAqyAo>>>Hh  uW~""g  u%%%&%) +%5"/"/
 
 
 g  u%%% M  D*!)"#-$/)9&3&3
  
  
 HH 8HBH----r   c           
         | d         \  }}t          j        d||fd          }| d                                         D ]+}|D ]&}t          |           t	          ||||||          }',t          j        |t
          j                  S )rf   rg   rh   ri   rj   predictions)r   r   r   r   r   r   rm   )r   rC   valuesr   ra   ro   rp   rq   )rd   r   r   r   r   r   ru   
predictions           r   r
   r
      s    & DAqyAo>>>H M*1133 
 
% 		 		J:&&&"! %'  HH		 8HBH----r   )FNr   r   r   )FNrb   rc   r   )FN)r   typingr   numpyro   r   PILr   r   fontsr   __all__r   dictstrr   r.   boolfloatra   ndarrayr	   r
   r(   r   r   <module>r      s)  
                                       3
4   $sCx.  T         ""R RkRS>R R 	R
 R tR R R R [R R R Rn "":. :.
sCx.:.:. t:. 	:.
 :. :. Z:. :. :. :.~ "". ".
sCx.".". t". Z	". ". ". ". ". ".r   