深度学习系列----语音指令识别

本文介绍了如何使用Keras搭建一个语音指令识别的深度学习模型,涉及数据预处理、CLDNN网络定义、模型训练、测试及模型转化为TensorFlow的pb文件,以便于实际应用。
摘要由CSDN通过智能技术生成

导入需要的库

使用Keras搭建网络。更方便快捷。

import numpy as np
import os
from keras.models import Model
from keras.optimizers import Adam
from keras.utils import Sequence
from scipy.io import wavfile
from keras.regularizers import l2  # 正则化器
import warnings
warnings.filterwarnings('ignore')

from keras.layers import (
    Input,
    Dense,  # 一维全连接层
    Conv2D,
    Lambda,
    Activation,
    Flatten,
    Dropout,
    Bidirectional,  # RNN的双向封装器,对序列进行前向和后向计算。
    LSTM,
    Reshape,
    TimeDistributed  # 这个封装器将一个层应用于输入的每个时间片,输入至少为 3D,且第一个维度应该是时间所表示的维度。
)

数据预处理

提前准备好24类语音指令,用ffmpeg转化格式为wav,设置音频采样率为16000,分为训练集和测试集。命名格式采用‘order_label.wav’,order为整体的序号,label为指令的标签,0~23。
三个标准化的函数如下,分别用于调整相对大小、去除前后没有声音的片段、增添一小段空白。

def normalize(snd_data):
    "Average the volume out"
    times = 5.0/max(abs(i) for i in snd_data)
    r = []
    for i in snd_data:
        r.append(i*times)
    return r

def trim(snd_data):
    "Trim the blank spots at the start and end"
    def _trim(snd_data):
        snd_started = False
        r = []
        for i in snd_data:
            if not snd_started and abs(i)>0.7:
                snd_started = True
                r.append(i)
            elif snd_started:
                r.append(i)
        return r

    # Trim to the left
    snd_data = _trim(snd_data)
    # Trim to the right
    snd_data.reverse()
    snd_data = _trim(snd_data)
    snd_data.reverse()
    return snd_data

def add_silence(snd_data):
    n = int((35000-len(snd_data))/2)
    m = 35000-len(snd_data)-n
    r = [0 for i in range(n)]
    r.extend(snd_data)
    r.extend([0 for i in range(m)])
    return r

def reprocess(label,data):
    res = []
    res1 = []
    for f in data:
        path = os.path.join('./audioNet/data',label,f)
        _,sig = wavfile.read(path)
        sig=normalize(sig)
        sig=trim(sig)
        if len(sig)>35000:
            continue
        sig=add_silence(sig)
        res.append(sig)
        res1.append(int
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值