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

news/2025/3/16 14:44:42/文章来源:https://www.cnblogs.com/liucaizhi/p/18233926

 

 

wavs_to_model.py

import wave
import numpy as np
import osimport keras
from keras.models import Sequential
from keras.layers import Densenum_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+"\\"+itestNum=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+=1else:wavs.append(waveData)labels.append(labsIndName.index(i))except:passnum_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)#将字符串转化为intwaveData = waveData*1.0/(max(abs(waveData)))#wave幅值归一化waveData = np.reshape(waveData,[nframes,nchannels]).Tf.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 ** 2data = data ** 0.5return dataif __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') # 保存训练模型

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Wesky.Net.Opentools库,一行代码实现实体类类型转换为Json格式字符串

安装1.0.10以及以上版本的 Wesky.Net.OpenTools 包 包内,该功能的核心代码如下: 自定义属性:实体类JSON模式生成器: 使用方式:引用上面的1.0.10版本或以上的包。如果实体类有特殊需求,例如映射为其他名称,可以用OpenJson属性来实现。实体类对象案例如下:上面实体类,…

RFS_Server_06 上传并发布数据

操作描述:云服务器Ubuntu20.04系统Docker中有两个容器:Postgres容器和GeoServer容器。将数据存储至Postgres数据库容器中,并通过GeoServer连接,发布地图服务。 此文档中使用的Postgres数据库名称为pg01,GeoServer服务器名称为geoserver01。 1 基础操作:使用工具连接云…

vivado与modelsim联合仿真

写在前面:联合仿真需要版本对应,我的2020的modelsim和2020的vivado是可以用的。如果不对应,下边会编译报错。 第一步,编译仿真库文件。点击菜单栏Tools-->Compile Sim Libary,第一行Simulator选择Modelsim接下来Family选择你需要的器件对应的Family。Compiled library …

深度学习--风格迁移 原理以及实现--84

目录1. 简介4. 损失函数 参考链接:https://blog.csdn.net/ssshyeong/article/details/127092354 1. 简介 Image Style Transfer Using Convolutional Neural Networks:Gram矩阵(CVPR2016) 链接 Texture Synthesis Using Convolutional Neural Networks 图像经过卷积层后得到的…

Body AdvancedBrep Geometry

Body AdvancedBrep Geometry Body Brep Geometry是通过边界表示模型(包括NURBS)表示产品的三维形状。应使用保持该几何表示的IfcShapeResentation的以下属性值:IfcShapeRepresentation.RepresentationIdentifier = Body IfcShapeRepresentation.RepresentationType = Advanc…

node.js + mysql实现基本的增删改查功能(保姆级教程---2优化版)

node.js + mysql实现基本的增删改查(保姆级教程---2优化版)上一个实现对增删改查功能都写在同一个文件里,代码过于冗余,我认为可以优化,分开写在不同文件里面,使得更加直观。废话不多说,直接进入主题:对之前的代码进行抽离:db.js文件(用于数据库的连接,并导出连接供…

虚幻中实现本地双人的输入设备分别控制需要的Pawn

想要实现双人成行游戏中的双输入设备(双输入设备指的是一个键鼠和一个手柄,或者两个手柄)分别控制玩家1和玩家2,同时可以动态插拔设备切换对应的Pawn的控制权;本文是对探索并实现此功能的一个解决思路记录。1、前期准备和知识点梳理 1.1 本地多玩家 LocalPlayer 平常我们运…

HiPPO: Recurrent Memory with Optimal Polynomial Projections

目录概Motivation代码Gu A., Dao T., Ermon S., Rudra A. and Re C. HiPPO: Recurrent memory with optimal polynomial projections. NIPS, 2021.概 看下最近很火的 Mamba 的前身. 本文其实主要介绍的是一个如何建模历史信息在正交基上的稀疏的变化情况.Motivation对于一个函数…

存储引擎及特点、约束条件、严格模式、基本字段类型(整型、浮点型、字符串、日期时间、枚举和集合)

【一】存储引擎在平常我们处理的文件格式有很多,并且针对不同的文件格式会有对应不同的存储方式和处理机制 针对不同的数据应该有对应不同的处理机制 存储引擎就是不同的处理机制。# 查看所有引擎 show engines;四种主要的存储引擎 (1)Innodb引擎是MySQL5.5版本之后的默认存…

sickos1.1-cms

sickos1.1-cms主机发现和nmap扫描 nmap -sn 192.68.56.0/24靶机ip:192.168.56.105 nmap -sT --min-rate 10000 192.168.56.105PORT STATE SERVICE 22/tcp open ssh 3128/tcp open squid-http 8080/tcp closed http-proxynmap -sT -sV -sC -O -p22,3128,8080 192.16…

自动化类级别前后置和函数级别前后置的区别

一、函数级别的前后置,格式如下: 二、类函数级别的前后置如下: 三、总结: 1、函数级别的用例执行一个用例时,都会执行一遍;类级别的前后置不管用例是多少个,只在执行用例时执行一次。 2、所以根据用例的需要,适当的选择是类级别的前后置还是函数级别的前置后。