o
    W+ i                     @   s   d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZmZ dd Zdd Zi Zi ZG d	d
 d
ejZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  ZdS )!    N)BytesIO)TASK_OUTPUTS
OutputKeys)TASK_INPUTS	InputTypec                 C   s(   t | }t|d|dd}|S )Nimagetextr   r   )jsonloadsdecode_base64_to_imageget)dataZ	data_jsonZinputs r   j/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/modelscope/utils/service_utils.pyExampleDecoder   s
   
r   c                 C   s,   | d }| d }t ||d} tj| tdS )Nr   r   r	   cls)encode_array_to_img_base64r
   dumpsNumpyEncoder)r   r   r   r   r   r   ExampleEncoder   s   r   c                   @   s   e Zd Zdd ZdS )r   c                 C   sJ   t |tjr
| S t |tjrt|S t |tjrt|S tj	
| |S N)
isinstancenpZndarraytolistZfloatingfloatintegerintr
   JSONEncoderdefault)selfobjr   r   r   r    5   s   zNumpyEncoder.defaultN)__name__
__module____qualname__r    r   r   r   r   r   3   s    r   c                 C   sR   |  dd} t| d }|dkrdS t|}|d ur'|dr'|dd  }|S )Nz	audio/wavzaudio/x-wavr   z
audio/flacflac.   )replace	mimetypes
guess_typeguess_extension
startswith)encodingtp	extensionr   r   r   get_extensionB   s   
r1   c                 C   s.   t | d }|d ur|dddd}|S )Nr   zx-wavZwavzx-flacr&   )r*   r+   r)   )filenamemimetyper   r   r   get_mimetypeM   s   r4   c                 C   s$   t | }| dd }t||fS )N,r(   )r1   splitbase64	b64decode)r.   r0   r   r   r   r   decode_base64_to_binaryT   s   r9   c                 C   s<   ddl m} | dd }|dd }|tt|S )Nr   Image;r(   r5   )PILr;   r6   openr   r7   r8   )r.   r;   contentZimage_encodedr   r   r   r   Z   s   r   c                 C   sp   ddl m} t }|| tj}||d | }W d    n1 s'w   Y  t	t
|d}d| S )Nr   r:   ZPNGutf-8zdata:image/png;base64,)r=   r;   r   Z	fromarrayZastyper   Zuint8savegetvaluestrr7   	b64encode)Zimage_arrayr;   Zoutput_bytesZ	pil_image
bytes_data
base64_strr   r   r   r   a   s   
r   c                 C   s`   ddl m} t }||d|  tt| d}W d    d| S 1 s'w   Y  d| S )Nr   )writei>  r@   zdata:audio/pcm;base64,)Zscipy.io.wavfilerG   r   rC   r7   rD   rB   )rE   rG   Zout_mem_filerF   r   r   r   encode_pcm_to_base64k   s   
rH   c                 C   s@   t t| j}t|d}t| }d|d ur|nd d | S )Nr@   data: ;base64,)r7   rD   requestsr   r?   rC   r4   )urlencoded_stringrF   r3   r   r   r   encode_url_to_base64s   s   
rO   c                 C   sj   t | d&}t| }t|d}t| }d|d ur|nd d | W  d    S 1 s.w   Y  d S )Nrbr@   rI   rJ   rK   )r>   r7   rD   readrC   r4   )ffilerN   rF   r3   r   r   r   encode_file_to_base64{   s   
$rT   c              	   C   s<   z
t |  t| W S  t jjt jjfy   t|  Y S w r   )rL   r   rO   
exceptionsMissingSchemaInvalidSchemarT   )pathr   r   r   encode_url_or_file_to_base64   s   


rY   c                 C   s   t | d urt |  |S |d}t|  }t|tr|d }|tjkr(t|S |tj	kr3t
|d S |tjkr:|S t|tr|i }t|}| D ]1\}}|tjkr\t|| ||< qJ|tj	krlt
|| d ||< qJ|tjkrx|| ||< qJ|  S |S )Nr@   r   )CustomDecoderr   decoder   r   listr   ZIMAGEr   ZAUDIOr9   ZTEXTdictr
   r   items)taskr   Z
input_dataZ
input_typekeyvalr   r   r   service_data_decoder   s0   









rb   c                 C   s   t | d urt |  |S t|  }|}|D ](}|tjkr.t|tj dd d df |tj< q|tjkr=t|tj |tj< qtt	j
|tddd}|S )N.r   utf8)r.   )CustomEncoderr   r   r   Z
OUTPUT_IMGr   Z
OUTPUT_PCMrH   bytesr
   r   r   )r_   r   Zoutput_keysresultZ
output_keyr   r   r   service_data_encoder   s    


rh   )r7   r*   ior   r
   numpyr   rL   Zmodelscope.outputsr   r   Zmodelscope.pipeline_inputsr   r   r   r   re   rZ   r   r   r1   r4   r9   r   r   rH   rO   rT   rY   rb   rh   r   r   r   r   <module>   s0    
		