o
    ॵil                     @   s   d dl Z d dlmZmZmZm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 d dlmZ d dlmZ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)AnyDictListUnion)	Pipelines)Model)Pipeline)	PIPELINES)
WavToLists)extract_pcm_from_wavload_bytes_from_url)Tasks)
get_loggerKeyWordSpottingKwsbpPipeline)module_namec                       s   e Zd ZdZ		ddeeef def fddZdee	e ee
f deeef fd	d
Zdeeef deeef fddZdeeef deeef fddZdeeef deeef fddZ  ZS )r   z.KWS Pipeline - key word spotting decoding
    Nmodelpreprocessorc                    s   t  jd||d| dS )zOuse `model` and `preprocessor` to create a kws pipeline for prediction
        )r   r   N )super__init__)selfr   r   kwargs	__class__r   a/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/audio/kws_kwsbp_pipeline.pyr      s   z%KeyWordSpottingKwsbpPipeline.__init__audio_inreturnc                 K   s   d|  v r#|d | _t| jtr"g }i }| j|d< || || _nd | _| jd u r/t | _t|tr;t|\}}nt|trFt	|\}}| j
| j
d |}| 
|}| |}|S )Nkeywordskeyword)keysr   
isinstancestrappendr   r
   r   bytesr   forwardr   postprocess)r   r   r   	word_listwordaudio_fsoutputrstr   r   r   __call__$   s(   







z%KeyWordSpottingKwsbpPipeline.__call__inputsc                 C   s$   t d|d  d | |}|S )zDecoding
        zDecoding with kws_typez	 mode ...)loggerinforun_with_kwsbp)r   r,   outr   r   r   r$   A   s   
z$KeyWordSpottingKwsbpPipeline.forwardc                 C   sZ   ddl }d}d}d|v r|d }d|v r|d }|jj|d ||d}d|vr+g |d< |S )u  process the kws results

        Args:
          inputs['pos_kws_list'] or inputs['neg_kws_list']:
          result_dict format example:
            [{
              'confidence': 0.9903678297996521,
              'filename': 'data/test/audios/kws_xiaoyunxiaoyun.wav',
              'keyword': '小云小云',
              'offset': 5.760000228881836,  # second
              'rtf_time': 66,               # millisecond
              'threshold': 0,
              'wav_time': 9.1329375         # second
            }]
        r   Npos_kws_listneg_kws_listr-   )r-   pos_listneg_listkws_list)kws_util.commoncommonparsing_kws_result)r   r,   kws_utilr3   r2   rst_dictr   r   r   r%   L   s   z(KeyWordSpottingKwsbpPipeline.postprocessc           	      C   sf  dd l }dd l}| }|d |d |d dd dd|j| jd}|d d	kr:|d
 |d< t|d
 |d< d|d< |d dkrKtj	|d d|d< |d dv r|d |d< |d |d< |d |d< t
|dr||d |d |d tt|d t|d |d |d |d |d |d 
}n ||d |d |d tt|d t|d |d |d }t|}|d |d< |d dv r1|d |d< |d |d< |d |d< t
|dr||d |d |d tt|d t|d |d |d |d |d |d 
}n ||d |d |d tt|d t|d |d |d }t|}|d |d < |S )!Nr   model_workspacecfg_file_pathsample_rate T)sys_dircfg_filer>   keyword_custompcm_datapcm_data_len	list_flagcustomized_keywordsr-   pcmpos_datarC   rD   FrE   roczkeywords_roc.jsonkeyword_grammar_path)wavrG   pos_testsetsrI   pos_wav_listwave_scppos_num_thread
num_threadinference_newr@   rA   rF   r6   r2   )neg_testsetsrI   neg_wav_listneg_num_threadr3   )kwsbpr7   KwsbpEnginer8   generate_customized_keywordsr   lenospathjoinhasattrrQ   r!   jsondumps	inferenceloads)	r   r,   rU   r:   kws_inferencecmdresult
pos_result
neg_resultr   r   r   r0   o   s   
	
	
z+KeyWordSpottingKwsbpPipeline.run_with_kwsbp)NN)__name__
__module____qualname____doc__r   r   r!   r
   r   r   r#   r   r   r+   r$   r%   r0   __classcell__r   r   r   r   r      s    


""*#)rY   typingr   r   r   r   r]   modelscope.metainfor   modelscope.modelsr   modelscope.pipelines.baser   modelscope.pipelines.builderr	   modelscope.preprocessorsr
   "modelscope.utils.audio.audio_utilsr   r   modelscope.utils.constantr   modelscope.utils.loggerr   r.   __all__register_modulekeyword_spotting	kws_kwsbpr   r   r   r   r   <module>   s"   