o
    0j                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZ d dlZd dlmZ ddlmZ ddlm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l$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: g dZ;ej<G dd de#Z=G dd de!Z>edG dd de>Z?edG d d! d!e>Z@dS )"    )annotationsN)chain)AnyDictListOptionalTupleUnion)Image   )logging)pipeline_requires_extra   )ImageBatchSampler)	ReadImage)	HPIConfigPaddlePredictorOption)	benchmark   )(AutoParallelImageSimpleInferencePipeline)BasePipeline)CropByBoxes)merge_tables_across_pages)assign_levels_to_parsing_res)construct_img_pathgather_imgs   )
BaseResultPaddleOCRVLBlockPaddleOCRVLResult)	convert_otsl_to_htmlcrop_marginfilter_overlap_boxesmerge_blockspost_process_for_spottingpre_process_for_spottingtokenize_figure_of_tabletruncate_repetitive_contentuntokenize_figure_of_table)imageheader_imagefooter_imagec                      s   e Zd ZdZdddddddddX fddZdd Z	dYdZd&d'Zd[d)d*Z						+d\d,d-Z											+												d]d^dFdGZ	d_dKdLZ
			d`dadQdRZ			d`dbdVdWZ  ZS )c_PaddleOCRVLPipelinez_PaddleOCRVLPipeline PipelineNFT)deviceengineengine_config	pp_optionuse_hpip
hpi_configinitial_predictorconfigr   r-   Optional[str]r.   r/   Optional[Dict[str, Any]]r0   Optional[PaddlePredictorOption]r1   boolr2   *Optional[Union[Dict[str, Any], HPIConfig]]r3   returnNonec             	     s  t  jd%||||||d|	 |r|dd| _| jr.|di dddi}
| |
| _|dd| _| jr|d	i d
ddi}|dd}|durR|dv sVJ di }|dd }durf||d< |dd }durt||d< |dd }dur||d< |dd }dur||d< | j|fi || _|dd| _	|dd| _
|d	i dddi}| || _|dd| _|dd| _t|ddd| _tdd | _t | _|d!d| _|d"d| _|d#g d$| _dS dS )&a  Initializes the PaddleOCR-VL pipeline.

        Args:
            config (Dict): Configuration dictionary containing various settings.
            device (Optional[str], optional): The device to use for prediction. Defaults to `None`.
            engine (Optional[str], optional): Inference engine. Defaults to `None`.
            engine_config (Optional[Dict[str, Any]], optional): Engine-specific config. Defaults to `None`.
            pp_option (Optional[PaddlePredictorOption], optional): Paddle predictor options.
                Defaults to `None`.
            use_hpip (bool, optional): Whether to use HPIP. Defaults to `False`.
            hpi_config (Optional[Union[Dict[str, Any], HPIConfig]], optional):
                HPIP configuration. Defaults to `None`.
            initial_predictor (bool, optional): Whether to initialize predictors.
                Defaults to `True`.
        )r-   r.   r/   r0   r1   r2   use_doc_preprocessorTZSubPipelinesZDocPreprocessorZpipeline_config_errorz+config error for doc_preprocessor_pipeline!use_layout_detectionZ
SubModulesZLayoutDetectionZmodel_config_errorz"config error for layout_det_model!
model_nameN)zPP-DocLayoutV2zPP-DocLayoutV3z3model_name must be PP-DocLayoutV2 or PP-DocLayoutV3	threshold
layout_nmslayout_unclip_ratiolayout_merge_bboxes_modeuse_chart_recognitionFuse_seal_recognitionZVLRecognitionzconfig error for vl_rec_model!format_block_contentuse_ocr_for_image_block
batch_sizer   )rG   ZBGR)format
use_queuesmerge_layout_blocksmarkdown_ignore_labels)numberZfootnoteheaderr*   footerr+   Z
aside_text )super__init__getr<   Zcreate_pipelinedoc_preprocessor_pipeliner=   Zcreate_modellayout_det_modelrC   rD   vl_rec_modelrE   rF   r   batch_samplerr   
img_readerr   crop_by_boxesrI   rJ   rK   )selfr4   r-   r.   r/   r0   r1   r2   r3   kwargsZdoc_preprocessor_configZlayout_det_configr>   Zlayout_kwargsr?   r@   rA   rB   Zvl_rec_config	__class__rO   r/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/inference/pipelines/paddleocr_vl/pipeline.pyrQ   :   s   


z_PaddleOCRVLPipeline.__init__c                 C  s   t | dr| j  d S d S )NrU   )hasattrrU   closerY   rO   rO   r]   r_      s   
z_PaddleOCRVLPipeline.closeuse_doc_orientation_classifyUnion[bool, None]use_doc_unwarpingr=   rC   rD   rF   rE   rJ   rK   Optional[List[str]]dictc
              
   C  s   |du r|du r| j }
n|du s|du rd}
nd}
|du r | j}|du r'| j}|du r.| j}|du r5| j}|du r<| j}|du rC| j}|	du rJ| j}	t|
|||||||	dS )a  
        Get the model settings based on the provided parameters or default values.

        Args:
            use_doc_orientation_classify (Union[bool, None]): Enables document orientation classification if True. Defaults to system setting if None.
            use_doc_unwarping (Union[bool, None]): Enables document unwarping if True. Defaults to system setting if None.

        Returns:
            dict: A dictionary containing the model settings.

        NTF)r<   r=   rC   rD   rF   rE   rJ   rK   )	r<   r=   rC   rD   rF   rE   rJ   rK   re   )rY   ra   rc   r=   rC   rD   rF   rE   rJ   rK   r<   rO   rO   r]   get_model_settings   s:   z'_PaddleOCRVLPipeline.get_model_settingsinput_paramsc                 C  s    |d r| j std dS dS )a4  
        Check if the input parameters are valid based on the initialized models.

        Args:
            input_params (Dict): A dictionary containing input parameters.

        Returns:
            bool: True if all required models are initialized according to input parameters, False otherwise.
        r<   zRSet use_doc_preprocessor, but the models for doc preprocessor are not initialized.FT)r<   r   error)rY   rg   rO   rO   r]   check_model_settings_valid   s   z/_PaddleOCRVLPipeline.check_model_settings_validautoc
           ?      C  s  g }
d}t  }|dd }|d ur|nd}|dd }|d ur!|nd}i }i }i }tdg }|r2g nt }|sB|dg7 }|dg7 }|sI|dg7 }tt|||D ]#\}\}}}t||	}|d }| |||	}~~|rvt||d	g d
}|
	| t|D ]\}}|d }|d }||vrs|d ursi } d}!|d|}|d|}g }"|d	krd}!t
||d |\}} }"|d|}|d|}nj|dkr|rd}!|d|}|d|}nUd|v r|dkrd}!t|}#|#j\}$}%}&|$dkr|%dkr|#}|d|}|d|}n(|dkrd}!d}d}d }t|}n|dkr/|r/d!}!|d"|}|d#|}||f}'|'|vrBg g g g d$d%||'< ||' d& 	| ||' d' 	|! ||' d( 	|  ||' d) 	||f |'|||f< ||" q~qQ~~|d u ri }n|d*d d u rd+|d*< |D ]>}'|'\}}d||d,|}(||' d& }||' d' })t| jjd-d. t||)D fd/|rdndi|(}*~~)|*||' d0< qg }+g },g }-g }.t|
D ]r\}}g }/g }0i }1t|D ]9\}}|d }|d }2|d }d1}3i } ||f|v r|||f }'||' }4|4d2 }5|5t|4d) k r'|4d) |5 ||fks)J |4d0 |5 }6|4d& |5 }7|4d( |5 } |5d37 }5|5|4d2< |7|6d4< |6d5d1}8|8d u rTd1}8|d	kr[d6nd7}9t|8|9d8}8d9|8v rmd:|8v swd;|8v rd<|8v r|8d=d1}8|8d9d>d:d?d@d;dAd<d;dBd<dB}8|dkr|8d=d1}8|d	krt|8}:|:d1kr|:}8|dkr|jd d \}%}$t|8|$|%\}8}1|8}3t||2|3|dCd |dDd dE};|d	kr|.	| |;dF ||v r|d urt|d |d }<|;||<< |<|vrd$d l}=|=||=j}|<t|dG|;_nq|/	|; ~;~q|.D ]}>|>dH }|>dI } t |j!| ||_!q&|+	|/ |,	|0 |-	|1 ~/~0~1q|+|,|-|fS )JNF
min_pixelsi  
max_pixelsi P sealchartboxestable)Znon_merge_labelsimglabelzOCR:Zocr_min_pixelsZocr_max_pixelszTable Recognition:boxZtable_min_pixelsZtable_max_pixelszChart Recognition:Zchart_min_pixelsZchart_max_pixelsformulaZformula_numberzFormula Recognition:r   Zformula_min_pixelsZformula_max_pixelsspottingz	Spotting:Ti  zSeal Recognition:Zseal_min_pixelsZseal_max_pixelsr   )imagesqueriesfigure_token_mapsvlm_block_idscurr_vlm_block_idxrv   rw   rx   ry   max_new_tokensi   )Z	use_cacherk   rl   c                 S  s   g | ]	\}}||d qS ))r)   queryrO   ).0r)   r|   rO   rO   r]   
<listcomp>  s    zC_PaddleOCRVLPipeline.get_layout_parsing_results.<locals>.<listcomp>Zskip_special_tokensZvlm_results rz   r   r)   resulti  2   )	min_countz\(z\)z\[z\]$z $ z $z\[\[z\]\]z $$ group_idpolygon_points)rr   bboxcontentr   r   )figure_token_mapblockpathrq   r   r   )"setpopIMAGE_LABELScopy	enumeratezipr"   rX   r#   appendr&   r!   shaper%   updaterR   listrU   predictlenr'   replacer    r$   r   r   cv2ZcvtColorZCOLOR_BGR2RGBr
   Z	fromarrayr)   r(   r   )?rY   rv   layout_det_resultsimgs_in_docrC   rD   rF   
vlm_kwargsrJ   layout_shape_modeblocksZhas_spottingZdrop_figures_setrk   Zdefault_min_pixelsrl   Zdefault_max_pixelsZbatch_dict_by_pixelZid2pixel_key_mapZimage_path_to_obj_mapZvis_image_labelsZimage_labelsir)   layout_det_resimgs_in_doc_for_imgro   Zblocks_for_imgjr   Z	block_imgblock_labelr   Ztext_promptZdrop_figuresZcrop_imgwh_Z	pixel_keyrZ   rw   Zbatch_resultsparsing_res_liststable_res_listsspotting_res_listZtable_blocksparsing_res_listtable_res_listspotting_res
block_bboxblock_contentZ
pixel_inforz   Zvl_rec_resultZblock_img4vlZ
result_strr   Zhtml_strZ
block_infoZimg_pathr   Zblk_inforO   rO   r]   get_layout_parsing_results  s  














	
















z/_PaddleOCRVLPipeline.get_layout_parsing_resultsinput3Union[str, List[str], np.ndarray, List[np.ndarray]]layout_thresholdOptional[Union[float, dict]]r@   Optional[bool]rA   1Optional[Union[float, Tuple[float, float], dict]]rB   r   rI   prompt_labelOptional[Union[str, None]]repetition_penaltyOptional[float]temperaturetop_prk   Optional[int]rl   r{   vlm_extra_argsOptional[dict]r   c           &      +  s    |||||||	dkrdndd< s"ddiV  |du r)j}du r/i d s\r7nd	 d
krDdd< n
 dkrNdd<  dv s\J d dd*	
f
dd	 f
dd|rd}tj|dtj|dtjjj| dt	 t	 t	 t	 fdd} fdd}fdd}tj
||fdd}|  tj
|dd}|  tj
|dd} |   z|r3 r s2zjdd }!W n tjy    rY n#Y qw |!d! s%td"|!d#  d$|!d%  |!d# V   r rn/|D ])}"t |"}#t|#d#ksMJ t|#|#d! }$|$D ]}%|%V  qU~%~$~#~"q8W |r  |jd&d  | rztd' |jd&d  | rtd( | jd&d  |  rtd) dS dS dS |r؈  |jd&d  | rtd' |jd&d  | rtd( | jd&d  |  rtd) w w w )+a`  
        Predicts the layout parsing result for the given input.

        Args:
            input (Union[str, list[str], np.ndarray, list[np.ndarray]]): Input image path, list of image paths,
                                                                        numpy array of an image, or list of numpy arrays.
            use_doc_orientation_classify (Optional[bool]): Whether to use document orientation classification.
            use_doc_unwarping (Optional[bool]): Whether to use document unwarping.
            use_layout_detection (Optional[bool]): Whether to use layout detection. Default is None.
            use_chart_recognition (Optional[bool]): Whether to use chart recognition. Default is None.
            use_seal_recognition (Optional[bool]): Whether to use seal recognition. Default is None.
            layout_threshold (Optional[float]): The threshold value to filter out low-confidence predictions. Default is None.
            layout_nms (Optional[bool], optional): Whether to use layout-aware NMS. Defaults to `False`.
            layout_unclip_ratio (Optional[Union[float, Tuple[float, float]]], optional): The ratio of unclipping the bounding box.
                Defaults to `None`.
                If it's a single number, then both width and height are used.
                If it's a tuple of two numbers, then they are used separately for width and height respectively.
                If it's None, then no unclipping will be performed.
            layout_merge_bboxes_mode (Optional[str], optional): The mode for merging bounding boxes. Defaults to `None`.
            layout_shape_mode (Optional[str], optional): The mode for layout shape. Defaults to "auto", [ "rect", "quad","poly", "auto"] are supported.
            use_queues (Optional[bool], optional): Whether to use queues. Defaults to `None`.
            prompt_label (Optional[Union[str, None]], optional): The label of the prompt in ['ocr', 'formula', 'table', 'chart']. Defaults to `None`.
            format_block_content (Optional[bool]): Whether to format the block content. Default is None.
            repetition_penalty (Optional[float]): The repetition penalty parameter used for VL model sampling. Default is None.
            temperature (Optional[float]): Temperature parameter used for VL model sampling. Default is None.
            top_p (Optional[float]): Top-p parameter used for VL model sampling. Default is None.
            min_pixels (Optional[int]): The minimum number of pixels allowed when the VL model preprocesses images. Default is None.
            max_pixels (Optional[int]): The maximum number of pixels allowed when the VL model preprocesses images. Default is None.
            max_new_tokens (Optional[int]): The maximum number of new tokens. Default is None.
            merge_layout_blocks (Optional[bool]): Whether to merge layout blocks. Default is None.
            markdown_ignore_labels (Optional[list[str]]): The list of ignored markdown labels. Default is None.
            **kwargs (Any): Additional settings to extend functionality.

        Returns:
            PaddleOCRVLResult: The predicted layout parsing result.
        rectFTZreturn_layout_polygon_pointsrh   z0the input params for model settings are invalid!Nr=   ocrrn   rC   rm   rD   )r   rt   rp   rn   ru   rm   zLayout detection is disabled (use_layout_detection=False). 'prompt_label' must be one of ['ocr', 'formula', 'table', 'chart'], but got 'z'.c                 3  sT   |st | }tdt | |D ]}| j|||  }| j|||  }| j|||  }| j|||  }|}d rItj|	d}ndd |D }dd |D }	d rttj	|	 dd	}
d
d t
|	|
D }n)g }
|	D ]}|
d d d ddd|jd |jd gdgd qxdd |
D }||||	||
|fV  qd S )Nr   r<   )ra   rc   c                 S  s   g | ]}d |iqS Z
output_imgrO   )r}   ZarrrO   rO   r]   r~         zE_PaddleOCRVLPipeline.predict.<locals>._process_cv.<locals>.<listcomp>c                 S     g | ]}|d  qS r   rO   )r}   itemrO   rO   r]   r~     r   r=   F)r?   r@   rA   rB   r   r"   c                 S  s   g | ]\}}t ||d  qS )ro   )r   )r}   Z
doc_pp_imgr   rO   rO   r]   r~     s    r   )Zcls_idrr   ZscoreZ
coordinate)
input_path
page_indexro   c                 S  s   g | ]}g qS rO   rO   )r}   r   rO   rO   r]   r~     s    )r   range	instancesinput_pathspage_indexespage_countsrW   r   rS   rT   r   r   lowerr   )
batch_dataZnew_batch_sizeidxr   r   r   r   Zimage_arraysdoc_preprocessor_resultsdoc_preprocessor_imagesr   r   doc_preprocessor_image)
rB   r@   r   r   rA   model_settingsr   rY   ra   rc   rO   r]   _process_cvr  sx   
z1_PaddleOCRVLPipeline.predict.<locals>._process_cvc                 3  s    | \}}}}}}}j |||d d d d	d  d	\}}	}
}t|||||||	||
|
D ]&\
}}}}}}}}}}||||jd |jd ||||||d	}t|V  q:d S )
NrC   rD   rF   )r   r   r   rk   rl   r{   rJ   )	rv   r   r   rC   rD   rF   r   rJ   r   r   r   )r   r   
page_countwidthheightdoc_preprocessor_resr   r   r   r   r   r   )r   r   r   r   )
results_cvr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsingle_img_res)
r   r{   rl   rk   r   r   rY   r   r   r   rO   r]   _process_vlm  s   		 z2_PaddleOCRVLPipeline.predict.<locals>._process_vlm@   )maxsizec              
     s    | } s>zt|}W n" ty   Y n& ty1 } zdd|f W Y d }~nd }~ww d|f ~ r	   d S )NFr   T)rV   is_setnextStopIteration	Exceptionputr   )Zinput_Zall_batch_datar   e)event_data_loading_doneevent_shutdownqueue_inputrY   rO   r]   _worker_input  s   
z3_PaddleOCRVLPipeline.predict.<locals>._worker_inputc               
     s     smzjdd} W n tjy!     r  Y d S Y q w | d s-|  d S z | d d r;jjjnd D ]
}d|f ~q>~ W n t	yf } zdd|f W Y d }~d S d }~ww   rd S d S )	N      ?timeoutr   r   r=   TFZcv)
r   rR   queueEmptyr   r   rT   rV   rG   r   )r   r   r   )r   event_cv_processing_doner   r   r   queue_cvr   rY   rO   r]   
_worker_cv!  s8   
z0_PaddleOCRVLPipeline.predict.<locals>._worker_cvc               
     sd  d} j jj} sg }t }d}d}	 | t |  }|dkr#n>zj|d}W n
 tjy5   Y n,w |d sB| d}n|	|d  ~|d d D ]
}|t
|d	 7 }qP||kr`nq|red S |sr rq  d S qd
d t| D }	~z |	D ]
}
d|
f ~
q~	W n ty } zdd|f W Y d }~d S d }~ww  rd S d S )Nr   Fr   Tr   r      ro   c                 S  s   g | ]	}t t|qS rO   )r   r   from_iterable)r}   listsrO   rO   r]   r~   b  s    zE_PaddleOCRVLPipeline.predict.<locals>._worker_vlm.<locals>.<listcomp>Zvlm)rU   rV   rG   r   timerR   r   r   r   r   r   r   r   r   )ZMAX_QUEUE_DELAY_SECSZMAX_NUM_BOXESresults_cv_list
start_timeZshould_breakZ	num_boxesZremaining_timer   resZmerged_results_cvZ
result_vlmr   )r   r   r   event_vlm_processing_doner   	queue_vlmrY   rO   r]   _worker_vlm=  sf   


z1_PaddleOCRVLPipeline.predict.<locals>._worker_vlm)targetargsdaemon)r   r   r   r   r   zException from the 'r   z
' worker: r   r   z&Input worker did not terminate in timez#CV worker did not terminate in timez$VLM worker did not terminate in timeN)rf   ri   rI   r   r   QueuerV   rG   	threadingEventThreadstartr   emptyrR   r   RuntimeErrorr   r   r   joinis_aliver   warning)&rY   r   ra   rc   r=   rC   rD   rF   r   r@   rA   rB   r   rI   r   rE   r   r   r   rk   rl   r{   rJ   rK   r   rZ   Zmax_num_batches_in_processr   r   r   Zthread_inputZ	thread_cvZ
thread_vlmr   r   r   r   r   rO   )r   r   r   r   r   r   rB   r@   r   r   rA   r{   rl   rk   r   r   r   r   r   r   rY   r   r   ra   rc   r   r]   r   
  s   @



 	IK
4








	




	z_PaddleOCRVLPipeline.predictmarkdown_listr   tuplec                 C  s"   d}|D ]
}|d|d  7 }q|S )a  
        Concatenate Markdown content from multiple pages into a single document.

        Args:
            markdown_list (list): A list containing Markdown data for each page.

        Returns:
            tuple: A tuple containing the processed Markdown text.
        r   z

markdown_textsrO   )rY   r  r	  r   rO   rO   r]   concatenate_markdown_pages  s   
z/_PaddleOCRVLPipeline.concatenate_markdown_pagesres_listmerge_tabletitle_levelmerge_pagesc                 C  s   t d | ||||S )a  Concatenate layout parsing results from multiple pages.

        Args:
            res_list: List of page parsing results
            merge_talble: Whether to merge tables across pages
            title_level: Whether to assign title levels
            merge_pages: Whether to concatenate pages using the new consolidate_pages() logic

        Returns:
            PaddleOCRVLResult: Combined OCR-VL result after merge_table or title_level policy
        zDeprecationWarning: `concatenate_pages()` is deprecated as of v3.3.14 and will be removed in v3.4.0. Please use `restructure_pages()` instead. It provides better support for table merging and title restructuring.)r   r  restructure_pages)rY   r  r  r  r  rO   rO   r]   concatenate_pages  s   z&_PaddleOCRVLPipeline.concatenate_pagesmerge_tablesrelevel_titlesr  c                 #  s   t |dkr	g S dd   fdd}d}g }|D ]J}t|ts:|d }g |d< |dg }	|d	i }
||	|
}	n
|d }	|d	i }
g }|	D ]}||_||_|d
7 }|| qH||d< || q|}dd |D }|rst|}|ryt|}g }|rg }|D ]}|	|dg  q||d d< |d }g }t
|D ]\}}|D ]
}||_|| qq||d< d|d< t ||d< |
d rdd |D |d< |
d rdd |D |d< |t| nt
|D ]\}}|| |d< |t| q|E dH  dS )a  Restructure layout parsing results from multiple pages.
        Args:
            res_list: List of page parsing results
            merge_tables: Whether to merge tables across pages
            relevel_titles: Whether to relevel titles
            concatenate_pages: Whether to concatenate pages to a single document

        Returns:
            PaddleOCRVLResult: Combined OCR-VL result after merge_tables or relevel_titles policy
        r   c                 S  sX   |  dd r
| d S | d dv s| d dkr*| dds*t| d | d }|d dS d S )	Nr)   r   )r)   rm   rn   rC   Fr   r   )rR   r   )r   r   r   rO   rO   r]   _get_img_obj  s   

z<_PaddleOCRVLPipeline.restructure_pages.<locals>._get_img_objc                   sh   g }| D ]-}t |d |d |dd tdd|d |dd d} || }r,||_|| q|S )	Nr   r   Zblock_polygon_pointsz^#+\sr   r   r   )rr   r   r   r   r   )r   rR   resubr)   r   )r   r   r   r   objrq   r  rO   r]   _conver_blocks_to_obj  s   

zE_PaddleOCRVLPipeline.restructure_pages.<locals>._conver_blocks_to_objr   r   r   r   r   c                 S  r   )r   rO   r}   r   rO   rO   r]   r~     s    z:_PaddleOCRVLPipeline.restructure_pages.<locals>.<listcomp>Nr   r   r=   c                 S  r   )r   rO   r  rO   rO   r]   r~   #  r   r   r<   c                 S  r   )r   rO   r  rO   rO   r]   r~   '  r   r   )r   
isinstancer   rR   global_block_idZglobal_group_idr   r   r   extendr   r   r   )rY   r  r  r  r  r  r  Zobj_res_listZone_page_resr   r   r   r   Zblocks_by_pageZconcatenate_resZall_imgs_in_docr   Zall_page_resZ
all_blocksZpage_idxZblksZblkrO   r  r]   r    sv   


z&_PaddleOCRVLPipeline.restructure_pages)r4   r   r-   r5   r.   r5   r/   r6   r0   r7   r1   r8   r2   r9   r3   r8   r:   r;   r   )ra   rb   rc   rb   r=   rb   rC   rb   rD   rb   rF   rb   rE   rb   rJ   rb   rK   rd   r:   re   )rg   re   r:   r8   )FFFNTrj   )FFNNNNNNNNrj   NNNNNNNNNNNN)2r   r   ra   rb   rc   rb   r=   rb   rC   rb   rD   rb   rF   rb   r   r   r@   r   rA   r   rB   r5   r   r5   rI   r   r   r   rE   rb   r   r   r   r   r   r   rk   r   rl   r   r{   r   rJ   r   rK   rd   r   r   r:   r   )r  r   r:   r  )TTF)r  r   r  r8   r  r8   r  r8   )r  r   r  r8   r  r8   r  r8   )__name__
__module____qualname____doc__rQ   r_   rf   ri   r   r   r
  r  r  __classcell__rO   rO   r[   r]   r,   6   sv    v
?
  	   
r,   c                   @  s    e Zd Zedd Zdd ZdS )_BasePaddleOCRVLPipelinec                 C  s   t S r   )r,   r`   rO   rO   r]   _pipeline_cls4  s   z&_BasePaddleOCRVLPipeline._pipeline_clsc                 C  s   | ddS )NrG   r   )rR   )rY   r4   rO   rO   r]   _get_batch_size8  s   z(_BasePaddleOCRVLPipeline._get_batch_sizeN)r  r  r  propertyr#  r$  rO   rO   rO   r]   r"  3  s    
r"  r   c                   @     e Zd ZdZdS )PaddleOCRVLPipelinezPaddleOCR-VLNr  r  r  entitiesrO   rO   rO   r]   r'  <      r'  c                   @  r&  )PaddleOCRVL15PipelinezPaddleOCR-VL-1.5Nr(  rO   rO   rO   r]   r+  A  r*  r+  )A
__future__r   r   r  r   r   	itertoolsr   typingr   r   r   r   r   r	   numpynpZPILr
   utilsr   Z
utils.depsr   Zcommon.batch_samplerr   Zcommon.readerr   modelsr   r   Zutils.benchmarkr   Z	_parallelr   baser   
componentsr   Zlayout_parsing.merge_tabler   Zlayout_parsing.title_levelr   Zlayout_parsing.utilsr   r   r   r   r   r   Zuiltsr    r!   r"   r#   r$   r%   r&   r'   r(   r   Ztime_methodsr,   r"  r'  r+  rO   rO   rO   r]   <module>   sN    ,        	