o
    ॵ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)data	data_jsoninputs r   R/home/ubuntu/.local/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npndarraytolist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   
r5   c                 C   s.   t | d }|d ur|dddd}|S )Nr   zx-wavwavzx-flacr*   )r.   r/   r-   )filenamemimetyper   r   r   get_mimetypeM   s   r9   c                 C   s$   t | }| dd }t||fS )N,r,   )r5   splitbase64	b64decode)r2   r4   r   r   r   r   decode_base64_to_binaryT   s   r>   c                 C   s<   ddl m} | dd }|dd }|tt|S )Nr   Image;r,   r:   )PILr@   r;   openr   r<   r=   )r2   r@   content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?   PNGutf-8zdata:image/png;base64,)rB   r@   r   	fromarrayastyper   uint8savegetvaluestrr<   	b64encode)image_arrayr@   output_bytes	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>  rG   zdata:audio/pcm;base64,)scipy.io.wavfilerT   r   rM   r<   rN   rL   )rR   rT   out_mem_filerS   r   r   r   encode_pcm_to_base64k   s   
rW   c                 C   s@   t t| j}t|d}t| }d|d ur|nd d | S )NrG   data: ;base64,)r<   rN   requestsr   rD   rM   r9   )urlencoded_stringrS   r8   r   r   r   encode_url_to_base64s   s   
r^   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rbrG   rX   rY   rZ   )rC   r<   rN   readrM   r9   )ffiler]   rS   r8   r   r   r   encode_file_to_base64{   s   
$rc   c              	   C   s<   z
t |  t| W S  t jjt jjfy   t|  Y S w r   )r[   r   r^   
exceptionsMissingSchemaInvalidSchemarc   )pathr   r   r   encode_url_or_file_to_base64   s   


rh   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 )NrG   r   )CustomDecoderr   decoder   r   listr   IMAGEr   AUDIOr>   TEXTdictr
   r   items)taskr   
input_data
input_typekeyvalr   r   r   service_data_decoder   s0   









rv   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)r2   )CustomEncoderr   r   r   
OUTPUT_IMGr   
OUTPUT_PCMrW   bytesr
   r   r   )rq   r   output_keysresult
output_keyr   r   r   service_data_encoder   s    


r   )r<   r.   ior   r
   numpyr   r[   modelscope.outputsr   r   modelscope.pipeline_inputsr   r   r   r   ry   ri   r#   r   r5   r9   r>   r   r   rW   r^   rc   rh   rv   r   r   r   r   r   <module>   s0    
		