特别提一下安装hmmlearn库不能直接pip install hmmlearn
安装过程如下:
1. 进入 https://www.lfd.uci.edu/~gohlke/pythonlibs/ ,找到hmmlearn***.whl类型的文件下载(要和自己的python版本相对应)如果你用的是anaconda可以在命令窗口输入conda -activate 进入你的anaconda环境,再输入python -V查看和anaconda对应的版本。如图所示安装自己对应的版本
2 然后将下载的文件放在C:\Anaconda3\pkgs\python-3.6.4-h6538335_1\Lib目录(此路径为自己当时安装anaconda的路径,如果找不到可以下载一个everything输入anaconda查找自己当时的安装路径,everything的链接就不附上了),并在此目录下进行安装。然后在命令窗口输入cd +自己anaconda的路径切换到该路径,在该路径下输入
pip install hmmlearn-0.2.1-cp36-cp36m-win_amd64.whl
进行安装,名字需要改成自己下载的文件的名字。至此,安装成功。
import os
import numpy as np
import scipy.io.wavfile as wf
import python_speech_features as sf
import hmmlearn.hmm as hl
def search_file(directory):
"""
:param directory: 训练音频的路径
:return: 字典{'apple':[url, url, url ... ], 'banana':[...]}
"""
# 使传过来的directory匹配当前操作系统
directory = os.path.normpath(directory)
objects = {}
# curdir:当前目录
# subdirs: 当前目录下的所有子目录
# files: 当前目录下的所有文件名
for curdir, subdirs, files in os.walk(directory):
for file in files:
if file.endswith('.wav'):
label = curdir.split(os.path.sep)[-1] # os.path.sep为路径分隔符
if label not in objects:
objects[label] = []
# 把路径添加到label对应的列表中
path = os.path.join(curdir, file)
objects[label].append(path)
return objects
train_samples = search_file('G:/Google download/CASIA database/liuchanhg')
#print(train_samples)
train_x, train_y = [], []
# 遍历字典
for label, filenames in train_samples.items():
# [('apple', ['url1,,url2...'])
# [("banana"),("url1,url2,url3...")]...
mfccs = np.array([])
for filename in filenames:
sample_rate, sigs = wf.read(filename)
mfcc = sf.mfcc(sigs, sample_rate)
if len(mfccs) == 0:
mfccs = mfcc
else:
mfccs = np.append(mfccs, mfcc, axis=0)
train_x.append(mfccs)
train_y.append(label)
models = {}
for mfccs, label in zip(train_x, train_y):
model = hl.GaussianHMM(n_components=4, covariance_type='diag', n_iter=1000)
models[label] = model.fit(mfccs) # # {'apple':object, 'banana':object ...}
# 读取测试集数据
test_samples = search_file('G:/Google download/CASIA database/wangzhe')
test_x, test_y = [], []
for label, filenames in test_samples.items():
mfccs = np.array([])
for filename in filenames:
sample_rate, sigs = wf.read(filename)
mfcc = sf.mfcc(sigs, sample_rate)
if len(mfccs) == 0:
mfccs = mfcc
else:
mfccs = np.append(mfccs, mfcc, axis=0)
test_x.append(mfccs)
test_y.append(label)
pred_test_y = []
for mfccs in test_x:
# 判断mfccs与哪一个HMM模型更加匹配
best_score, best_label = None, None
# 遍历7个模型
for label, model in models.items():
score = model.score(mfccs)
if (best_score is None) or (best_score < score):
best_score = score
best_label = label
pred_test_y.append(best_label)
print(test_y)
print(pred_test_y)
------- ----------------------------------------
import os
import pandas as pd
mylist= os.listdir('G:/Google download/CASIA database/liuyong')
type(mylist)
#print(mylist[150])
#print(mylist[52][0:-8])
feeling_list=[]
for item in mylist:
if item[0:-8]=='angray':
feeling_list.append('angray')
elif item[0:-8]=='fear' :
feeling_list.append('fear')
elif item[0:-8]=='happy' :
feeling_list.append('happy')
elif item[6:-16]=='netural' :
feeling_list.append('netural')
elif item[6:-16]=='sad':
feeling_list.append('sad')
elif item[6:-16]=='surprise':
feeling_list.append('surprise')
labels = pd.DataFrame(feeling_list)
labels[:10]
---------------------------------------------------------------------
import os
import pandas as pd
import librosa
import librosa.display
import numpy as np
import scipy.io.wavfile as wf
import python_speech_features as sf
mylist= os.listdir('G:/Google download/CASIA database/liuyong')
type(mylist)
#print(mylist[150])
#print(mylist[52][0:-8])
feeling_list=[]
for item in mylist:
if item[0:-8]=='angray':
feeling_list.append('angray')
elif item[0:-8]=='fear' :
feeling_list.append('fear')
elif item[0:-8]=='happy' :
feeling_list.append('happy')
elif item[6:-16]=='netural' :
feeling_list.append('netural')
elif item[6:-16]=='sad':
feeling_list.append('sad')
elif item[6:-16]=='surprise':
feeling_list.append('surprise')
labels = pd.DataFrame(feeling_list)
labels[:10]
def search_file(directory):
"""
:param directory: 训练音频的路径
:return: 字典{'apple':[url, url, url ... ], 'banana':[...]}
"""
# 使传过来的directory匹配当前操作系统
directory = os.path.normpath(directory)
objects = {}
# curdir:当前目录
# subdirs: 当前目录下的所有子目录
# files: 当前目录下的所有文件名
for curdir, subdirs, files in os.walk(directory):
for file in files:
if file.endswith('.wav'):
label = curdir.split(os.path.sep)[-1] # os.path.sep为路径分隔符
if label not in objects:
objects[label] = []
# 把路径添加到label对应的列表中
path = os.path.join(curdir, file)
objects[label].append(path)
return objects
train_samples = search_file('G:/Google download/CASIA database/liuchanhg')
#print(train_samples)
train_x, train_y = [], []
# 遍历字典
df = pd.DataFrame(columns=['feature'])
bookmark=0
for label, filenames in train_samples.items():
# [('apple', ['url1,,url2...'])
# [("banana"),("url1,url2,url3...")]...
mfccs = np.array([])
for filename in filenames:
sample_rate, sigs = wf.read(filename)
mfcc = sf.mfcc(sigs, sample_rate)
if len(mfccs) == 0:
mfccs = mfcc
else:
mfccs = np.append(mfccs, mfcc, axis=0)
df.loc[bookmark] = [mfccs]
bookmark=bookmark+1
df3 = pd.DataFrame(df['feature'].values.tolist())
newdf = pd.concat([df3,labels], axis=1)
rnewdf = newdf.rename(index=str, columns={"0": "label"})
from sklearn.utils import shuffle
rnewdf = shuffle(newdf)
rnewdf=rnewdf.fillna(0)
newdf1 = np.random.rand(len(rnewdf)) < 0.8
train = rnewdf[newdf1]
test = rnewdf[~newdf1]
trainfeatures = train.iloc[:, :-1]
trainlabel = train.iloc[:, -1:]
testfeatures = test.iloc[:, :-1]
testlabel = test.iloc[:, -1:]
参考资源:
https://www.cnblogs.com/LXP-Never/p/11415110.html#声音合成
https://blog.csdn.net/qq_33598125/article/details/85124778
来源:CSDN
作者:刘根生
链接:https://blog.csdn.net/qq_24163555/article/details/103243450