首页 > 其他分享 >实验19-使用keras完成语音识别

实验19-使用keras完成语音识别

时间:2024-06-05 21:59:25浏览次数:18  
标签:keras 19 labels waveData 语音 path np wavs data

 

 

wavs_to_model.py

import wave
import numpy as np
import os

import keras
from keras.models import Sequential
from keras.layers import Dense

num_class = 0 # 加载的语音文件有几种类别
labsIndName=[]      ## 训练集标签的名字   ["seven","stop"]

# 加载数据集 和 标签[并返回标签集的处理结果]
def create_datasets():
    global num_class  # 声明全局变量
    wavs=[] # 训练wav文件集
    labels=[] # labels 和 testlabels 这里面存的值都是对应标签的下标,下标对应的名字在labsInd中
    testwavs=[] # 测试wav文件集
    testlabels=[] # 测试集标签

    path="./speech_commands"
    dirs = os.listdir(path) # 获取的是目录列表
    for i in dirs:
        print("开始加载:",i)
        labsIndName.append(i) # 当前分类进入到标签的名字集
        wavs_path=path+"\\"+i
        testNum=0 # 当前分类进入了测试集的有几个 ,这里暂定每个分类进100个到测试集
        files = os.listdir(wavs_path) # 某个目录下文件的列表
        for j in files:
            try:
                waveData = get_wav_mfcc(wavs_path+"\\"+j)
                if testNum < 100 :
                    testwavs.append(waveData)
                    testlabels.append(labsIndName.index(i))
                    testNum+=1
                else:
                    wavs.append(waveData)
                    labels.append(labsIndName.index(i))
            except:
                pass
    num_class = len(labsIndName)  # 更新全局变量
    wavs=np.array(wavs)
    labels=np.array(labels)
    testwavs=np.array(testwavs)
    testlabels=np.array(testlabels)
    return (wavs,labels),(testwavs,testlabels)


def get_wav_mfcc(wav_path):
    f = wave.open(wav_path,'rb')
    params = f.getparams()
    # print("params:",params)
    nchannels, sampwidth, framerate, nframes = params[:4]
    strData = f.readframes(nframes)#读取音频,字符串格式
    waveData = np.fromstring(strData,dtype=np.int16)#将字符串转化为int
    waveData = waveData*1.0/(max(abs(waveData)))#wave幅值归一化
    waveData = np.reshape(waveData,[nframes,nchannels]).T
    f.close()

    ### 对音频数据进行长度大小的切割,保证每一个的长度都是一样的【因为训练文件全部是1秒钟长度,16000帧的,所以这里需要把每个语音文件的长度处理成一样的】
    data = list(np.array(waveData[0]))
    # print(len(data))
    while len(data)>16000:
        del data[len(waveData[0])-1]
        del data[0]
    # print(len(data))
    while len(data)<16000:
        data.append(0)
    # print(len(data))

    data=np.array(data)

    # 平方之后,开平方,取正数,值的范围在  0-1  之间
    data = data ** 2
    data = data ** 0.5

    return data


if __name__ == '__main__':
    (wavs,labels),(testwavs,testlabels) = create_datasets()
    print(wavs.shape,"   ",labels.shape)
    print(testwavs.shape,"   ",testlabels.shape)

    # 标签转换为独热码
    labels = keras.utils.to_categorical(labels, num_class)
    testlabels = keras.utils.to_categorical(testlabels, num_class)
    print(labels[0]) ## 类似 [1. 0]
    print(testlabels[0]) ## 类似 [0. 0]

    print(wavs.shape,"   ",labels.shape)
    print(testwavs.shape,"   ",testlabels.shape)

    # 构建模型
    model = Sequential()
    model.add(Dense(1024, activation='relu',input_shape=(16000,)))
    model.add(Dense(512, activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(num_class, activation='softmax'))
    # [编译模型] 配置模型,损失函数采用交叉熵,优化采用Adadelta,将识别准确率作为模型评估
    model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy'])
    #  validation_data为验证集
    model.fit(wavs, labels, batch_size=124, epochs=10, verbose=1, validation_data=(testwavs, testlabels))

    # 开始评估模型效果 # verbose=0为不输出日志信息
    score = model.evaluate(testwavs, testlabels, verbose=0)
    print('Test loss:', score[0])
    print('Test accuracy:', score[1]) # 准确度

    model.save('asr_all_model_weights.h5') # 保存训练模型

 

标签:keras,19,labels,waveData,语音,path,np,wavs,data
From: https://www.cnblogs.com/liucaizhi/p/18233926

相关文章

  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk
    [CISCN2019华北赛区Day1Web5]CyberPunk在源代码中发现提示可能存在文件包含,并且还有search.php,change.php,delete.php这三个文件,通过php伪协议进行读取?file=php://filter/convert.base64-encode/resource=index.php?file=php://filter/convert.base64-encode/resource=sear......
  • 【手把手教学】最新ChatTTS语音合成项目使用指南AI变声器chatTTS教程来了!5S夺走你的卧
    像这种充满语气充满感情色彩的人声,再搭配一段自拍图,是由最近大火的AI项目chatTTS生成的,ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在HuggingFace中开源的版本为4万小......
  • BUUCTF1 19-22 wp
    19html文件打开js源码,分类讨论大小写,解密20elf文件算法:奇数左移i,偶数乘i特点:分类中没有对0的处理,因此从第二个数据开始,第一个数据用1占位。21elf文件使用linux系统的upx脱壳器脱壳22二次加密先输入一段数据,大小为6,加上六个硬编码字符,sha1加密后与硬编码密文比较。......
  • Navi日语社App一款支持日文OCR文字识别提取的应用,功能丰富,支持日语翻译、语音翻译、日
    如果你正在寻找一款简单好用、功能丰富的日文OCR识别软件,那么推荐你试试《Navi日语社》App,在安卓和苹果手机上,很多应用都支持免费的日语翻译功能,但是支持日文OCR文字识别的软件并不多,针对这一痛点,准橙翻译开发上线了《Navi日语社》App,一款支持日文OCR识别提取文字的移动软件,识......
  • 老挝语翻译通App中国人出门在外都在用的老挝语翻译工具,支持老挝文OCR识别、文字转语音
    老挝语翻译通App,一款更加符合中国人用语习惯的翻译工具,在国内外都能正常使用的翻译器。当大家选择去东南亚国家旅游、GAP的时候,老挝这个国家是值得一去的,可以让大家感受到另一番风情。但是,在去之前,需要做一些准备:衣食住行都要提前规划和准备好,而贯穿整个旅途的另一个容易被......
  • 最像真人的语音转文本ChatTTS本地部署+Colab部署+跳坑指南
    1.WindowsChatTTSUI:https://github.com/jianchang512/ChatTTS-ui/releases/tag/v0.85v0.85完整包下载(2.7G含模型)百度网盘下载: https://pan.baidu.com/s/1RntYLT6UNd8_ew2osy8d1A?pwd=by14123网盘下载:https://www.123pan.com/s/03Sxjv-oEyB3.htmlhuggingfacelink: h......
  • CF1980
    小号打的抽象比赛,谁知道再给我30min能不能AK?AB一眼。Cunordered_map会被卡,建议multiset。D前缀和后缀和。E发现列和行是独立的,于是对列和行分别检查。若置换矛盾,则不合法。F经过观察,一行的答案为后缀最小值-1。所以F1就能做出来了。考虑F2,对行拆贡献,维护后缀......
  • 杰理语音芯片AC1042A,变声喇叭玩具方案—云信通讯
    变声喇叭玩具内置多种声音效果,例如机器人声、怪兽声、动物声以及各种搞笑声,让孩子能够在玩耍过程中体验不同的声音变化。有一些变声喇叭还可以模拟名人声音,让孩子们仿佛变身成为自己心目中的英雄或者明星。无论是自由的想象力游戏还是模仿他人的声音,变声喇叭玩具都能让孩子乐在......
  • 2024.05.19校招 实习 内推 面经
    绿*泡*泡VX:neituijunsir  交流*裙,内推/实习/校招汇总表格1、自动驾驶一周资讯-理想传裁员传闻;广汽本田大规模裁员;小米SU7完成第10000辆交付,雷军:确保今年交付10万台https://mp.weixin.qq.com/s/rsavPRAm8Df-1IcezbZQ3Q2、实习|长安福特&长安福特新能源2024暑期实......
  • 全新STC12C5A60S2单片机+LCD19264大屏万年历农历生肖节气节日显示+闹钟+温湿度+台灯
     资料下载地址:全新STC12C5A60S2单片机+LCD19264大屏万年历农历生肖节气节日显示+闹钟+温湿度+台灯这是旧版退役拆解了新版 与电路图所示共设置4个按键短按开关台灯加减键调光长按进入菜单1.台灯加入PCAPWM调光STC12C5A60S2的PCAPWM非常好用设置简单无极调节......