
    =pjf                     0   S SK JrJrJrJrJrJr  S SKrSSK	J
r
  SSKJr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  SSK	J"r"J#r#  \RH                   " S S\5      5       r%\" S5       " S S\5      5       r&g)    )AnyDictListOptionalTupleUnionN   )logging)pipeline_requires_extra   )ImageBatchSampler)	ReadImage)	HPIConfigPaddlePredictorOption)	DetResult)	benchmark   )(AutoParallelImageSimpleInferencePipeline)BasePipeline)CropByBoxes)	OCRResult   )LayoutParsingResult)get_sub_regions_ocr_ressorted_layout_boxesc            1         ^  \ rS rSrSrSSSSSSS.S\S\\   S\\   S	\\\\4      S
\\	   S\
S\\\\\4   \4      SS4U 4S jjjrS\SS4S jr      S3S\S\S\S\S\S\S\\   S\\   S\\   S\\   S\\   S\\   S\4S jjrS\S\
4S jrS\\
   S \\
   S!\\
   S"\\
   S#\\
   S\4S$ jr                      S4S%\\\\   \R4                  \\R4                     4   S\\
   S \\
   S&\\
   S!\\
   S"\\
   S#\\
   S'\\\\4      S(\\
   S)\\\\\\4   \4      S*\\   S\\   S\\   S\\   S\\   S\\   S\\   S+\\   S,\\   S-\\   S.\\   S/\\   S0\\   S\40S1 jjrS2rU =r$ )5_LayoutParsingPipeline"   zLayout Parsing PipelineNFdeviceengineengine_config	pp_optionuse_hpip
hpi_configconfigr    r!   r"   r#   r$   r%   returnc          
         > [         T	U ]  " SUUUUUUS.UD6  U R                  U5        [        SS9U l        [        SS9U l        [        5       U l        g)a  Initializes the layout parsing 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`.
r   r   )
batch_sizeBGR)formatN )	super__init__inintial_predictorr   batch_samplerr   
img_readerr   _crop_by_boxes)
selfr&   r    r!   r"   r#   r$   r%   kwargs	__class__s
            o/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/paddlex/inference/pipelines/layout_parsing/pipeline.pyr.   _LayoutParsingPipeline.__init__&   sf    2 	 	
'!	
 	
 	'.!<#51)m    c                    UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        U R                  (       a:  UR                  S0 5      R                  SSS	05      nU R                  U5      U l        UR                  S
0 5      R                  SSS05      n0 nUR                  SS5      =nb  XTS'   UR                  SS5      =nb  XdS'   UR                  SS5      =n b  XtS'   UR                  SS5      =n b  XS'   U R                  " U40 UD6U l        UR                  S0 5      R                  SSS05      n	U R                  U	5      U l	        U R                  (       a:  UR                  S0 5      R                  SSS05      n
U R                  U
5      U l
        U R                  (       a:  UR                  S0 5      R                  SSS05      nU R                  U5      U l        U R                  (       a:  UR                  S0 5      R                  SSS05      nU R                  U5      U l        g)zInitializes the predictor based on the provided configuration.

Args:
    config (Dict): A dictionary containing the configuration for the predictor.

Returns:
    None
use_doc_preprocessorTuse_table_recognitionuse_seal_recognitionuse_formula_recognitionSubPipelinesDocPreprocessorpipeline_config_errorz+config error for doc_preprocessor_pipeline!
SubModulesLayoutDetectionmodel_config_errorz"config error for layout_det_model!	thresholdN
layout_nmslayout_unclip_ratiolayout_merge_bboxes_mode
GeneralOCRz&config error for general_ocr_pipeline!SealRecognitionz+config error for seal_recognition_pipeline!TableRecognitionz,config error for table_recognition_pipeline!FormulaRecognitionz.config error for formula_recognition_pipeline!)getr:   r;   r<   r=   create_pipelinedoc_preprocessor_pipelinecreate_modellayout_det_modelgeneral_ocr_pipelineseal_recognition_pipelinetable_recognition_pipelineformula_recognition_pipeline)r3   r&   doc_preprocessor_configlayout_det_configlayout_kwargsrD   rE   rF   rG   general_ocr_configseal_recognition_configtable_recognition_configformula_recognition_configs                r6   r/   )_LayoutParsingPipeline.inintial_predictorP   s    %+JJ/Et$L!%+ZZ0G%N"$*JJ/Et$L!'-zz2KT'R$$$&,jj&D&H&H!+-Z'# .2-A-A'.D* #JJ|R8<<!#GH
 *..{DAAIN)2+&+//dCCJP*4,'#4#8#89NPT#UU 4G/0(9(=(=*D) $ 	
 9Q45 $ 1 12C U} U#ZZ;??$&NO
 %)$8$89K$L!$$&,jj&D&H&H!+-Z'# .2-A-A'.D* %%'-zz."'E'I'I"+-[($ /3.B.B(/D+ '')/NB)G)K)K$+-]*& 150D0D*1D- 	r8   imagelayout_det_resoverall_ocr_restable_res_listseal_res_listformula_res_listtext_det_limit_side_lentext_det_limit_typetext_det_threshtext_det_box_threshtext_det_unclip_ratiotext_rec_score_threshc                    / n0 nSnSnSn[         R                  " U5      n/ n[        US   5       GHr  u  nn0 nUS   nUS   R                  5       nUUS'   UUS'   SUS'   UR	                  U5        US	:X  a5  [        U5      S:  a%  [        U5      U:  d   S
5       eXo   S   US'   US-  nOUS:X  a6  [        U5      S:  a&  [        U5      U:  d   S5       eUU   S   US'   US-  nOUS:X  aE  [        U5      S:  a5  [        U5      U:  d   S5       eSR                  UU   S   5      US'   US-  nO^[        UU/SS9u  nnU H2  nUR                  US5      c  U/UU'   M  UU   R	                  U5        M4     SR                  US   5      US'   UR	                  U5        GMu     UR                  5        H  n[        U5      S:  d  M  U H  n[         R                  " UR                  UR                  S9S-  nUU   S   nU Vs/ s H  n[        U5      PM     snu  nn n!n"UU U"2UU!2SS24   UU U"2UU!2SS24'   [        U R                  UUUU	U
UUS95      S   n#SR                  U#S   5      UU   S'   M     M     [        UUSS9n$[!        U$S   U$S   5       H(  u  n%n&0 nU%US'   SUS'   U&US'   UR	                  U5        M*     [#        XR                  S   S9nU$ s  snf ) aD  
Retrieves the layout parsing result based on the layout detection result, OCR result, and other recognition results.
Args:
    image (list): The input image.
    layout_det_res (DetResult): The detection result containing the layout information of the document.
    overall_ocr_res (OCRResult): The overall OCR result containing text information.
    table_res_list (list): A list of table recognition results.
    seal_res_list (list): A list of seal recognition results.
    formula_res_list (list): A list of formula recognition results.
    text_det_limit_side_len (Optional[int], optional): The maximum side length of the text detection region. Defaults to `None`.
    text_det_limit_type (Optional[str], optional): The type of limit for the text detection region. Defaults to `None`.
    text_det_thresh (Optional[float], optional): The confidence threshold for text detection. Defaults to `None`.
    text_det_box_thresh (Optional[float], optional): The confidence threshold for text detection bounding boxes. Defaults to `None`
    text_det_unclip_ratio (Optional[float], optional): The unclip ratio for text detection. Defaults to `None`.
    text_rec_score_thresh (Optional[float], optional): The score threshold for text recognition. Defaults to `None`.
Returns:
    list: A list of dictionaries representing the layout parsing result.
r   boxes
coordinatelabel
block_bboxblock_label block_contentformulazThe number of                         formula regions of layout parsing pipeline                         and formula recognition pipeline are different!rec_formular   tablezThe number of                         table regions of layout parsing pipeline                         and table recognition pipeline are different!	pred_htmlsealzThe number of                         seal regions of layout parsing pipeline                         and seal recognition pipeline are different!z, 	rec_textsT)return_match_idxN
)dtype   )rc   rd   re   rf   rg   rh   F)flag_within	rec_boxes
other_text)w)nparray	enumeratelowerappendlenjoinr   rL   valuesonesshapery   intlistrQ   zipr   )'r3   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   layout_parsing_resmatched_ocr_dictformula_indextable_index
seal_indexobject_boxesobject_box_idxbox_infosingle_box_resboxrl   ocr_res_in_boxmatched_idxesmatched_idxlayout_box_idsidxwht_imix1y1x2y2sub_ocr_resocr_without_layout_boxesocr_rec_boxocr_rec_texts'                                          r6   get_layout_parsing_res-_LayoutParsingPipeline.get_layout_parsing_res   s   B  
(1.2I(J$NHN<(CW%++-E+.N<(,1N=).0N?+$	!'(1,,-=IHI= 7G6U%7N?3 "Q&M'!~&*N+k9GFG9 7E[6Q#7N?3  1$K&}%)M*Z7FEF7 7;ii%j1+>7N?3 !OJ0G#cUT1- $1K'++K>F9G8H(5(5<<^L	 $1
 37))N;<W2X/%%n5g )Kh /557N>"Q&)CWWU[[DsJF,S1,?C69%:cc!fc%:NBB.3BrE2b5!O.DF2b5"R%?+"&11"4K0C,;0C2G2G 2 
# 
#K @Dyy#K0@&s+O<! * 8. $;\u$
  *-$[13KK3X*
%K  N+6N<(,8N=).:N?+%%n5*
 11C{{ST~V!!A &;s   	K$input_paramsc                 0   US   (       a(  U R                   (       d  [        R                  " S5        gUS   (       a(  U R                  (       d  [        R                  " S5        gUS   (       a(  U R                  (       d  [        R                  " S5        gg)	a  
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.Fr<   zRSet use_seal_recognition, but the models for seal recognition are not initialized.r;   zTSet use_table_recognition, but the models for table recognition are not initialized.T)r:   r
   errorr<   r;   )r3   r   s     r6   check_model_settings_valid1_LayoutParsingPipeline.check_model_settings_valid,  sv     ./8Q8QMMd ./8Q8QMMd /09S9SMMf r8   use_doc_orientation_classifyuse_doc_unwarpingr<   r;   r=   c                     Uc  Uc  U R                   nOUSL d  USL a  SnOSnUc  U R                  nUc  U R                  nUc  U R                  n[	        UUUUS9$ )a  
Get the model settings based on the provided parameters or default values.

Args:
    use_doc_orientation_classify (Optional[bool]): Whether to use document orientation classification.
    use_doc_unwarping (Optional[bool]): Whether to use document unwarping.
    use_seal_recognition (Optional[bool]): Whether to use seal recognition.
    use_table_recognition (Optional[bool]): Whether to use table recognition.

Returns:
    dict: A dictionary containing the model settings.
TF)r:   r<   r;   r=   )r:   r<   r;   r=   dict)r3   r   r   r<   r;   r=   r:   s          r6   get_model_settings)_LayoutParsingPipeline.get_model_settingsK  s    ( (/4E4M#'#<#< +t37HD7P'+$',$'#'#<#<  ($($>$>!"*&*&B&B#!5!5"7$;	
 	
r8   inputuse_textline_orientationlayout_thresholdrE   rF   rG   seal_det_limit_side_lenseal_det_limit_typeseal_det_threshseal_det_box_threshseal_det_unclip_ratioseal_rec_score_threshc              +     #    U R                  UUUUU5      nU R                  U5      (       d  SS0v   [        U R                  U5      5       GH  u  nnU R	                  UR
                  5      S   nUS   (       a  [        U R                  UUUS95      S   nOSU0nUS   n[        U R                  UUU	U
US95      S   n[        U R                  UUUUUUUUS95      S   n US	   (       a'  [        U R                  US
S
S
S
U US95      S   n!U!S   n"O/ n"US   (       a+  [        U R                  US
S
S
UUUUUUUS95      S   n#U#S   n$O/ n$US   (       a%  [        U R                  US
S
S
US95      S   n%U%S   n&O/ n&U R                  UUU U"U$U&UUUUUUS9n'UR                  S   UR                  S   UUU U"U$U&U'US.
n([!        U(5      v   GM     g7f)a	  
This function predicts the layout parsing result for the given input.

Args:
    input (Union[str, list[str], np.ndarray, list[np.ndarray]]): The input image(s) or pdf(s) to be processed.
    use_doc_orientation_classify (Optional[bool]): Whether to use document orientation classification.
    use_doc_unwarping (Optional[bool]): Whether to use document unwarping.
    use_textline_orientation (Optional[bool]): Whether to use textline orientation prediction.
    use_seal_recognition (Optional[bool]): Whether to use seal recognition.
    use_table_recognition (Optional[bool]): Whether to use table recognition.
    use_formula_recognition (Optional[bool]): Whether to use formula recognition.
    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`.
    text_det_limit_side_len (Optional[int]): Maximum side length for text detection.
    text_det_limit_type (Optional[str]): Type of limit to apply for text detection.
    text_det_thresh (Optional[float]): Threshold for text detection.
    text_det_box_thresh (Optional[float]): Threshold for text detection boxes.
    text_det_unclip_ratio (Optional[float]): Ratio for unclipping text detection boxes.
    text_rec_score_thresh (Optional[float]): Score threshold for text recognition.
    seal_det_limit_side_len (Optional[int]): Maximum side length for seal detection.
    seal_det_limit_type (Optional[str]): Type of limit to apply for seal detection.
    seal_det_thresh (Optional[float]): Threshold for seal detection.
    seal_det_box_thresh (Optional[float]): Threshold for seal detection boxes.
    seal_det_unclip_ratio (Optional[float]): Ratio for unclipping seal detection boxes.
    seal_rec_score_thresh (Optional[float]): Score threshold for seal recognition.

    **kwargs: Additional keyword arguments.

Returns:
    LayoutParsingResult: The predicted layout parsing result.
r   z0the input params for model settings are invalid!r   r:   )r   r   
output_img)rD   rE   rF   rG   )r   rc   rd   re   rf   rg   rh   r;   F)r   r   use_layout_detectionuse_ocr_modelr_   r^   r`   r<   )
r   r   r   r^   r   r   r   r   r   r   ra   r=   )r   r   r   r^   rb   )r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   )

input_path
page_indexdoc_preprocessor_resr^   r_   r`   ra   rb   parsing_res_listmodel_settingsN)r   r   r   r0   r1   	instancesr   rN   rP   rQ   rS   rR   rT   r   input_pathspage_indexesr   ))r3   r   r   r   r   r<   r;   r=   r   rE   rF   rG   rc   rd   re   rf   rg   rh   r   r   r   r   r   r   r4   r   img_id
batch_dataimage_arrayr   doc_preprocessor_imager^   r_   table_res_allr`   seal_res_allra   formula_res_allrb   r   single_img_ress)                                            r6   predict_LayoutParsingPipeline.predictw  s    B 00( !#
 ..~>>NOO"+D,>,>u,E"FFJ//**>*>?BK45'+22#5Q*; 3 ( ($ )5k'B$%9,%G"!%%*.)(;-E &  N #))*-E,C(;$3(;*?*? * 	 O 56 $33.5:*/-2&+(7'5 4 
! 
! "//?!@!#45#22.5:*/-2'50G,?(7,?.C.C 3     !-_ = "78"&55.-25:*/'5 6 # # $33E#F #% #::&- /-+!1(?$7 /$7&;&;  ;    )44Q7(55a8(<"0#2"0!.$4$4"0N &n55i #Gs   GG)r2   r0   rN   rT   rQ   r1   rP   rR   rS   r:   r=   r<   r;   )NNNNNN)NNNNNNNNNNNNNNNNNNNNNN) __name__
__module____qualname____firstlineno____doc__r   r   strr   r   boolr   r   r.   r/   r   r   r   r   floatr   r   r   r   r   r   ndarrayr   r   r   __static_attributes____classcell__)r5   s   @r6   r   r   "   s   ! !% $2659AE(,(, 	(,
 (,  S#X/(, 12(, (, U4S>9#<=>(, 
(, (,TV V$ V@ 26-1+//31515B"B" "B" #	B"
 B" B" B" "*#B" &c]B" "%B" &e_B"  (B"  (B" 
B"Ht  >*
&.tn*
 $D>*
 'tn	*

  (~*
 "*$*
 
*
^ 8<,037/304269=%)QU2615-1+//3151515-1+//315151@6S$s)RZZbjj1AAB@6 '/tn@6 $D>	@6
 #+4.@6 'tn@6  (~@6 "*$@6 #5#56@6 TN@6 &eE53F,L&MN@6 #+3-@6 "*#@6 &c]@6 "%@6  &e_!@6"  (#@6$  (%@6& "*#'@6( &c])@6* "%+@6, &e_-@6.  (/@60  (1@64 
5@6 @6r8   r   ocrc                   0    \ rS rSrS/r\S 5       rS rSrg)LayoutParsingPipelinei:  layout_parsingc                     [         $ )N)r   )r3   s    r6   _pipeline_cls#LayoutParsingPipeline._pipeline_cls>  s    %%r8   c                     g)Nr   r,   )r3   r&   s     r6   _get_batch_size%LayoutParsingPipeline._get_batch_sizeB  s    r8   r,   N)	r   r   r   r   entitiespropertyr   r   r   r,   r8   r6   r   r   :  s!     !H& &r8   r   )'typingr   r   r   r   r   r   numpyr   utilsr
   
utils.depsr   common.batch_samplerr   common.readerr   modelsr   r   models.object_detection.resultr   utils.benchmarkr   	_parallelr   baser   
componentsr   
ocr.resultr   resultr   r   r   time_methodsr   r   r,   r8   r6   <module>r      s}    ; :   2 5 & 6 7 ( @  $ " ' ? T6\ T6 T6n D   r8   