
    9il                     
   S SK r S SKJrJrJrJr  S SKrS SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  \" 5       rS/r\R4                  " \R6                  \R8                  S9 " S S\5      5       rg)    N)AnyDictListUnion)	Pipelines)Model)Pipeline)	PIPELINES)
WavToLists)extract_pcm_from_wavload_bytes_from_url)Tasks)
get_loggerKeyWordSpottingKwsbpPipeline)module_namec                      ^  \ rS rSrSr  SS\\\4   S\4U 4S jjjr	S\\
\   \\4   S\\\4   4S jrS	\\\4   S\\\4   4S
 jrS	\\\4   S\\\4   4S jrS	\\\4   S\\\4   4S jrSrU =r$ )r      z.KWS Pipeline - key word spotting decoding
    modelpreprocessorc                 *   > [         TU ]  " SXS.UD6  g)zOuse `model` and `preprocessor` to create a kws pipeline for prediction
        )r   r   N )super__init__)selfr   r   kwargs	__class__s       m/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/audio/kws_kwsbp_pipeline.pyr   %KeyWordSpottingKwsbpPipeline.__init__   s     	JuJ6J    audio_inreturnc                 T   SUR                  5       ;   aT  US   U l        [        U R                  [        5      (       a*  / n0 nU R                  US'   UR	                  U5        X0l        OS U l        U R
                  c  [        5       U l        [        U[        5      (       a  [        U5      u  pO"[        U[        5      (       a  [        U5      u  pU R
                  R                  U R                  R                  S 5      U5      nU R                  U5      nU R                  U5      nU$ )Nkeywordskeyword)keysr#   
isinstancestrappendr   r   r   bytesr   forwardr   postprocess)r   r    r   	word_listwordaudio_fsoutputrsts           r   __call__%KeyWordSpottingKwsbpPipeline.__call__$   s    &":.DM$----	"&--Y  & ) DM$ *Dh$$!4X!>Hh%((!5h!?H ""**4::+=+=d+CXNf%v&
r   inputsc                 `    [         R                  SUS    S35        U R                  U5      nU$ )zDecoding
        zDecoding with kws_typez	 mode ...)loggerinforun_with_kwsbp)r   r3   outs      r   r*   $KeyWordSpottingKwsbpPipeline.forwardA   s6     	nVJ%7$8	BC !!&)
r   c                     SSK nSnSnSU;   a  US   nSU;   a  US   nUR                  R                  US   UUS9nSU;  a  / US'   U$ )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_listr5   )r5   pos_listneg_listkws_list)kws_util.commoncommonparsing_kws_result)r   r3   kws_utilr=   r<   rst_dicts         r   r+   (KeyWordSpottingKwsbpPipeline.postprocessL   su    " 	V#!.1LV#!.1L??55J'!! 6 #
 X%#%HZ r   c                 T   SS K nSS KnUR                  5       nUS   US   US   SS SSUR                  R	                  U R
                  5      S.nUS   S	:X  a  US
   US'   [        US
   5      US'   SUS'   US   S:X  a&  [        R                  R                  US   S5      US'   US   S;   a  US   US'   US   US'   US   US'   [        US5      (       a_  UR                  US   US   US   [        [        R                  " US   5      5      [        US   5      US   US   US   US   US   5
      nORUR                  US   US   US   [        [        R                  " US   5      5      [        US   5      US   US   5      n[        R                   " U5      nUS   US'   US   S;   a  US   US'   US   US'   US   US'   [        US5      (       a_  UR                  US   US   US   [        [        R                  " US   5      5      [        US   5      US   US   US   US   US   5
      nORUR                  US   US   US   [        [        R                  " US   5      5      [        US   5      US   US   5      n[        R                   " U5      nUS   US '   U$ )!Nr   model_workspacecfg_file_pathsample_rate T)sys_dircfg_filerJ   keyword_custompcm_datapcm_data_len	list_flagcustomized_keywordsr5   pcmpos_datarO   rP   FrQ   roczkeywords_roc.jsonkeyword_grammar_path)wavrS   pos_testsetsrU   pos_wav_listwave_scppos_num_thread
num_threadinference_newrL   rM   rR   r@   r<   )neg_testsetsrU   neg_wav_listneg_num_threadr=   )kwsbprA   KwsbpEnginerB   generate_customized_keywordsr#   lenospathjoinhasattrr]   r'   jsondumps	inferenceloads)	r   r3   ra   rD   kws_inferencecmdresult
pos_result
neg_results	            r   r8   +KeyWordSpottingKwsbpPipeline.run_with_kwsbpo   s0   ))+ $%?#=! OO88G#
( *&$Z0C
O"%fZ&8"9C$C*&-/WW\\()+>.@F)* *!FF$^4C
O*01G*HC&' &'7 8C}o66&44	NC
O./

3z?34123S_']);S=N$& '00	NC
O./

3z?34123S5G%' F+J%/
%;F>"*!88$^4C
O*01G*HC&' &'7 8C}o66&44	NC
O./

3z?34123S_']);S=N$& '00	NC
O./

3z?34123S5G%' F+J%/
%;F>"r   )r#   r   )NN)__name__
__module____qualname____firstlineno____doc__r   r   r'   r   r   r   r)   r   r   r1   r*   r+   r8   __static_attributes____classcell__)r   s   @r   r   r      s     -1,0KeSj)K)K KtCy#u'<!= "38n:	d38n 	c3h 	!$sCx. !T#s(^ !FVT#s(^ VS#X V Vr   )re   typingr   r   r   r   ri   modelscope.metainfor   modelscope.modelsr   modelscope.pipelines.baser	   modelscope.pipelines.builderr
   modelscope.preprocessorsr   "modelscope.utils.audio.audio_utilsr   r   modelscope.utils.constantr   modelscope.utils.loggerr   r6   __all__register_modulekeyword_spotting	kws_kwsbpr   r   r   r   <module>r      su    	 ) )  ) # . 2 /E + .	)
* 		(;(;=m8 m=mr   