
    9iMe                     8   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  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"  SSK	J#r#J$r$  \RJ                   " 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)	DetResult)	benchmark)	HPIConfig)PaddlePredictorOption   )(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\	\
\\\4   \4      S	S4U 4S
 jjjrS\S	S4S jr      S0S\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                      S1S!\
\\\   \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+\	\   S,\	\   S	\40S- jjrS.rU =r$ )2_LayoutParsingPipeline#   zLayout Parsing PipelineNconfigdevice	pp_optionuse_hpip
hpi_configreturnc                    > [         TU ]  X#XES9  U R                  U5        [        SS9U l        [        SS9U l        [        5       U l        g)aQ  Initializes the layout parsing pipeline.

Args:
    config (Dict): Configuration dictionary containing various settings.
    device (str, optional): Device to run the predictions on. Defaults to None.
    pp_option (PaddlePredictorOption, optional): PaddlePredictor options. Defaults to None.
    use_hpip (bool, optional): Whether to use the high-performance
        inference plugin (HPIP) by default. Defaults to False.
    hpi_config (Optional[Union[Dict[str, Any], HPIConfig]], optional):
        The default high-performance inference configuration dictionary.
        Defaults to None.
)r    r!   r"   r#   r   )
batch_sizeBGR)formatN)	super__init__inintial_predictorr   batch_samplerr   
img_readerr   _crop_by_boxes)selfr   r    r!   r"   r#   	__class__s         s/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/paddlex/inference/pipelines/layout_parsing/pipeline.pyr*   _LayoutParsingPipeline.__init__'   sO    * 	 	 	
 	'.!<#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!)getr5   r6   r7   r8   create_pipelinedoc_preprocessor_pipelinecreate_modellayout_det_modelgeneral_ocr_pipelineseal_recognition_pipelinetable_recognition_pipelineformula_recognition_pipeline)r/   r   doc_preprocessor_configlayout_det_configlayout_kwargsr?   r@   rA   rB   general_ocr_configseal_recognition_configtable_recognition_configformula_recognition_configs                r1   r+   )_LayoutParsingPipeline.inintial_predictorG   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- 	r3   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 ) a8  
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   )r^   r_   r`   ra   rb   rc   F)flag_within	rec_boxes
other_text)w)nparray	enumeratelowerappendlenjoinr   rG   valuesonesshapert   intlistrL   zipr   )'r/   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   layout_parsing_resmatched_ocr_dictformula_indextable_index
seal_indexobject_boxesobject_box_idxbox_infosingle_box_resboxrg   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'                                          r1   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.
r5   zRSet use_doc_preprocessor, but the models for doc preprocessor are not initialized.Fr7   zRSet use_seal_recognition, but the models for seal recognition are not initialized.r6   zTSet use_table_recognition, but the models for table recognition are not initialized.T)r5   r
   errorr7   r6   )r/   r   s     r1   check_model_settings_valid1_LayoutParsingPipeline.check_model_settings_valid#  sv     ./8Q8QMMd ./8Q8QMMd /09S9SMMf r3   use_doc_orientation_classifyuse_doc_unwarpingr7   r6   r8   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)r5   r7   r6   r8   )r5   r7   r6   r8   dict)r/   r   r   r7   r6   r8   r5   s          r1   get_model_settings)_LayoutParsingPipeline.get_model_settingsB  s    ( (/4E4M#'#<#< +t37HD7P'+$',$'#'#<#<  ($($>$>!"*&*&B&B#!5!5"7$;	
 	
r3   inputuse_textline_orientationlayout_thresholdr@   rA   rB   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 (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   r5   )r   r   
output_img)r?   r@   rA   rB   )r   r^   r_   r`   ra   rb   rc   r6   F)r   r   use_layout_detectionuse_ocr_modelrZ   rY   r[   r7   )
r   r   r   rY   r   r   r   r   r   r   r\   r8   )r   r   r   rY   r]   )rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   )

input_path
page_indexdoc_preprocessor_resrY   rZ   r[   r\   r]   parsing_res_listmodel_settingsN)r   r   r|   r,   r-   	instancesr   rI   rK   rL   rN   rM   rO   r   input_pathspage_indexesr   ))r/   r   r   r   r   r7   r6   r8   r   r@   rA   rB   r^   r_   r`   ra   rb   rc   r   r   r   r   r   r   kwargsr   img_id
batch_dataimage_arrayr   doc_preprocessor_imagerY   rZ   table_res_allr[   seal_res_allr\   formula_res_allr]   r   single_img_ress)                                            r1   predict_LayoutParsingPipeline.predictn  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)r.   r,   rI   rO   rL   r-   rK   rM   rN   r5   r8   r7   r6   )NNFN)NNNNNN)NNNNNNNNNNNNNNNNNNNNNN) __name__
__module____qualname____firstlineno____doc__r   strr   boolr   r   r   r   r*   r+   r   r   r   r   floatr   r   r   r   r   rz   ndarrayr   r   r   __static_attributes____classcell__)r0   s   @r1   r   r   #   s   !
 +/AE,, , )	,
 , U4S>9#<=>, 
, ,@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 @6r3   r   ocrc                   0    \ rS rSrS/r\S 5       rS rSrg)LayoutParsingPipelinei1  layout_parsingc                     [         $ )N)r   )r/   s    r1   _pipeline_cls#LayoutParsingPipeline._pipeline_cls5  s    %%r3   c                     g)Nr    )r/   r   s     r1   _get_batch_size%LayoutParsingPipeline._get_batch_size9  s    r3   r   N)	r   r   r   r   entitiespropertyr   r   r   r   r3   r1   r   r   1  s!     !H& &r3   r   )(typingr   r   r   r   r   r   numpyrz   utilsr
   
utils.depsr   common.batch_samplerr   common.readerr   models.object_detection.resultr   utils.benchmarkr   	utils.hpir   utils.pp_optionr   	_parallelr   baser   
componentsr   
ocr.resultr   resultr   r   r   time_methodsr   r   r   r3   r1   <module>r      s    ; :   2 5 & 7 ( " 4 @  $ " ' ? J6\ J6 J6Z D   r3   