
    Ng                         d dl Z d dlZ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mZmZ ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        dZ  e eed	d
          e            e eed	d          e            e eed	d          e           dZ! G d de          Z"ddZ#ddZ$ddZ%d Z&d Z'dS )    N)_pybind_state)Image)ElementTypeSource)LayoutElements) UnstructuredObjectDetectionModel)LazyDictLazyEvaluateInfo%download_if_needed_and_get_local_path)r                           	   
   zunstructuredio/yolo_x_layoutzyolox_l0.05.onnx)
model_path	label_mapzyolox_tiny.onnxzyolox_l0.05_quantized.onnx)yolox
yolox_tinyyolox_quantizedc                   X     e Zd Zdej        f fdZdedefdZdej        de	fdZ
 xZS )	UnstructuredYoloXModelxc                 p    t                                          |           |                     |          S )zPredict using YoloX model.)superpredictimage_processing)selfr   	__class__s     _/var/www/html/ai-engine/env/lib/python3.11/site-packages/unstructured_inference/models/yolox.pyr    zUnstructuredYoloXModel.predictB   s-    $$Q'''    r   r   c                     || _         t          j                    g d}fd|D             }t          j        ||          | _        || _        dS )z(Start inference session for YoloX model.)TensorrtExecutionProviderCUDAExecutionProviderCPUExecutionProviderc                     g | ]}|v |	S  r+   ).0provideravailable_providerss     r$   
<listcomp>z5UnstructuredYoloXModel.initialize.<locals>.<listcomp>Q   s$    ccc(8ObCbCbXCbCbCbr%   )	providersN)r   Cget_available_providersonnxruntimeInferenceSessionmodellayout_classes)r"   r   r   ordered_providersr0   r.   s        @r$   
initializez!UnstructuredYoloXModel.initializeG   sw    $799
 
 

 dccc.?ccc	 1
 
 


 (r%   imagereturnc                    d}t          j        |          }t          ||          \  }}| j        }|                                d         j        |dddddddf         i}|                    d|          }t          |d         |d          d         }	|	ddddf         }
|	ddddf         |	ddddf         z  }t          j        |
          }|
dddf         |
dddf         d	z  z
  |dddf<   |
ddd
f         |
dddf         d	z  z
  |ddd
f<   |
dddf         |
dddf         d	z  z   |dddf<   |
ddd
f         |
dddf         d	z  z   |dddf<   ||z  }d| j	        v rt          ||dd          }nt          ||dd          }t          j        |ddd
f                   }||         }t          |ddddf                             t                    |dddf                             t                    |dddf                             t                    | j        t"          j                  S )a  Method runing YoloX for layout detection, returns a PageLayout
        parameters
        ----------
        page
            Path for image file with the image to process
        origin_img
            If specified, an Image object for process with YoloX model
        page_number
            Number asigned to the PageLayout returned
        output_directory
            Boolean indicating if result will be stored
        )i   i   r   NF)p6r   r   r   g       @r   r   	quantized        gQ?)nms_thr	score_thrg?g      ?)element_coordselement_probselement_class_idselement_class_id_mapsource)nparray
preprocessr5   
get_inputsnamerundemo_postprocess	ones_liker   multiclass_nmsargsortr   astypefloatintr6   r   YOLOX)r"   r9   input_shape
origin_imgimgratiosession
ort_inputsoutputpredictionsboxesscores
boxes_xyxydetsordersorted_detss                   r$   r!   z'UnstructuredYoloXModel.image_processingZ   s   $ "Xe__

K88
U*((**1-2CaaaAAA4FG
T:..&vay+%HHHKAAArrE"QQQ!V${111abb5'99\%((
 A;qqq!ts)::
111a4 A;qqq!ts)::
111a4 A;qqq!ts)::
111a4 A;qqq!ts)::
111a4e
 $/))!*fcTRRRDD!*fcTRRRD
41:&&5k&qqq"1"u-44U;;%aaad+22599)!!!Q$/66s;;!%!4<
 
 
 	
r%   )__name__
__module____qualname__PILImager   r    strdictr8   r   r!   __classcell__)r#   s   @r$   r   r   A   s        ( ( ( ( ( ( (
(S (T ( ( ( (&6
~6
 
6
 6
 6
 6
 6
 6
 6
 6
r%   r   r   r   r   c                 .   t          | j                  dk    r3t          j        |d         |d         dft          j                  dz  }n#t          j        |t          j                  dz  }t          |d         | j        d         z  |d         | j        d         z            }t          j        | t          | j        d         |z            t          | j        d         |z            ft          j	                  
                    t          j                  }||dt          | j        d         |z            dt          | j        d         |z            f<   |                    |          }t          j        |t          j                  }||fS )z-Preprocess image data before YoloX inference.r   r   r   )dtyper   )interpolationN)lenshaperF   onesuint8mincv2resizerR   INTER_LINEARrP   	transposeascontiguousarrayfloat32)rV   
input_sizeswap
padded_imgrresized_imgs         r$   rH   rH      sd   
39~~WjmZ]A>bhOOORUU

WZrx8883>
JqMCIaL(*Q-#)A,*FGGA*	SYq\A		CIaL1$4 5 56&   fRX	 
 DOJ&SYq\A%&&&(?#cilQ.>*?*?(??@%%d++J%j
CCCJq=r%   Fc                    g }g }|sg dng d}fd|D             }fd|D             }t          |||          D ]\  }}	}
t          j        t          j        |	          t          j        |                    \  }}t          j        ||fd                              ddd          }|                    |           |j        dd         }|                    t          j        g |dR |
                     t          j	        |d          }t          j	        |d          }| d	ddf         |z   |z  | d	ddf<   t          j
        | d	dd
f                   |z  | d	dd
f<   | S )zPostprocessing for YoloX model.)r          )r   r   r   @   c                 &    g | ]}d          |z  S )r   r+   r,   strideimg_sizes     r$   r/   z$demo_postprocess.<locals>.<listcomp>   "    :::hqkV#:::r%   c                 &    g | ]}d          |z  S )r   r+   r   s     r$   r/   z$demo_postprocess.<locals>.<listcomp>   r   r%   r   r   N.r   )ziprF   meshgridarangestackreshapeappendro   fullconcatenateexp)outputsr   r<   gridsexpanded_stridesstrideshsizeswsizeshsizewsizer   xvyvgridro   s    `             r$   rL   rL      s   E!#8kkkkG::::':::F::::':::F #FFG < < > >ufRYu--ry/?/?@@BxR!$$,,QA66T
2A2%V < <====N5!$$E~&6::RaR(504DDGC!GwsAaCx0114DDGC1HNr%   Tc                 ,    t           } || |||          S )z#Multiclass NMS implemented in Numpy)multiclass_nms_class_agnostic)r\   r]   r?   r@   class_agnostic
nms_methods         r$   rN   rN      s!     /J :eVWi888r%   c                 <   |                     d          }|t          j        t          |                    |f         }||k    }||         }| |         }||         }	t	          |||          }
t          j        ||
         ||
df         |	|
df         gd          }|S )z<Multiclass NMS implemented in Numpy. Class-agnostic version.r   N)argmaxrF   r   rn   nmsr   )r\   r]   r?   r@   cls_inds
cls_scoresvalid_score_maskvalid_scoresvalid_boxesvalid_cls_indskeepr_   s               r$   r   r      s    }}QH	#h--00(:;J!I-./L()K./N{L'22D>	T	Lt4nT4Z6PQ	 D Kr%   c                 ~   | dddf         }| dddf         }| dddf         }| dddf         }||z
  dz   ||z
  dz   z  }|                                 ddd         }g }	|j        dk    rP|d         }
|	                    |
           t          j        ||
         ||dd                            }t          j        ||
         ||dd                            }t          j        ||
         ||dd                            }t          j        ||
         ||dd                            }t          j        d||z
  dz             }t          j        d||z
  dz             }||z  }|||
         ||dd                  z   |z
  z  }t          j        ||k              d         }||dz            }|j        dk    P|	S )z&Single class NMS implemented in Numpy.Nr   r   r   r   r   r>   )rO   sizer   rF   maximumminimumwhere)r\   r]   r?   x1y1x2y2areasr`   r   ixx1yy1xx2yy2whinterovrindss                       r$   r   r      s   	qqq!tB	qqq!tB	qqq!tB	qqq!tB"Wq[R"Wq[)ENNTTrT"ED
*q..!HAjA59..jA59..jA59..jA59..JsC#IM**JsC#IM**AuQx%abb	"22U:;xw''*dQh *q..  Kr%   )ri   )F)T)(rs   numpyrF   r3   onnxruntime.capir   r1   PILr   re    unstructured_inference.constantsr   r   .unstructured_inference.inference.layoutelementr   /unstructured_inference.models.unstructuredmodelr   unstructured_inference.utilsr	   r
   r   CAPTIONFOOTNOTEFORMULA	LIST_ITEMPAGE_FOOTERPAGE_HEADERPICTURESECTION_HEADERTABLETEXTTITLEYOLOX_LABEL_MAPMODEL_TYPESr   rH   rL   rN   r   r   r+   r%   r$   <module>r      sV   


         / / / / / / ! ! ! ! ! ! @ @ @ @ @ @ @ @ I I I I I I               !  X##1*
 

 "   (##1*
 

 "    x##1*(
 

 "  # 8O
 O
 O
 O
 O
= O
 O
 O
j   (   29 9 9 9  "    r%   