利用隐马尔可夫模型(HMM)进行语音情感识别

特别提一下安装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)

识别率很低只有50%左右,只适合入门 

参考资源:

 https://www.cnblogs.com/LXP-Never/p/11415110.html#声音合成

安装hmmlearn--python_方月一 +1的博客-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值