o
    ߥi~                     @   s   d dl 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
 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dG dd	 d	e	ZdS )
    N)Preprocessors)Preprocessor
load_image)PREPROCESSORS)Config)FieldsModeKeys	ModelFile)module_namec                       s<   e Zd Zejfdedef fddZdd Zdd Z  Z	S )	OCRRecognitionPreprocessor	model_dirmodec                    sJ   t  | ttj|tj}|j	j
j| _|j	j
j| _|j	j
j| _dS )zThe base constructor for all ocr recognition preprocessors.

        Args:
            model_dir (str): model directory to initialize some resource
            mode: The mode for the preprocessor.
        N)super__init__r   	from_fileospathjoinr	   CONFIGURATIONmodelinference_kwargsdo_chunking
img_heighttarget_height	img_widthtarget_width)selfr   r   cfgs	__class__ e/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/cv/ocr_recognition/preprocessor.pyr      s   z#OCRRecognitionPreprocessor.__init__c                 C   s   |j d t|j d  }| j}| j}|t| j| j kr#| j}| j}n
| j}t| j| }t|||f}t||dg	tj
}||d |j d d |j d d d f< |}|S )N   r      )shapefloatr   r   intcv2resizenpzerosastypeuint8)r   img	cur_ratiomask_height
mask_widthcur_target_heightcur_target_widthmaskr    r    r!   keepratio_resize#   s   &z+OCRRecognitionPreprocessor.keepratio_resizec           
   	   C   sr  t |ts|g}g }|D ]}t |trtt|d}n1t |tjjr.t|d}n!t |tj	rFt
|jdkrCt|tj}n|}n	tdt| | |}t|}| jrg }tdD ]}d| }||dd||d ddf  qbt|d}|d| jddd	 }	|	ddd
d}	n|d
| j| jdd	 }	|	ddd
d}	||	 qt|d}d|iS )aE  process the raw input data
        Args:
            inputs:
                - A string containing an HTTP link pointing to an image
                - A string containing a local path to an image
                - An image loaded in PIL or opencv directly
        Returns:
            outputs: the preprocessed image
        RGB   zFinputs should be either (a list of) str, PIL.Image, np.array, but got r#      Ni,  r   g     o@r"   image)
isinstanceliststrr)   arrayr   convertPILImagendarraylenr$   r'   cvtColorCOLOR_GRAY2RGB	TypeErrortyper4   torchFloatTensorr   rangeappendcatviewr   permuter   )
r   inputs
data_batchitemr-   	chunk_imgileft	merge_imgdatar    r    r!   __call__3   sD   




&z#OCRRecognitionPreprocessor.__call__)
__name__
__module____qualname__r   	INFERENCEr;   r   r4   rU   __classcell__r    r    r   r!   r      s    r   )r   r'   numpyr)   r>   rF   modelscope.metainfor   modelscope.preprocessorsr   r    modelscope.preprocessors.builderr   modelscope.utils.configr   modelscope.utils.constantr   r   r	   register_modulecvocr_recognitionr   r    r    r    r!   <module>   s   