python使用Speech_Recognition实现普通话识别(一)

最近因学习任务,对语音识别需要了解,所以现在就把一些学习过程遇到的问题解决方法分享给大家。首先pyhon提供了许多语音识别库,大致包含:
在这里插入图片描述
上述语音识别软件库各个之间的侧重点不同,如:谷歌云语音侧重语音向文本转换,又如wit与apiai还提供超出基本语音识别的内置功能(识别讲话者意图的自然语言处理功能)。由于我仅仅是做简单的中文语音识别,所以使用的是SpeechRcognition这个语音识别库。

SpeechRcognition的特点优势

  1. 满足几种主流语音 API ,灵活性高;
  2. Google Web Speech API 支持硬编码到 SpeechRecognition 库中的默认 API 密钥,无需注册就可用;
  3. SpeechRecognition无需构建访问麦克风和从头开始处理音频文件的脚本, 只需几分钟即可自动完成音频输入、检索并运行。因此易用性很高。

怎么使用SpeechRcognition?

1. 安装SpeechRcognition
下载地址:https://pypi.org/project/SpeechRecognition/
安装命令: pip install SpeechRcognition
不过仅仅安装这个是不够的,还需要安装对应需要的资源库,如下图:

2. SpeechRcognition的识别类(器)

以上七个中只有 recognition_sphinx()可与CMU Sphinx 引擎脱机工作, 其他六个都需要连接互联网。另外,SpeechRecognition 附带 Google Web Speech API 的默认 API 密钥,可直接使用它。其他六个 API 都需要使用 API 密钥或用户名/密码组合进行身份验证。

3. 下面进行中文语音识别
我在这里使用的是recognize_sphinx()语音识别器,它可以脱机工作,但是必须安装pocketsphinx库(详细安装过程见https://blog.csdn.net/zouxy09/article/details/7942784),若要进行中文识别,还需要两样东西。一、语音文件(SpeechRecognition对文件格式有要求);二、中文声学模型、语言模型和字典文件,下面进行详细描述:
SpeechRecognition支持语音文件类型
WAV: 必须是 PCM/LPCM 格式
AIFF
AIFF-C
FLAC: 必须是初始 FLAC 格式;OGG-FLAC 格式不可用
pocketsphinx需要安装的中文语言、声学模型
下载地址:http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/
在这里插入图片描述
安装步骤

  1. 下载cmusphinx-zh-cn-5.2.tar.gz并解压
    在这里插入图片描述
    在这里插入图片描述
  2. 在python安装目录下找到Lib\site-packages\speech_recognition
    点击进入pocketsphinx-data文件夹
    点击进入pocketsphinx-data文件夹,并新建文件夹zh-CN
    在这里插入图片描述
    在这个文件夹中添加进入刚刚解压的文件,需要注意:把解压出来的zh_cn.cd_cont_5000文件夹重命名为acoustic-modelzh_cn.lm.bin命名为language-model.lm.binzh_cn.dicdic改为dict格式。
    在这里插入图片描述

中文识别实际例子

1. 实际的代码程序

# -*- coding: utf-8 -*-
# /usr/bin/python
# 作者:kimicr
# 实验日期:20190820
# Python版本:3.6.3
import speech_recognition as sr
r = sr.Recognizer()    #调用识别器
test = sr.AudioFile("C:\\Users\cc\Desktop\\test1.flac")   #导入语音文件
with test as source:       
    audio = r.record(source)
type(audio)
c=r.recognize_sphinx(audio, language='zh-cn')     #识别输出
print(c)

输出的结果:由于语音自己录的不好,所以识别的不是很高。可以找例子多试试
在这里插入图片描述

2. 程序中可能出现的问题
一般出现问题在于这一行代码:test = sr.AudioFile(“C:\Users\file\Desktop\test1.flac”) #导入语音文件。出现的问题为:
在这里插入图片描述

这是由于该文件地址是直接通过打开文件属性方式,摘到文件路径,复制过来的,问题出现是可能里面包含有了非法字符,解决办法就是重新手动输入这一行代码(特别是文件路径)

好的,我可以为您提供Python语音识别代码,实现百度语音识别API的功能。请注意,在使用之前需要先进行百度AI开发者账号的注册和创建应用,获取API Key和Secret Key。 ```python # 导入需要的模块 import os import time import urllib.request import urllib.parse import json import base64 import hashlib import pyaudio # 设置API Key和Secret Key API_KEY = 'your_api_key' SECRET_KEY = 'your_secret_key' # 获取Token,用于后续的API调用 def get_token(): token_url = 'https://aip.baidubce.com/oauth/2.0/token' grant_type = 'client_credentials' token_data = {'grant_type': grant_type, 'client_id': API_KEY, 'client_secret': SECRET_KEY} token_data_encoded = urllib.parse.urlencode(token_data).encode('utf-8') token_request = urllib.request.Request(token_url, token_data_encoded) token_response = urllib.request.urlopen(token_request) token_content = token_response.read().decode('utf-8') token_json = json.loads(token_content) access_token = token_json['access_token'] return access_token # 进行语音识别 def speech_recognition(): token = get_token() speech_url = 'https://vop.baidu.com/server_api' speech_data = { 'format': 'pcm', 'rate': 16000, 'channel': 1, 'cuid': 'python', 'token': token, 'speech': '', 'len': 0, 'dev_pid': 1536 # 1536为普通话,其它语种需要修改为对应的dev_pid } speech_data_encoded = json.dumps(speech_data).encode('utf-8') speech_request = urllib.request.Request(speech_url, speech_data_encoded) speech_request.add_header('Content-Type', 'application/json') speech_response = urllib.request.urlopen(speech_request) speech_content = speech_response.read().decode('utf-8') speech_json = json.loads(speech_content) result = speech_json['result'][0].strip() return result # 录音,用于获取语音数据 def record_audio(): CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 RECORD_SECONDS = 5 WAVE_OUTPUT_FILENAME = 'audio.wav' p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) frames = [] print('开始录音...') for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print('录音结束!') stream.stop_stream() stream.close() p.terminate() wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() if __name__ == '__main__': while True: input('按下回车键开始录音,录音结束后按下回车键停止录音...') record_audio() result = speech_recognition() print('语音识别结果:', result) ``` 以上代码实现个简单的语音识别程序,可以通过调用百度语音识别API实现语音转文字的功能。需要注意的是,该程序需要使用pyaudio和wave两个Python模块,需要提前安装。另外,在使用之前需要修改代码中的API Key和Secret Key为自己的值。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值