2019-09-24 17:25:30 weixin_42193239 阅读数 213
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

 

最近想做一个智能硬件(实现单片机使用W600连接上位机或直接实现语音识别)

查看了华为云的语音交互服务SIS,有两种:录音文件识别以及一句话语音识别

名称 功能
录音文件识别

可以实现5小时以内的音频到文字的转换。支持垂直领域定制,对应领域转换效果更佳。

一句话识别 可以实现语音到文字的转换。支持垂直领域定制,对应领域转换效果更佳。

 

在看了这两种模式后,选择了一句话识别,方便在下位机方面进行开发(前些时间已经实现STM32对语音文件实现8K采样率16bit的PCM格式WAV文件生成)

跳转到一句话识别的API介绍(https://support.huaweicloud.com/api-sis/api-sis.pdf),发现使用时需要先获取该用户的token(呃 通过拨打华为云的客服电话解决了这个问题)

获取用户Token采用POST方式,地址格式为: 

 

 针对不同的服务端点选择Endpoint,后缀是相同的/v3/auth/tokens

此时使用华为云推荐的软件(Postman)来实现这个过程

使用这个地址, 进行提交

          此时会反馈你的Token(只能使用24小时),如果打算长期使用请选择SDK (https://support.huaweicloud.com/sdkreference-sis/sis_05_0004.html),目前只有JAVA格式的,本文主要介绍API方式

得到Token就可以进行语音识别啦!!这里还是使用POST的方式,此时地址会发送改变,一句话语音识别的两个服务端点为:

区域名称 终端节点(Endpoint)
华北-北京一 sis-ext.cnnorth-1.myhuaweicloud.com
华北-北京四 sis-ext.cnnorth-4.myhuaweicloud.com

 

因为我的是华北-北京四,这里选择sis-ext.cnnorth-4.myhuaweicloud.com,继续查看该API手册,发现对于提交语音数据的包格式定义如下:

此时POST地址为: https://sis-ext.cn-north-4.myhuaweicloud.com/v1/{projectid}/asr/short-audio

获取Projectid的方式:将光标放在用户名下面选择我的凭证:

得到projectid后开始发包:

 

我采用的是WAV自识别模式,使用的WAV文件为AU生成的录音文件,利用BASE64编码转换后进行发送:

 

 data数据为转码后的base64格式,因为太长就不放上来了。此时点击SEND

测试成功,本篇结束。 

2019-08-29 14:45:38 a18612039484 阅读数 239
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

语音识别相关API

语音识别关键概念:声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移。
通过傅里叶变换,可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布,建立音频内容和文本的对应关系,以此作为模型训练的基础。

梅尔频率倒谱系数(mfcc)

主要思想:提取13个特征,生成梅尔频率倒谱系数矩阵。
API:

import scipy.io.wavfile as wf
import python_speech_features as sf

# 提取采样率,特征
sample_rate,sigs = wf.read('xxx.wav')
# 生成mfcc矩阵
mfcc = sf.mfcc(sigs,sample_rate)

声音合成

案例:

import json
import numpy as np
import scipy.io.wavfile as wf
# 读取存有音频信息的json文件
with open('../data/12.json', 'r') as f:
    freqs = json.loads(f.read())

tones = [
('G5', 1.5),
('A5', 0.5),
('G5', 1.5),
('E5', 0.5),
('D5', 0.5),
('E5', 0.25),
('D5', 0.25),
('C5', 0.5),
('A4', 0.5),
('C5', 0.75)]

# 设置采样率
sample_rate = 44100
# 创建一个空数组储存合成音频信息
music = np.empty(shape=1)

for tone, duration in tones:
    times = np.linspace(0, duration, duration * sample_rate)
    sound = np.sin(2 * np.pi * freqs[tone] * times)
    music = np.append(music, sound)
music *= 2 ** 15
music = music.astype(np.int16)
wf.write('music.wav', sample_rate, music)

语音识别

基本步骤: 提取声音信息(采样率,特征),生成梅尔频率倒谱系数矩阵(mfcc),训练隐马尔科夫模型,做最后的识别。
API:

import numpy as np
import scipy.io.wavfile as wf
import python_speech_features as sf
import hmmlearn.hmm as hl

# 提取样本信息
train_x,train_y = [],[]
mfccs = np.array([])
for sound_files in files_list:
    for sound_file in sound_files:
        sample_rate,sigs = wf.read(sound_file)
        mfcc = sf.mfcc(sigs,sample_rate)
        # 将mfcc矩阵添加到mfccs中
        if len(mfccs) == 0:
            mfccs == mfcc
        else:
            mfccs = np.append(mfccs,mfcc)
    # 将mfccs矩阵列表添加到训练集中  
    train_x.append(mfccs)
# 最终的train_x len(sound_files)个特征的矩阵
# train_y存的是特征标签,比如:apple,banana,pear

# 构建并训练隐马模型
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)

# 同样方法获取测试集数据
# 测试
pred_y = []
for mfccs in test_x: 
    # 验证每个模型对当前mfcc的匹配度得分
    best_score, best_label = None, None
    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_y.append(best_label)

print(test_y)
print(pred_y)
2019-01-20 13:01:27 sinat_35162460 阅读数 7500
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

本文采用百度云语音识别API接口,实现低于60s音频的语音识别,也可以用于合成文本长度小于1024字节的音频,此外采用snowboy离线语音唤醒引擎可实现离线语音唤醒,实现语音交互。基于本内容可实现语音控制小车,语音控制音箱、语音交互。。。
可以查看我的github获取更多信息:https://github.com/dalinzhangzdl/AI_Car_Raspberry-pi
一、 百度云语音识别 python-SDK的安装
工欲善其事必先利其器,下面先来武装一下自己,申请属于自己的百度AI开发者账号,安装SDK(Software Development Kit,软件开发工具包)。
1、进入百度云平台,进入百度语音控制台后,创建自己的应用,获取属于你的ID号和密钥:
APP_ID = ‘114xxxx5’
API_KEY = ‘NYIvd23qqGAZxxxxxxxxxxxxxxx’
SECRET_KEY = ‘DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx’
2、SDK的下载与安装
应用创建完成后下载相应的开发SDK,这里采用python开发,下载python-SDK即可
在这里插入图片描述
SDK的安装:
将下载的SDK包拷贝到树莓派pi目录下,终端界面解压安装,安装过程如下:
解压包:unzip aip-python-sdk-2.0.0.zip
安装SDK包: sudo pip install baidu-aip
在这里插入图片描述
在这里插入图片描述
遵循以上步骤操作,就搭建好属于自己的语音识别和语音合成平台,再添加一个麦克风和一个喇叭或者音箱就可以进行语音识别方面的开发了,语音控制小车,控制智能家电等。

二、Python-SDK 实现语音识别和语音合成
1、python-SDK实现语音识别
遵循SDK文档进行快速开发,务必阅读文档。如果对自己的录音进行测试,需先采用格式工厂对录音文件进行转换,确保录音的音频参数符合云语音识别的要求。单通道、采样频率为16K PCM格式,也可先直接采用官方的音频进行测试。
程序如下:

#_*_ coding:UTF-8 _*_
# @author: zdl 
# 百度云语音识别Demo,实现对本地语音文件的识别。
# 需安装好python-SDK,录音文件不不超过60s,文件类型为wav格式。
# 音频参数需设置为 单通道 采样频率为16K PCM格式 可以先采用官方音频进行测试

# 导入AipSpeech  AipSpeech是语音识别的Python SDK客户端
from aip import AipSpeech
import os

''' 你的APPID AK SK  参数在申请的百度云语音服务的控制台查看'''
APP_ID = '114xxxx5'
API_KEY = 'NYIvd23qqGAZxxxxxxxxxxxxxxx'
SECRET_KEY = 'DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx'

# 新建一个AipSpeech
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)


# 读取文件
def get_file_content(filePath):   #filePath  待读取文件名
    with open(filePath, 'rb') as fp:
        return fp.read()

		
def stt(filename):         # 语音识别
    # 识别本地文件
    result = client.asr(get_file_content(filename),
                        'wav',
                        16000,
                        {'dev_pid': 1536,}      # dev_pid参数表示识别的语言类型 1536表示普通话
                        )
    print result

	# 解析返回值,打印语音识别的结果
    if result['err_msg']=='success.':
        word = result['result'][0].encode('utf-8')       # utf-8编码
        if word!='':
            if word[len(word)-3:len(word)]==',':
                print word[0:len(word)-3]
                with open('demo.txt','w') as f:
                    f.write(word[0:len(word)-3])
                f.close()
            else:
                print (word.decode('utf-8').encode('gbk'))
                with open('demo.txt','w') as f:
                    f.write(word)
                f.close()
        else:
            print "音频文件不存在或格式错误"
    else:
        print "错误"

# main函数 识别本地录音文件yahboom.wav
if __name__ == '__main__':
    
    stt('test.wav')
    

2、python-SDK实现语音合成
语音合成较语音识别简单,合成文本长度必须小于1024字节,如果本文长度较长,可以采用多次请求的方式。下面是合成本地文件demo程序:

#_*_ coding:UTF-8 _*_
# @author: zdl 
# 百度云语音合成Demo,实现对本地文本的语音合成。
# 需安装好python-SDK,待合成文本不超过1024个字节
# 合成成功返回audio.mp3 否则返回错误代码

# 导入AipSpeech  AipSpeech是语音识别的Python SDK客户端
from aip import AipSpeech
import os

''' 你的APPID AK SK  参数在申请的百度云语音服务的控制台查看'''
APP_ID = '114xxxx5'
API_KEY = 'NYIvd23qqGAZxxxxxxxxxxxxxxx'
SECRET_KEY = 'DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx'

# 新建一个AipSpeech
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 将本地文件进行语音合成
def tts(filename):
    f = open(filename,'r')
    command = f.read()
    if len(command) != 0:
        word = command
    f.close()
    result  = client.synthesis(word,'zh',1, {
        'vol': 5,'per':0,
    })
	
# 合成正确返回audio.mp3,错误则返回dict 
    if not isinstance(result, dict):
        with open('audio.mp3', 'wb') as f:
            f.write(result)
        f.close()
        print 'tts successful'

# main

if __name__ == '__main__':

tts('demo.txt')
2019-08-16 20:30:12 qq_43280079 阅读数 354
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

这两天看了一下百度的语音识别api,听老师说还不错,而且还是免费的,就自己学了一下(本人是python学习的小白,以前也没有调用过任何的接口)

首先我们当然是打开百度的AI开放平台,然后打开这个
在这里插入图片描述
在这里插入图片描述
然后登陆自己的账号
在这里插入图片描述
然后在页面中找到创建应用的按钮
在这里插入图片描述

然后在这里填写一些关于自己的应用的一些相关资料,然后立即创建
在这里插入图片描述
这里就显示了我们创建成功了!!在这里插入图片描述
然后查看我们的应用列表,圈中的三个数据一是我们连接上接口的重要数据等下要用到

在这里插入图片描述
然后我们打开技术文档
在这里插入图片描述
这里我们用的是python
在这里插入图片描述
按照文档的要求,安装好sdk,记得把文档仔仔细细的读一遍
有几个重要的提醒

安装

在这里插入图片描述
语音格式(非常重要)
在这里插入图片描述
这下面是复制文档上的代码直接搬过来就可以用了

from aip import AipSpeech

""" 你的 APPID AK SK """
#宏定义
APP_ID = '17017240'
API_KEY = 'vjWUwOuv62PkuNW5ZrcSTrna'
SECRET_KEY = 'pAwSdHr84mNfjsw7pohGqYXTcmGDA' #由于隐私问题,我这个是随便填的一个数
                                              #你们要用自己的数据

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 读取语音文件函数
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()


# 识别本地文件  主函数
print(client.asr(get_file_content('C:/Users/E plus/Desktop/关门.wav'), 'wav', 16000, {'dev_pid': 1536,}))
'''speech 就 是你的录音    文件格式   采样率1600 固定值(8000或者16000)  dev_pid语言类型 1536是普通话'''

'''你们需要测试的时候,只要修改代码中的API_ID  API_KEY  SECRET_KEY  以及文件的路径和文件名,还有采样率,语种就行了'''
   

要注意里面的宏定义里的信息就是刚刚创建的应用给出来的信息,复制过去就行
在这里插入图片描述
还有就是注意文件的格式
文件格式
说实话,这种文件格式真的不好找,找到了采样率都是不对的所以这里推荐一个软件
在这里插入图片描述
这个软件可以进行录音(当然了,最好还是用pyaudio直接代码录制,上网薅一段代码就能录制了。),并且录音的格式是wav的采样率也是可以调的,还可以把现成的wav语音进行格式转换,转换成我们需要的采样率。
在这里插入图片描述

这里面有格式转换在这里插入图片描述
在这里插入图片描述
这个软件亲测,得出来的语音都是符合百度语音识别的标准的。然后把代码运行一下就行了

在这里插入图片描述

2019-12-07 21:29:45 qq_43157190 阅读数 36
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

本文介绍了如何使用matlab调用百度语音识别的API接口,实现语音识别。

  • 首先进入百度云的官网注册登录百度云官网
  • 登陆之后进入管理控制台,如下图所示
    在这里插入图片描述
  • 接着创建一个语音识别的应用,就选默认的就好了
    在这里插入图片描述

官方技术文档可以参考

  • 接着我们来看使用方法,整个流程和我们之前的人脸识别大致相同,在调用api之前我们需要获得acess_token,这个可以通过我们的api key和secret key获得,这个可以在应用管理里面看到,如下图:
    在这里插入图片描述
    在这里插入图片描述
  • 用代码总结起来就是
api_key = '你的 api key';
secret_key = '你的secret key';
url_token = ['https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=',api_key,'&client_secret=',secret_key];
token = webread(url_token);
token = token.access_token; % 至此,获得了token

效果如下,但是要注意token的有效期是1个月,就是这个token在一个月内是不会变的,这段时间不用重复请求,直接用就好在这里插入图片描述


  • 接下来处理音频,准备上传
    * 注意音频我这里以 .wav文件为例,官方支持pcm 或者 wav 或者 amr,但是采样率必须为16000,单声道。同时要将音频转换成字符串,进行一个编码,这里需要用到一个常用的,但是matlab自身没有的函数base64file,可以在matlab官方下载,我这里直接贴出来。
    • 这个函数真的非常有用,很多地方需要用到这种编码。
function [base64string,base64string_len] = base64file(file)
fid = fopen(file,'rb');
bytes = fread(fid);
fclose(fid);
base64string_len = size(bytes,1);
encoder = org.apache.commons.codec.binary.Base64;
base64string = char(encoder.encode(bytes))';
end
  • 我们再来看官方给出的请求参数
    在这里插入图片描述
    speech和len是音频编码之后得到的数据,rate和channel有指定值而且不可省略dev_pid这个是调用的接口函数,一般取默认值就好,按需求更改。
    在这里插入图片描述

  • 要点都说完了,下面看代码就很好理解了
[base64string,base64string_len] = base64file(path);
data = struct('format','wav','token',token,'len',base64string_len,...
    'speech',base64string,'cuid','Sirius','rate',16000,'channel',1);
result = webwrite(url,data);
result = result.result{:};

在这里插入图片描述


  • 最后以一个完整的例子为例,直接运行对着麦克风说话即可
a = audiorecorder(16000,16,1);
record(a);
pause(5);
stop(a);
a = getaudiodata(a);
audiowrite('test.wav',a,16000);
txt = Totext('test.wav');
delete('test.wav');

function result = Totext(path)
api_key = '你的';
secret_key = '你的';
url_token = ['https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=',api_key,'&client_secret=',secret_key];
token = webread(url_token);
token = token.access_token % 至此,获得了token
url = 'http://vop.baidu.com/server_api';
[base64string,base64string_len] = base64file(path);
data = struct('format','wav','token',token,'len',base64string_len,...
    'speech',base64string,'cuid','Sirius','rate',16000,'channel',1);
result = webwrite(url,data);
result = result.result{:};
end

function [base64string,base64string_len] = base64file(file)
fid = fopen(file,'rb');
bytes = fread(fid);
fclose(fid);
base64string_len = size(bytes,1);
encoder = org.apache.commons.codec.binary.Base64;
base64string = char(encoder.encode(bytes))';
end

嘿嘿,如果觉得有用,请点赞支持,谢谢

Python 实时语音识别

阅读数 1061

十大语音识别API

阅读数 18

没有更多推荐了,返回首页