o
    oi                     @   s~  d dl Z d dlZd dlZd dlZd dlmZmZmZ d dlZ	d dl
m  mZ d dlZd dlmZ d dlmZ d dlmZmZ d dlmZmZ zd dlZW n eyX   dZY nw dZdZd	Ze	g d
Ze	g dZe	g dZdZ dZ!dZ"dd dddddfdgZ#dgZ$i a%dZ&dZ'dOde(fddZ)dd Z*dPd e	j+fd!d"Z,d e-fd#d$Z.d%d& Z/d'ed(e(d)e(d eee0 ee0 ee0 f fd*d+Z1dQd-e(d.e(d'ed ee(e0f fd/d0Z2d e	j+fd1d2Z3e4d3kr=e 5 Z6e6j7d4d5d6d7d6gd8 e6j7d9d:d;d< e6j7d=d:d;d< e6j7d>d?e(dd@ e6j7dAdBdCd:dD e6j7dEdFe0dGdH e6j7dIe(dJdK e68 Z9ee9j:r3dLndMdN e*e9 dS dS )R    N)DictListTuple)Tensor)
load_audio)init_loggerlog_metrics)download_fileget_cache_dirz&https://dnsmos.azurewebsites.net/scorez4https://dnsmos.azurewebsites.net/v1/dnsmosp835/scorez_https://github.com/microsoft/DNS-Challenge/raw/6017eee40aaa39373c15fc897a600a3cfffc7133/DNSMOS/)g86I?g|iM?g_]b?)gDH gP%}ՙ@g vƿ)g{?g&?gWt?)SIGBAKOVLi>  	   CUDAExecutionProviderkNextPowerOfTwol        
EXHAUSTIVET)	device_idarena_extend_strategygpu_mem_limitcudnn_conv_algo_searchdo_copy_in_default_streamCPUExecutionProviderg-C6?gpuonnxc              	   C   s   dd l }|dkr
tnt}| tvrJz#t  tdt |j| td}W d    n1 s-w   Y  W n t	t
fyE   |j| td}Y nw |t| < t|  S )Nr   r   ignore)	providers)onnxruntimeORT_PROVIDERS_ALLORT_PROVIDERS_CPUORT_SESSwarningscatch_warningssimplefilterUserWarningInferenceSession
ValueErrorRuntimeError)r   r   ortsess r)   O/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/df/scripts/dnsmos.pyget_ort_session6   s   
r+   c           	         sr  | j }| j}| jt|tdd d | js+| jdksJ t \}}t	 ||}n,t
jd| jd u r;td| jdkrLtt dd g}n fd	d
dD }tddd tt|D  |d urt|dkrxt|t|ksxJ tddd tt|D  t||D ](\}}t||st|t|  }tddd tt|D dd td qtd d S )N)srverboser   p835DNS_AUTH_KEYzrNo DNSMOS api key found. Either specify via `--api-key` parameter or via `DNS_AUTH_KEY` os environmental vairable.p808r-   mosc              	      s$   g | ]}t tt d | qS )r1   )floatdnsmos_api_reqURL_P835).0caudiokeyr-   r)   r*   
<listcomp>[   s    zmain.<locals>.<listcomp>)mos_sigmos_bakmos_ovr	Predictedc                 S      i | ]\}}||qS r)   r)   r6   nvr)   r)   r*   
<dictcomp>_       zmain.<locals>.<dictcomp>z	Target   c                 S   r@   r)   r)   rA   r)   r)   r*   rD   c   rE   z	Diff     c                 S   r@   r)   r)   rA   r)   r)   r*   rD   g   rE   ERRORlevel   )file
target_mosdebugr   SRsqueezeapimethoddownload_onnx_modelsdnsmos_localosenvirongetapi_keyr%   r4   URL_P808r   zipNAMESlenisclosenpasarraytolistexit)	argsrJ   rK   sigbak_ovrdnsmosdtdiffr)   r8   r*   mainG   s<   


rg   @     returnc              
   C   s   zdd l }t| } t|jj| ||dd }W n! ty9   t| } tj| ||t	|dd 
  }Y nw tt|d}|jS )Nr   )n_fft
hop_lengthrI   T)rk   rl   windowreturn_complexg-q=)librosaas_numpyr\   abscorestftImportErrortorch	as_tensorhann_windowsquarenumpylog10maximumT)r9   nfftrl   ro   powspec
logpowspecr)   r)   r*   audio_logpowspecl   s(    
r   c                 C   s   t | | ttt |  kS N)rq   __a_tol__r_tol)abr)   r)   r*   r[      s   r[   c                  C   sx   t  } tj| st|  tj| d}tj|s#ttd | d}tj| d}tj|s8ttd | d}||fS )Nzbak_ovr.onnx)download_dirzsig.onnx)	r
   rS   pathisdirmakedirsjoinexistsr	   URL_ONNX)	cache_dirrb   ra   r)   r)   r*   rQ      s   
rQ   r9   ra   rb   c                    s  t |}t |}t| tt k r"tj| dttt t|  fdd} ttt| t t d }t}g }g }g }	|dks?J t|D ]t}
| t|
| t|
t |  }t	t
|ddtjd d d d f   fdd| D }t|d |t} fd	d| D }|d |}t|d d d t}t|d d d
 t}|| || |	| qCt|}t|}t|	}|||fS )Nr   wrap)mode   )r9   float32c                       i | ]}|j  qS r)   namer6   inpinput_featuresr)   r*   rD          z dnsmos_local.<locals>.<dictcomp>c                    r   r)   r   r   r   r)   r*   rD      r   rI   )r+   rZ   INPUT_LENGTHrM   r\   padintfloorrangearrayr   astypenewaxis
get_inputspolypolyvalrun	COEFS_SIG	COEFS_BAK	COEFS_OVRappendmean)r9   ra   rb   session_sigsession_bak_ovrnum_hopshop_len_samplespredicted_mos_sig_segpredicted_mos_bak_segpredicted_mos_ovr_segidx	audio_segonnx_inputs_sigr<   onnx_inputs_bak_ovrmos_bak_ovrr=   r>   mod_sigmod_bakmod_ovrr)   r   r*   rR      s8   $ 





rR   Furlr:   c              
   C   s   t d usJ ddi}d| |d< | dd}t|}d}d}	 zt j| |||d
}	|	 }
|r9td|
dd |
W S  tyf } z|rIt| |d7 }|d9 }|dk r[W Y d }~q!td| d }~ww )NzContent-Typezapplication/jsonzBasic Authorizationz	audio.wav)datafilenamer   2   T)r   headerstimeoutDNSMOSDEBUGrG   r   rI      zError gettimg mos )	requestsr^   jsondumpspostr   	Exceptionprintr%   )r   r:   r9   r-   r   r   
input_datatriesr   resp
score_dicter)   r)   r*   r4      s0   
r4   c                 C   s    t | tjr|    S | S r   )
isinstanceru   r   cpudetachry   )xr)   r)   r*   rp      s   rp   __main__z--methodz-mr.   r0   )defaultchoicesz
--no-local
store_truerO   )actiondestz--apiz	--api-keyz-k)typer   z--debugz-dz-v)r   z--target-mosz-t*)r   nargsrJ   z)Path to audio file for DNSMOS evaluation.)r   helpr   INFOrG   )r   )rh   ri   )F);argparser   rS   r    typingr   r   r   ry   r\   numpy.polynomial.polynomial
polynomialr   ru   r   df.ior   	df.loggerr   r   df.utilsr	   r
   r   rt   rW   r5   r   r   r   r   r   rY   rM   r   r   r   r   r   r   strr+   rg   ndarrayr   boolr[   rQ   r3   rR   r4   rp   __name__ArgumentParserparseradd_argument
parse_argsr`   rL   r)   r)   r)   r*   <module>   s    
%
$(
