
    jJ                         d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZ ddlmZ 	 	 	 	 dd
edededz  deeeef         dz  deeeef         dz  dej        fdZ G d de          Z G d de          ZdS )    N)Callable)Any)Image	ImageDraw)tensor_from_pil)get_font   )AbstractDataset    text	font_sizefont_familybackground_color
text_colorreturnc                    |dn|}|dn|}t          ||          }|                    |           \  }}}}	||z
  |	|z
  }}
t          t          d|z                      t          t          d|
z                      }}t	          |           dk    r||fnt          ||          t          ||          f}t          j        d|ddd         |	          }t          j	        |          }t          t          |d         |
z
  d
z                      t          t          |d         |z
  d
z                      f}|
                    || ||           |S )aj  Generate a synthetic text image

    Args:
        text: the text to render as an image
        font_size: the size of the font
        font_family: the font family (has to be installed on your system)
        background_color: background color of the final image
        text_color: text color on the final image

    Returns:
        PIL image of the text
    N)r   r   r   )   r   r   g?g?   RGB)colorr	   r   )fontfill)r   getbboxintroundlenmaxr   newr   Drawr   )r   r   r   r   r   r   lefttoprightbottomtext_wtext_hhwimg_sizeimgdtext_poss                     `/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/doctr/datasets/generator/base.pysynthesize_text_imgr.      sV   & %5$<yyBR$.$6JJK++D#||D11D#ufT\6C<FFuS6\""##SsV|)<)<%=%=qATQ1vvSAYYAq		,BH
)E8DDbD>1A
B
B
BCsA E8A;/145566E8A;QWCW[\B\<]<]8^8^_HFF8T:F666J    c                       e Zd Z	 	 	 	 ddedededeee         z  dz  deegef         dz  deeege	eef         f         dz  d	dfd
Z
d	efdZded	e	eef         fdZdS )_CharacterGeneratorFNvocabnum_samplescache_samplesr   img_transformssample_transformsr   c                 ~    | _         | _        t          |t                    r|n|g _        t          |t                    r; j        D ]3}	 t          |d          }# t          $ r t          d|           w xY w| _        | _	        g  _
        |r' fdt           j                   D              _
        d S d S )N
   unable to locate font: c                 P    g | ]"\  }}j         D ]}t          ||           |f#S r   )r   r.   ).0idxcharr   selfs       r-   
<listcomp>z0_CharacterGenerator.__init__.<locals>.<listcomp>R   sY       C ,   %Tt<<<cB   r/   )r2   _num_samples
isinstancelistr   r   OSError
ValueErrorr5   r6   _data	enumerate)	r@   r2   r3   r4   r   r5   r6   r   _s	   `        r-   __init__z_CharacterGenerator.__init__:   s    
'*4[$*G*GZ;;k]k4(( 	G( G GG r**AA G G G$%Et%E%EFFFG,!2(*
 	   !*4:!6!6  DJJJ	 	s   AA<c                     | j         S NrB   r@   s    r-   __len__z_CharacterGenerator.__len__X         r/   indexc                 <   t          | j                  dk    r(|t          | j                  z  }| j        |         \  }}nJ|t          | j                  z  }t          | j        |         t	          j        | j                            }t          |          }||fS Nr   r<   )r   rG   r2   r.   randomchoicer   r   )r@   rQ   r>   pil_imgtargetr*   s         r-   _read_samplez _CharacterGenerator._read_sample[   s    tz??Q#dj//)C"joOGVVS__,F)$*V*<&-X\XhJiJijjjGg&&F{r/   FNNN)__name__
__module____qualname__strr   boolrD   r   r   tuplerJ   rO   rX    r/   r-   r1   r1   9   s        
 $.26:JN   	
 49_t+ !#,t3 $S#Jc3h$?@4G 
   <! ! ! ! !
# 
%S/ 
 
 
 
 
 
r/   r1   c                       e Zd Z	 	 	 	 ddedededededeee         z  dz  d	eegef         dz  d
eeege	eef         f         dz  ddfdZ
dededefdZdefdZdede	eef         fdZdS )_WordGeneratorFNr2   	min_chars	max_charsr3   r4   r   r5   r6   r   c	                     | _         ||f _        | _        t          |t                    r|n|g _        t          |t                    r; j        D ]3}		 t          |	d          }
# t          $ r t          d|	           w xY w| _	        | _
        g  _        |r0 fdt          |          D             } fd|D              _        d S d S )Nr8   r9   c                 .    g | ]} j         j         S r`   )_generate_stringwordlen_ranger=   rI   r@   s     r-   rA   z+_WordGenerator.__init__.<locals>.<listcomp>   s'    ]]]Q+d+T-?@]]]r/   c                 d    g | ],}t          |t          j        j                             |f-S r;   )r.   rT   rU   r   )r=   r   r@   s     r-   rA   z+_WordGenerator.__init__.<locals>.<listcomp>   sI        %Tv}TEU7V7VWWWY]^  r/   )r2   rh   rB   rC   rD   r   r   rE   rF   r5   r6   rG   range)r@   r2   rc   rd   r3   r4   r   r5   r6   r   rI   _wordss   `           r-   rJ   z_WordGenerator.__init__i   s+    
'3'*4[$*G*GZ;;k]k4(( 	G( G GG r**AA G G G$%Et%E%EFFFG,!2(*
 	]]]]%P[J\J\]]]F   "  DJJJ	 	s   A((Bc                      t          j        ||          }d                     fdt          |          D                       S )N c              3   J   K   | ]}t          j        j                  V  d S rL   )rT   rU   r2   ri   s     r-   	<genexpr>z2_WordGenerator._generate_string.<locals>.<genexpr>   s/      KKQv}TZ00KKKKKKr/   )rT   randintjoinrk   )r@   rc   rd   	num_charss   `   r-   rg   z_WordGenerator._generate_string   sC    N9i88	wwKKKK%	:J:JKKKKKKr/   c                     | j         S rL   rM   rN   s    r-   rO   z_WordGenerator.__len__   rP   r/   rQ   c                     t          | j                  dk    r| j        |         \  }}n7 | j        | j         }t	          |t          j        | j                            }t          |          }||fS rS   )	r   rG   rg   rh   r.   rT   rU   r   r   )r@   rQ   rV   rW   r*   s        r-   rX   z_WordGenerator._read_sample   so    tz??Q"j/OGVV*T*D,>?F)&fmDL\>]>]^^^Gg&&F{r/   rY   )rZ   r[   r\   r]   r   r^   rD   r   r   r_   rJ   rg   rO   rX   r`   r/   r-   rb   rb   h   sA        $.26:JN   	
   49_t+ !#,t3 $S#Jc3h$?@4G 
   BL# L# L# L L L L! ! ! ! !	# 	%S/ 	 	 	 	 	 	r/   rb   )r   NNN)rT   collections.abcr   typingr   PILr   r   doctr.io.imager   doctr.utils.fontsr   datasetsr
   r]   r   r_   r.   r1   rb   r`   r/   r-   <module>r|      sg    $ $ $ $ $ $                       * * * * * * & & & & & & & & & & & &
 "48.2$ $
$$ t$ CcM*T1	$
 c3m$t+$ [$ $ $ $N, , , , ,/ , , ,^2 2 2 2 2_ 2 2 2 2 2r/   