广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基础语音识别-食物语音识别baseline(CNN)
  • 238
分享到

基础语音识别-食物语音识别baseline(CNN)

2024-04-02 19:04:59 238人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1 下载和解压数据集2 加载库函数3 特征提取以及数据集的建立建立类别标签字典提取梅尔频谱特征获取特征和标签独热编码把数据集划分为训练集和测试集4 建立模型搭建CNN网络训练模型

MFCC

梅尔倒谱系数(Mel-scaleFrequency Cepstral Coefficients,简称MFCC)。

MFCC通常有以下之过程:

  1. 将一段语音信号分解为多个讯框。
  2. 将语音信号预强化,通过一个高通滤波器。
  3. 进行傅立叶变换,将信号变换至频域。
  4. 将每个讯框获得的频谱通过梅尔滤波器(三角重叠窗口),得到梅尔刻度。
  5. 在每个梅尔刻度上提取对数能量。
  6. 对上面获得的结果进行离散傅里叶反变换,变换到倒频谱域。
  7. MFCC就是这个倒频谱图的幅度(amplitudes)。一般使用12个系数,与讯框能量叠加得13维的系数。

MFCC

数据集

数据集来自Eating Sound Collection,数据集中包含20种不同食物的咀嚼声音,赛题任务是给这些声音数据建模,准确分类。

类别包括: aloe, ice-cream, ribs, chocolate, cabbage, candied_fruits, soup, jelly, grapes, pizza, gummies, salmon, wings, burger, pickles, carrots, fries, chips, noodles, drinks

训练集的大小: 750

测试集的大小: 250

1 下载和解压数据集


!wget Http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531887/train_sample.zip
!unzip -qq train_sample.zip
!\rm train_sample.zip
!wget http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531887/test_a.zip
!unzip -qq test_a.zip
!\rm test_a.zip

2 加载库函数


# 基本库
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split  #划分数据集
from sklearn.metrics import classification_report   #用于显示主要分类指标的文本报告
from sklearn.model_selection import GridSearchCV #自动调参
from sklearn.preprocessing import MinMaxScaler #归一化

加载深度学习框架


# 搭建分类模型所需要的库
from Tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Flatten, Dense, MaxPool2D, Dropout
from tensorflow.keras.utils import to_cateGorical 
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC #支持向量分类
!pip install librosa --user #加载音频处理库
# 其他库
import os
import librosa #音频处理库
import librosa.display
import glob

3 特征提取以及数据集的建立

建立类别标签字典


feature = []
label = []
# 建立类别标签,不同类别对应不同的数字。
label_dict = {'aloe': 0, 'burger': 1, 'cabbage': 2,'candied_fruits':3, 'carrots': 4, 'chips':5,
                  'chocolate': 6, 'drinks': 7, 'fries': 8, 'grapes': 9, 'gummies': 10, 'ice-cream':11,
                  'jelly': 12, 'noodles': 13, 'pickles': 14, 'pizza': 15, 'ribs': 16, 'salmon':17,
                  'soup': 18, 'wings': 19}
label_dict_inv = {v:k for k,v in label_dict.items()}

提取梅尔频谱特征


from tqdm import tqdm
def extract_features(parent_dir, sub_dirs, max_file=10, file_ext="*.wav"):
    c = 0
    label, feature = [], []
    for sub_dir in sub_dirs:
        for fn in tqdm(glob.glob(os.path.join(parent_dir, sub_dir, file_ext))[:max_file]): # 遍历数据集的所有文件
           # segment_log_specgrams, segment_labels = [], []
            #sound_clip,sr = librosa.load(fn)
            #print(fn)
            label_name = fn.split('/')[-2]
            label.extend([label_dict[label_name]])
            X, sample_rate = librosa.load(fn,res_type='kaiser_fast')
            mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) # 计算梅尔频谱(mel spectrogram),并把它作为特征
            feature.extend([mels])
    return [feature, label]

# 自己更改目录
parent_dir = './train_sample/'
save_dir = "./"
folds = sub_dirs = np.array(['aloe','burger','cabbage','candied_fruits',
                             'carrots','chips','chocolate','drinks','fries',
                            'grapes','gummies','ice-cream','jelly','noodles','pickles',
                            'pizza','ribs','salmon','soup','wings'])
# 获取特征feature以及类别的label
temp = extract_features(parent_dir,sub_dirs,max_file=100)
temp = np.array(temp)
data = temp.transpose()

获取特征和标签


# 获取特征
X = np.vstack(data[:, 0])
# 获取标签
Y = np.array(data[:, 1])
print('X的特征尺寸是:',X.shape)
print('Y的特征尺寸是:',Y.shape)

X的特征尺寸是: (1000, 128)

Y的特征尺寸是: (1000,)

独热编码


# 在Keras库中:to_categorical就是将类别向量转换为二进制(只有0和1)的矩阵类型表示
Y = to_categorical(Y)
print(X.shape)
print(Y.shape)

(1000, 128)

(1000, 20)

把数据集划分为训练集和测试集


X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state = 1, stratify=Y)
print('训练集的大小',len(X_train))
print('测试集的大小',len(X_test))

训练集的大小 750

测试集的大小 250


X_train = X_train.reshape(-1, 16, 8, 1)
X_test = X_test.reshape(-1, 16, 8, 1)

4 建立模型

搭建CNN网络


model = Sequential()
# 输入的大小
input_dim = (16, 8, 1)
model.add(Conv2D(64, (3, 3), padding = "same", activation = "tanh", input_shape = input_dim))# 卷积层
model.add(MaxPool2D(pool_size=(2, 2)))# 最大池化
model.add(Conv2D(128, (3, 3), padding = "same", activation = "tanh")) #卷积层
model.add(MaxPool2D(pool_size=(2, 2))) # 最大池化层
model.add(Dropout(0.1))
model.add(Flatten()) # 展开
model.add(Dense(1024, activation = "tanh"))
model.add(Dense(20, activation = "softmax")) # 输出层:20个units输出20个类的概率
# 编译模型,设置损失函数,优化方法以及评价标准
model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
model.summary()

模型细节

训练模型


# 训练模型
model.fit(X_train, Y_train, epochs = 100, batch_size = 15, validation_data = (X_test, Y_test))

5 预测测试集


def extract_features(test_dir, file_ext="*.wav"):
    feature = []
    for fn in tqdm(glob.glob(os.path.join(test_dir, file_ext))[:]): # 遍历数据集的所有文件
        X, sample_rate = librosa.load(fn,res_type='kaiser_fast')
        mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) # 计算梅尔频谱(mel spectrogram),并把它作为特征
        feature.extend([mels])
    return feature
X_test = extract_features('./test_a/')
X_test = np.vstack(X_test)
predictions = model.predict(X_test.reshape(-1, 16, 8, 1))
preds = np.argmax(predictions, axis = 1)
preds = [label_dict_inv[x] for x in preds]
path = glob.glob('./test_a/*.wav')
result = pd.DataFrame({'name':path, 'label': preds})
result['name'] = result['name'].apply(lambda x: x.split('/')[-1])
result.to_csv('submit.csv',index=None)
!ls ./test_a/*.wav | wc -l
!wc -l submit.csv

6 结果

在这里插入图片描述

到此这篇关于基础语音识别-食物语音识别baseline(CNN)的文章就介绍到这了,更多相关语音识别的内容请搜索编程网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持编程网!

--结束END--

本文标题: 基础语音识别-食物语音识别baseline(CNN)

本文链接: https://www.lsjlt.com/news/123762.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基础语音识别-食物语音识别baseline(CNN)
    目录1 下载和解压数据集2 加载库函数3 特征提取以及数据集的建立建立类别标签字典提取梅尔频谱特征获取特征和标签独热编码把数据集划分为训练集和测试集4 建立模型搭建CNN网络训练模型...
    99+
    2022-11-12
  • 亚马逊语音识别和Google语音识别
    亚马逊语音识别(Alexa)是一种智能音箱设备,它可以使用语音命令与设备进行交互,例如播放音乐、查找天气预报、控制智能家居设备等。Alexa在全球范围内拥有数百万个客户,包括许多家庭、企业和政府机构。 Google语音识别(Google ...
    99+
    2023-10-27
    亚马逊 语音识别 Google
  • python语音识别
    语音识别技术,也被称为自动语音识别,目标是以电脑自动将人类的语音内容转换为相应的文字。应用包括语音拨号、语音导航、室内设备控制、语音文档检索、简单的听写数据录入等。一、功能概述实现将语音转换为文字,调取第3方接口。比如百度ai,图灵机器人,...
    99+
    2023-01-30
    语音识别 python
  • NLP 语音音量音调识别
    NLP(Natural Language Processing)是一种涉及人类语言和计算机之间交互的领域,通过使用计算机算法和模型,...
    99+
    2023-10-11
    nlp
  • Android基于讯飞语音SDK实现语音识别
    一、准备工作 1、你需要android手机应用开发基础 2、科大讯飞语音识别SDK android版 3、科大讯飞语音识别开发API文档 4、android手机 关于科大讯飞S...
    99+
    2022-06-06
    讯飞 sdk 语音识别 Android
  • 基于Python实现语音识别和语音转文字
    目录前言直接使用获取权限1.环境准备2.获取权限代码实现1.获取access_token2.获取转换后音频3.配置接口参数4.完整demo5.执行前言 嗨嗨,大家好呀 ~ 今天给你们...
    99+
    2022-11-11
  • Android学习之语音识别、语音合成
    SDK SDK (Software Development Kit) 软件开发工具包是软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作...
    99+
    2022-06-06
    android学习 语音合成 语音识别 Android
  • uniapp语音识别(讯飞语音)转文字
    常见应用:游戏界面 文字语音、商城导航栏的语音输入搜索框、聊天界面的语音文字输入等. 引自官方 unicloud官方语音: 语音输入接口可使得网页开发人员能快速调...
    99+
    2022-12-24
    uniapp语音识别 uniapp语音转文字 uniapp讯飞语音识别
  • Android实现语音识别代码
    苹果的iphone 有语音识别用的是Google 的技术,做为Google 力推的Android 自然会将其核心技术往Android 系统里面植入,并结合google 的云端技...
    99+
    2022-06-06
    语音识别 Android
  • JavaScript如何实现语音识别
    这篇文章将为大家详细讲解有关JavaScript如何实现语音识别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。这里介绍一个开源的JavaScript语言输入库,名叫ann...
    99+
    2022-10-19
  • python语音识别whisper的使用
    目录一、背景二、whisper语音识别三、示例四、封装工具一、背景 最近想提取一些视频的字幕,语音文案,研究了一波 二、whisper语音识别 Whisper 是一种通用的语音识别模...
    99+
    2023-02-27
    python语音识别whisper python whisper
  • win8系统语音识别在哪里?怎样激活windows8系统语音识别功能
      激活windows8系统语音识别功能:   1、打开语音识别设置界面后,点击下一步;   2、选择使用麦克风的类型;   3、以头戴式麦克风为例,设置麦克风;   4、朗读上面的文本,调整音量; ...
    99+
    2022-06-04
    语音识别 系统 功能
  • 基于C#实现语音识别功能详解
    在.NET4.0中,我可以借助System.Speech组件让电脑来识别我们的声音。 以上,当我说"name",显示"Darren",我说&...
    99+
    2022-11-13
  • 基于Python创建语音识别控制系统
    下面附上参考文章,这篇文章是通过识别出来的文字来打开浏览器中的默认网站。python通过调用百度api实现语音识别 题目很简单,利用语音识别识别说出来的文字,根据文字的内容来控制图形...
    99+
    2022-11-12
  • 基于C#怎么实现语音识别功能
    今天小编给大家分享一下基于C#怎么实现语音识别功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在.NET4.0中,我可以借...
    99+
    2023-06-30
  • Python中怎么实现语音识别
    今天就跟大家聊聊有关Python中怎么实现语音识别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。离线转换对于国内的网络环境,无法用google API来将语音数据转换成文本文件,因为...
    99+
    2023-06-16
  • python语音识别的转换方法
    使用pyttsx的python包,你可以将文本转换为语音。 安装命令 pip install pyttsx3 -i https://pypi.tuna.tsinghua.edu.c...
    99+
    2022-11-12
  • 亚马逊语音识别怎么用
    以下是AIV的使用方法: 连接到Amazon Sphere或AWS上的Amazon Voice Recognition服务。 在您的设备上启动Amazon Voice Recognition服务,然后输入您的手机号码或访问Amazon ...
    99+
    2023-10-27
    亚马逊 语音识别
  • python语音识别whisper如何使用
    这篇文章主要介绍了python语音识别whisper如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python语音识别whisper如何使用文章都会有所收获,下面我们一起来看看吧。whisper语音识别...
    99+
    2023-07-05
  • Python语音识别的示例分析
    这篇文章给大家分享的是有关Python语音识别的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述将开启一个新的深度学习章节, 为大家来讲述一下深度学习在语音识别 (Speech Recognition)...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作