【学习小记】零基础入门语音识别Task1

如题,来自DataWhale的四月学习计划。。。既不懂Tensorflow也不懂语音识别所以更要冲哈哈哈哈哈哈哈

既然是识别,大体流程还是没太大变化的,分别为

加载深度学习框架
加载音频处理库
特征提取及数据集的建立
建立模型:搭建CNN网络、预测

加载深度学习框架和音视频处理库

这里没啥太多好说的

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
import os
import librosa
import librosa.display
import glob 

这里我省略了一步下载librosa库的步骤。这个库用来处理音频,也可以进行幅度时频转换等。

特征提取及数据库的建立

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]

tqdm: tqdm中的tqdm()是实现进度条美化的基本方法,在for循环体中用tqdm()包裹指定的迭代器或range()即可。简单来说,让进度好看。

梅尔频谱:机器学习中的音频特征:理解Mel频谱图
梅尔频谱让人耳对频率的感知度通过特殊映射成了线性关系。
STFT和声谱图,梅尔频谱(Mel Bank Features)与梅尔倒谱(MFCCs)

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])#np.vstack:按垂直方向(行顺序)堆叠数组构成一个新的数组

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

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

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))

X_train = X_train.reshape(-1, 16, 8, 1)
X_test = X_test.reshape(-1, 16, 8, 1)#-1固定列数

至此特征也提取了,数据集也构建好了。。。

往下是CNN模型构建和预测,这里基本没啥新意,就不在此赘述了。

补充一点来自别的优秀小伙伴的笔记

原文链接特征提取方法的理解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值