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	Z	d dl
m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 e Zd
gZejejejdG dd
 d
eZdS )    N)Union)File)	Pipelines)
OutputKeys)
InputModelPipeline)	PIPELINES)Tasks)
get_loggerLanguageRecognitionPipeline)module_namec                
       s   e Zd ZdZdef fddZ	ddeeee	j
f defdd	Zd
efddZ	dd
ededeeee	j
f fddZd
eeee	j
f fddZ  ZS )r   aT  Language Recognition Inference Pipeline
    use `model` to create a Language Recognition pipeline.

    Args:
        model (LanguageRecognitionPipeline): A model instance, or a model local dir, or a model id in the model hub.
        kwargs (dict, `optional`):
            Extra kwargs passed into the pipeline's constructor.
    Example:
    >>> from modelscope.pipelines import pipeline
    >>> from modelscope.utils.constant import Tasks
    >>> p = pipeline(
    >>>    task=Tasks.speech_language_recognition, model='damo/speech_eres2net_base_lre_en-cn_16k')
    >>> print(p(audio_in))

    modelc                    s0   t  jdd|i| | jj| _| jd | _dS )zuse `model` to create a Language Recognition pipeline for prediction
        Args:
            model (str): a valid offical model id
        r   	languagesN )super__init__r   model_configr   )selfr   kwargs	__class__r   u/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/audio/language_recognition_eres2net_pipeline.pyr   -   s   
z$LanguageRecognitionPipeline.__init__N	in_audiosout_filec                 C   s,   |  |}| |\}}| ||||}|S N)
preprocessforwardpostprocess)r   r   r   wavsscoresresultsoutputsr   r   r   __call__6   s   
z$LanguageRecognitionPipeline.__call__inputsc                 C   sD   g }g }|D ]}|  |\}}||  ||  q||fS r   )r   appendtolistitem)r   r#   r   r    xscoreresultr   r   r   r   >   s   z#LanguageRecognitionPipeline.forwardr   c                    s   t |trtj j|d  tj|i}|S tj fdd|D tj|i}|d urtg }t|D ]&\}}t |trCtj	|
ddd }	n|}	|d|	 j||  f  q-t|d}
|D ]}|
| q\W d    |S 1 sow   Y  |S )Nr   c                    s   g | ]} j | qS r   )r   ).0ir   r   r   
<listcomp>S   s    z;LanguageRecognitionPipeline.postprocess.<locals>.<listcomp>.   z%s %s
w)
isinstancestrr   TEXTr   SCORE	enumerateospathbasenamersplitr$   openwrite)r   r#   r   r   r   output	out_linesr+   audioaudio_idfr   r,   r   r   G   s2   


z'LanguageRecognitionPipeline.postprocessc                 C   s  g }t |tr_t|}tjt|dd\}}t|jdkr'|d d df }t	
|d}|| jd krStd| jd   tjj||dt| jd ggd\}}|d}|| |S tt|D ]}t || trt|| }tjt|dd\}}t|jdkr|d d df }t	
|d}|| jd krtd| jd   tjj||dt| jd ggd\}}|d}n5t || tjrt|| jd	ksJ d
|| }|jdv r|d d}n|d}t	
|}ntd|| qe|S )Nfloat32)dtype   r   sample_ratez0The sample rate of audio is not %d, resample it.rate)effectsr/   z.modelscope error: Input array should be [N, T])int16int32int64i   zOmodelscope error: The input type is restricted to audio address and nump array.)r1   r2   r   readsfioBytesIOlenshapetorch
from_numpy	unsqueezer   loggerwarning
torchaudiosox_effectsapply_effects_tensorsqueezer$   rangenpndarrayrB   astype
ValueError)r   r#   r<   
file_bytesdatafsr+   r   r   r   r   d   s|   




$


z&LanguageRecognitionPipeline.preprocessr   )__name__
__module____qualname____doc__r   r   r   r2   listrZ   r[   r"   r   r   r   __classcell__r   r   r   r   r      s&    

")rL   r6   typingr   numpyrZ   	soundfilerK   rP   rU   modelscope.fileior   modelscope.metainfor   modelscope.outputsr   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.utils.constantr	   modelscope.utils.loggerr
   rS   __all__register_modulespeech_language_recognition$speech_language_recognition_eres2netr   r   r   r   r   <module>   s*   