o
    ߥi                     @   s   d dl Z d dlZd dlmZ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 d dlmZ d	d
lmZ d	dlmZ ejejejdG dd deZejejejdG dd deZdS )    N)DictOptional)Models)
TorchModel)Tensor)MODELS)update_conf)Tasks   )FSMNSeleNetV2)FSMNSeleNetV3)module_namec                       sv   e Zd ZdZeZdZdZ	ddede	e
 f fddZd	d
 Zdeeef deeef fddZdefddZ  ZS )FSMNSeleNetV2DecoratorzH A decorator of FSMNSeleNetV2 for integrating into modelscope framework z	model.txtzsound_connect.confF	model_dirtrainingc           
         s   t  j|g|R i | |r| j|i || _dS tj|| j}tj|| j}t	
 | _tj| jj| j}d| _tj|ret|d}t||| ddl}	|	|| _| j | _| j | _dS td| d)zinitialize the dfsmn model from the `model_dir` path.

        Args:
            model_dir (str): the model path.
        N)	kws_modelr   z4Invalid model directory! Failed to load model file: .)super__init__MODEL_CLASSmodelospathjoin	SC_CONFIG	MODEL_TXTtempfileTemporaryDirectorytmp_dirname_scexistsdictr   py_sound_connectSoundConnectbytesPerBlockInsize_inbytesPerBlockOutsize_out	Exception)
selfr   r   argskwargssc_config_filemodel_txt_filenew_config_file	conf_dictr$   	__class__ ^/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/audio/kws/farfield/model.pyr      s(   


zFSMNSeleNetV2Decorator.__init__c                 C   s   t | dr| j  d S d S )Nr   )hasattrr   cleanup)r+   r4   r4   r5   __del__:   s   
zFSMNSeleNetV2Decorator.__del__inputreturnc                 C   s   | j |S )N)r   forward)r+   r9   r4   r4   r5   r;   >   s   zFSMNSeleNetV2Decorator.forwarddatac                 C   sd   d| j || ji}| j  }|dkr0| j | j  | j  | j  | j  | j 	 d|d< |S )Npcm   )keywordoffsetchannellength
confidencekws)
r!   processr)   kwsState
kwsKeywordkwsSpottedKeywordIndexkwsKeywordOffsetkwsBestChannelkwsKeywordLengthkwsConfidence)r+   r<   resultstater4   r4   r5   forward_decodeA   s   

z%FSMNSeleNetV2Decorator.forward_decodeF)__name__
__module____qualname____doc__r   r   r   r   strr   boolr   r8   r   r   r;   bytesrO   __classcell__r4   r4   r2   r5   r      s     "r   c                       s6   e Zd ZdZeZ	ddedee f fddZ	  Z
S )FSMNSeleNetV3DecoratorzH A decorator of FSMNSeleNetV3 for integrating into modelscope framework Fr   r   c                    s    t  j||g|R i | dS )r   N)r   r   )r+   r   r   r,   r-   r2   r4   r5   r   X   s    
zFSMNSeleNetV3Decorator.__init__rP   )rQ   rR   rS   rT   r   r   rU   r   rV   r   rX   r4   r4   r2   r5   rY   P   s    rY   )r   r   typingr   r   modelscope.metainfor   modelscope.modelsr   modelscope.models.baser   modelscope.models.builderr   "modelscope.utils.audio.audio_utilsr   modelscope.utils.constantr	   fsmn_sele_v2r   fsmn_sele_v3r   register_modulekeyword_spottingspeech_dfsmn_kws_char_farfieldr   "speech_dfsmn_kws_char_farfield_iotrY   r4   r4   r4   r5   <module>   s(   =