• 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
    返回:滤波后的信号
    
  • 相关阅读:
    redis持久化的几种方式
    Spring Cloud基础教程
    微服务实践三: 服务编排
    分库分表的几种常见玩法及如何解决跨库查询等问题
    Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制
    第1章 Python基础-Python介绍&循环语句 练习题&作业
    MySQL中 optimize table '表名'的作用
    Python3 命令行参数
    Python enumerate() 函数
    Python rpartition() 方法
  • 原文地址:https://www.cnblogs.com/zhuimengzhe/p/10223510.html
Copyright © 2020-2023  润新知