• Python 处理 ASR(语音识别)


    Python 处理 ASR(语音识别)

    相关包:python_speech_features

    这个库提供了一般的用于ASR(语音识别)的语音特征,他包含了MFCCs(梅尔倒谱系数)和 filterbank energies(滤波器组能量?)。

    MFCC相关教程:http://www.practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/

    你需要numpy和scipy来运行这个库,这个项目的代码保存在 https://github.com/jameslyons/python_speech_features

    支持的特征:

    python_speech_features.mfcc() - 梅尔倒谱系数
    python_speech_features.fbank() - 滤波器组能量(?)
    python_speech_features.logfbank() - 对数滤波器组能量
    python_speech_features.ssc() - 子带频谱质心特征
    使用MFCC特征:

    from python_speech_features import mfcc
    from python_speech_features import logfbank
    import scipy.io.wavfile as wav
     
    (rate,sig) = wav.read("file.wav")
    mfcc_feat = mfcc(sig,rate)
    fbank_feat = logfbank(sig,rate)
     
    print(fbank_feat[1:3,:])
    从这里你可以把特征写入一个文件
    

    python_speech_features模块提供的函数

    mfcc

    python_speech_features.base.mfcc(signal, samplerate=16000, winlen=0.025, winstep=0.01, numcep=13, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, ceplifter=22, appendEnergy=True, winfunc=<function >)

    计算一个音频信号的MFCC特征

    参数:

    signal - 需要用来计算特征的音频信号,应该是一个N*1的数组
    samplerate - 我们用来工作的信号的采样率
    winlen - 分析窗口的长度,按秒计,默认0.025s(25ms)
    winstep - 连续窗口之间的步长,按秒计,默认0.01s(10ms)
    numcep - 倒频谱返回的数量,默认13
    nfilt - 滤波器组的滤波器数量,默认26
    nfft - FFT的大小,默认512
    lowfreq - 梅尔滤波器的最低边缘,单位赫兹,默认为0
    highfreq - 梅尔滤波器的最高边缘,单位赫兹,默认为采样率/2
    preemph - 应用预加重过滤器和预加重过滤器的系数,0表示没有过滤器,默认0.97
    ceplifter - 将升降器应用于最终的倒谱系数。 0没有升降机。默认值为22。
    appendEnergy - 如果是true,则将第0个倒谱系数替换为总帧能量的对数。
    winfunc - 分析窗口应用于每个框架。 默认情况下不应用任何窗口。 你可以在这里使用numpy窗口函数 例如:winfunc=numpy.hamming
    返回:  一个大小为numcep的numpy数组,包含着特征,每一行都包含一个特征向量。
    

    fbank

    python_speech_features.base.fbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, winfunc=<function >)

    从一个音频信号中计算梅尔滤波器能量特征

    参数:

    signal - 需要用来计算特征的音频信号,应该是一个N*1的数组
    samplerate - 我们用来工作的信号的采样率
    winlen - 分析窗口的长度,按秒计,默认0.025s(25ms)
    winstep - 连续窗口之间的步长,按秒计,默认0.01s(10ms)
    nfilt - 滤波器组的滤波器数量,默认26
    nfft - FFT的大小,默认512
    lowfreq - 梅尔滤波器的最低边缘,单位赫兹,默认为0
    highfreq - 梅尔滤波器的最高边缘,单位赫兹,默认为采样率/2
    preemph - 应用预加重过滤器和预加重过滤器的系数,0表示没有过滤器,默认0.97
    winfunc - 分析窗口应用于每个框架。 默认情况下不应用任何窗口。 你可以在这里使用numpy窗口函数 例如:winfunc=numpy.hamming
    返回:2个值。第一个是一个包含着特征的大小为nfilt的numpy数组,每一行都有一个特征向量。第二个返回值是每一帧的能量
    

    logfbank

    python_speech_features.base.logfbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97)

    从一个音频信号中计算梅尔滤波器能量特征的对数

    参数:

    signal - 需要用来计算特征的音频信号,应该是一个N*1的数组
    samplerate - 我们用来工作的信号的采样率
    winlen - 分析窗口的长度,按秒计,默认0.025s(25ms)
    winstep - 连续窗口之间的步长,按秒计,默认0.01s(10ms)
    nfilt - 滤波器组的滤波器数量,默认26
    nfft - FFT的大小,默认512
    lowfreq - 梅尔滤波器的最低边缘,单位赫兹,默认为0
    highfreq - 梅尔滤波器的最高边缘,单位赫兹,默认为采样率/2
    preemph - 应用预加重过滤器和预加重过滤器的系数,0表示没有过滤器,默认0.97
    返回: 一个包含特征的大小为nfilt的numpy数组,每一行都有一个特征向量
    

    ssc

    python_speech_features.base.ssc(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, winfunc=<function >)

    从一个音频信号中计算子带频谱质心特征

    参数:

    signal - 需要用来计算特征的音频信号,应该是一个N*1的数组
    samplerate - 我们用来工作的信号的采样率
    winlen - 分析窗口的长度,按秒计,默认0.025s(25ms)
    winstep - 连续窗口之间的步长,按秒计,默认0.01s(10ms)
    nfilt - 滤波器组的滤波器数量,默认26
    nfft - FFT的大小,默认512
    lowfreq - 梅尔滤波器的最低边缘,单位赫兹,默认为0
    highfreq - 梅尔滤波器的最高边缘,单位赫兹,默认为采样率/2
    preemph - 应用预加重过滤器和预加重过滤器的系数,0表示没有过滤器,默认0.97
    winfunc - 分析窗口应用于每个框架。 默认情况下不应用任何窗口。 你可以在这里使用numpy窗口函数 例如:winfunc=numpy.hamming
    
    返回:一个包含特征的大小为nfilt的numpy数组,每一行都有一个特征向量
    

    hz2mel

    python_speech_features.base.hz2mel(hz)把一个赫兹值转换为梅尔值

    参数: hz - 一个单位为Hz的值,他也可以是一个numpy数组,转换按元素进行
    返回: 一个单位为Mels的值,如果输入时矩阵,那么返回的也是对应大小的矩阵
    

    mel2hz

    python_speech_features.base.mel2hz(mel)

    把一个梅尔值转化为赫兹

    参数:

    mel - 一个单位为Mels的值,他也可以是一个numpy数组,转换按元素进行
    返回: 一个单位为Herz的值,如果输入时矩阵,那么返回的也是对应大小的矩阵
    

    get_filterbanks

    python_speech_features.base.get_filterbanks(nfilt=20, nfft=512, samplerate=16000, lowfreq=0, highfreq=None)

    计算一个梅尔滤波器组。过滤器存储在行中,列对应于FFT箱。过滤器以大小为nfilt *(nfft/2+1)的数组返回。

    参数:

    nfilt - 滤波器组的滤波器数量,默认20
    nfft - FFT的大小,默认512
    samplerate - 我们用来工作的信号的采样率
    lowfreq - 梅尔滤波器的最低边缘,单位赫兹,默认为0
    highfreq - 梅尔滤波器的最高边缘,单位赫兹,默认为采样率/2
    返回: 一个包含有滤波器的大小为nfilt *(nfft/2+1)的数组,每一行都有一个过滤器。
    

    lifter

    python_speech_features.base.lifter(cepstra, L=22)

    将倒谱提升器应用于倒频谱的矩阵。这具有增加高频DCT系数的幅度的效果。

    参数:

    cepstra -- 梅尔倒谱矩阵,大小为numframes*numcep
    L - 提升器的系数,默认22,L<=0禁用
    
    

    delta

    python_speech_features.base.delta(feat, N)
    从特征向量序列计算delta特征。

    参数:

    feat - 一个大小为特征数量的numpy数组,每一行都有一个特征向量
    N - 对于每一帧,计算delta特征根据前后N帧
    返回:一个大小为特征数量的numpy数组,包含有delta特征,每一行都有一个delta向量
    

    framesig

    sigproc模块提供的函数

    python_speech_features.sigproc.framesig(sig, frame_len, frame_step, winfunc=<function >, stride_trick=True)

    将信号框成重叠帧。

    参数:

    sig - 音频信号帧
    frame_len - 样品中每一帧的长度
    frame_step - 下一帧开始后前一帧开始后的样本数。
    winfunc - 分析窗口应用于每个框架。 默认情况下不应用任何窗口。
    stride_trick - 使用步长技巧快速计算滚动窗口和窗口倍增
    返回:一个帧的数组,大小是frame_len
    

    deframesig

    python_speech_features.sigproc.deframesig(frames, siglen, frame_len, frame_step, winfunc=<function >)

    使用重叠添加过程撤消了frameig操作。

    参数:

    frames - frames的数组
    siglen - 所需信号的长度,如果未知,则使用0。输出将被截断到siglen样本。
    frame_len - 样品中每一帧的长度
    frame_step - 下一帧开始后前一帧开始后的样本数。
    winfunc - 分析窗口应用于每个框架。 默认情况下不应用任何窗口。
    返回: 一个1维信号
    

    magspec

    python_speech_features.sigproc.magspec(frames, NFFT)

    计算帧中每个帧的幅度谱。如果帧是NxD矩阵,输出将是Nx(NFFT/2+1)。

    参数:

    frames - frames的数组,每一行就是一帧
    NFFT - 使用的FFT长度。如果NFFT>帧长度,帧就是零填充的。
    返回:如果帧是ND矩阵,输出将是N(nfft/2+1)。每一行都是相应帧的幅度谱。 
    

    python_speech_features.sigproc.powspec(frames, NFFT)

    计算帧中每个帧的功率谱。如果帧是NXD矩阵,输出将是NX(NFFT/2+1)。

    参数:

    frames - frames的数组,每一行就是一帧
    NFFT - 使用的FFT长度。如果NFFT>帧长度,帧就是零填充的。
    返回:如果帧是ND矩阵,输出将是N(nfft/2+1)。每一行都是相应帧的功率谱。
    

    logpowspec

    python_speech_features.sigproc.logpowspec(frames, NFFT, norm=1)

    计算帧中每个帧的对数功率谱。如果帧是NXD矩阵,输出将是NX(NFFT/2+1)。

    参数:

    frames - frames的数组,每一行就是一帧
    NFFT - 使用的FFT长度。如果NFFT>帧长度,帧就是零填充的。
    norm - 如果范数=1,则对数功率谱被归一化,使得最大值(跨越所有帧)为0。
    返回:如果帧是ND矩阵,输出将是N(nfft/2+1)。每一行都是相应帧的对数功率谱。
    

    preemphasis

    python_speech_features.sigproc.preemphasis(signal, coeff=0.95)

    对输入信号进行预加重。

    参数:

    signal - 过滤器的信号
    coeff - 预加重系数,0为无,默认0.95
    返回:滤波后的信号
    
  • 相关阅读:
    BOI 2002 双调路径
    BOI'98 DAY 2 TASK 1 CONFERENCE CALL Dijkstra/Dijkstra+priority_queue/SPFA
    USACO 2013 November Contest, Silver Problem 2. Crowded Cows 单调队列
    BOI 2003 Problem. Spaceship
    USACO 2006 November Contest Problem. Road Blocks SPFA
    CEOI 2004 Trial session Problem. Journey DFS
    USACO 2015 January Contest, Silver Problem 2. Cow Routing Dijkstra
    LG P1233 木棍加工 动态规划,Dilworth
    LG P1020 导弹拦截 Dilworth
    USACO 2007 February Contest, Silver Problem 3. Silver Cow Party SPFA
  • 原文地址:https://www.cnblogs.com/zhuimengzhe/p/10223510.html
Copyright © 2020-2023  润新知