2017-12-23 2 views
1

나는 신경망을 사용하여 음성 인식 작업을하고 있습니다. 그렇게하려면 해당 교육용 오디오 파일 (.wav)의 스펙트로 그램을 가져와야합니다. 파이썬으로 그 스펙트로 그램을 얻는 방법?음성 분석에서 스펙트로 그램 플롯

+1

을 시각화하는 matplot 라이브러리

import scipy # Read the .wav file sample_rate, data = scipy.io.wavfile.read('directory_path/file_name.wav') # Spectrogram of .wav file sample_freq, segment_time, spec_data = signal.spectrogram(data, sample_rate) # Note sample_rate and sampling frequency values are same but theoretically they are different measures 

사용이 파이썬 모듈 참조 : [음성 인식] (https://github.com/Uberi/speech_recognition) – jdoe

+0

@kks, 내 대답은 도움이되었습니다 당신? –

+0

네 ... 당신의 대답에서 좋은 자원을 얻었습니다. @Oleg Meknikov – kks

답변

2

이렇게하는 방법은 다양합니다. 가장 쉬운 방법은 Kaggle competition TensorFlow Speech Recognition Challenge에있는 Kernels에서 제안 된 방법을 확인하는 것입니다. This one은 특히 명확하고 간단하며 다음 기능을 포함합니다. 입력은 wav 파일에서 추출한 샘플의 숫자 벡터, 샘플 속도, 프레임의 크기 (밀리 초), 단계 (보폭 또는 건너 뛰기) 크기 (밀리 초) 및 작은 간격 띄우기입니다. 보다 여전히 더 큰 값을 유지하면서

from scipy.io import wavfile 
from scipy import signal 
import numpy as np 

sample_rate, audio = wavfile.read(path_to_wav_file) 

def log_specgram(audio, sample_rate, window_size=20, 
       step_size=10, eps=1e-10): 
    nperseg = int(round(window_size * sample_rate/1e3)) 
    noverlap = int(round(step_size * sample_rate/1e3)) 
    freqs, times, spec = signal.spectrogram(audio, 
            fs=sample_rate, 
            window='hann', 
            nperseg=nperseg, 
            noverlap=noverlap, 
            detrend=False) 
    return freqs, times, np.log(spec.T.astype(np.float32) + eps) 

출력은 스펙트로가 단조 함수로 재 스케일링되는 것을 예외로 상기 SciPy manual에 정의는 (로그()), 이는 작은 값보다 더 큰 값을 누른다 작은 값. 이 방법은 스펙의 극단적 인 가치가 계산을 지배하지 않습니다. 또는 일부 quantile에서 값을 제한 할 수 있지만 log (또는 제곱근)를 선호합니다. 출력 : 또는

freq (f) : ndarray, Array of sample frequencies. 
times (t) : ndarray, Array of segment times. 
spec (Sxx) : ndarray, Spectrogram of x. By default, the last axis of Sxx corresponds to the segment times. 

"왕따"에서 극단적 인 값을 방지하기 위해 즉, 스펙트로 그램의 높이를 정상화하는 많은 다른 방법은에서 github repo에 train.py 및 models.py 코드를 확인할 수있다 Tensorflow example on audio recognition.

Here is another thread 파이썬에서 스펙트로 그램을 구현하는 방법을 설명하고 코드를 제공합니다.

+0

당신은 freqs, 시간 및 사양에 의해 반환되는 것을 도울 수 있습니까 ?? 나는 문서를 보았지만 여전히 혼란 스럽다. @Oleg Melnikov – kks

+0

@kks : 출력에 대한 추가 설명을 참조하십시오. 도움이되기를 바랍니다. –

1

Scipy는이 용도로 사용됩니다. 스펙트로 그램

import matplotlib.pyplot as plt 
plt.pcolormesh(segment_time, sample_freq, spec_data) 
plt.ylabel('Frequency [Hz]') 
plt.xlabel('Time [sec]') 
plt.show() 
관련 문제