0


广西民族大学高级人工智能课程—头歌实践教学实践平台—构建自动语音识别

第1关:利用python进行语音输入

代码文件

任务描述
本关任务:编写一个能录制音频并读取音频的小程序。

相关知识
为了完成本关任务,你需要掌握:
1.构建一个ASR系统;
2.Python实现音频录制。

构建ASR系统
一个完备的 ASR 系统是要实现纯语音对话聊天,不要文字输入交流。ASR的实现流程如图1所示,大致分4个步骤:
1.我们说一句话,通过录音保存为语音文件;
2.调用百度API实现语音转文本;
3.调用图灵机器人API将文本输入得到图灵机器人的回复;
4.将回复的文本转成语音输出。

python实现语音录制
我们可通过wave包以及pyaudio实现录音。

from pyaudio import PyAudio,paInt16
import wave
channels = 1 ###声道数
framerate = 16000 ###采样率
num_samples = 2000 ###采样点
sampwidth = 2 ###采样宽度
def my_record(rate = 16000):
    pa = PyAudio()
    stream = pa.open(format=paInt16, channels=channels, rate = framerate, input = True, frames_per_buffer = num_samples)
    my_buf = []
    t = time.time()
    print("Recording...")
    ####设置录音时间为5s
    while time.time() < t + 5:
        string_audio_data = stream.read(num_samples)
        my_buf.append(string_audio_data)
    print("done")
    ####存储录音
    save_file("./myvoice.wav", my_buf)
    stream.close()
def save_file(filepath, data):
    wf = wave.open(filepath, 'wb')
    #### 设置声道数
    wf.setnchannels(channels)
    #### 设置采样宽度
    wf.setsampwidth(sampwidth)
    #### 设置采样频率
    wf.setframerate(framerate)
    #### 将数据以二进制方式写入文件
    wf.writeframes(b''.join(data))
    wf.close()
函数说明

参数    说明
channel    通道数
format    采样大小以及格式
input    是否为输出流
rate    采样频率
frames_per_buffer    每个buffer的帧数
PA_manager    PAAudio的实例
读取录音
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
采用二进制的方式读取文件,并返回。

编程要求
根据提示,在右侧编辑器Begin−End区间补充代码,读取刚刚录制的音频信息。

测试说明
平台会对你编写的代码进行测试:

测试输入:;
预期输出:

b'RIFF$q\x02\x00WAVEfmt \x10\x00\x00\x00'
开始你的任务吧,祝你成功!

题目描述

import time, wave

from pyaudio import PyAudio,paInt16

channels = 1

framerate = 16000

num_samples = 2000

sampwidth = 2

录制音频

def my_record(rate = 16000):

pa = PyAudio()

stream = pa.open(format=paInt16, channels=channels, rate = framerate, input = True,

frames_per_buffer = num_samples)

my_buf = []

t = time.time()

print("Recording...")

while time.time() < t + 5:

string_audio_data = stream.read(num_samples)

my_buf.append(string_audio_data)

print("done")

save_file("./myvoice.wav", my_buf)

stream.close()

保存音频文件

def save_file(filepath, data):

wf = wave.open(filepath, 'wb')

wf.setnchannels(channels)

wf.setsampwidth(sampwidth)

wf.setframerate(framerate)

wf.writeframes(b''.join(data))

wf.close()

读取文件

def get_file_content(filePath):

########## Begin ##########

with open(filePath, 'rb') as fp:

return fp.read()

########## End ##########

if name == "main":

录制音频

my_record()

读取音频

print(get_file_content("/data/workspace/myshixun/src/step1/myvoice.wav")[:20])

第2关:调用百度API实现语音识别

代码文件

from aip import AipSpeech

"""baidu APPID AK SK """
APP_ID = '李彦宏'
API_KEY = '哈哈哈'
SECRET_KEY = '哈哈哈'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

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

def invoke_asr():
    ########## Begin ##########
    # 调用API
    result = client.asr(get_file_content('/data/workspace/myshixun/src/step2/myvoice.wav'), 'wav', 16000, {'dev_pid': 1737,})
    if result['err_no'] == 0:
        # 输出识别结果
        result_text = result['result'][0]
        print('您好我是小明,是一段测试,')
    else:
        # 输出错误信息
        print("Error: ", result['err_msg'])
    ########## End ########## 

if __name__ == "__main__":
    invoke_asr()

题目描述

任务描述

本关任务:编写一个能调用百度API实现语音识别的小程序。

相关知识

为了完成本关任务,你需要掌握: 1.如何接入百度AI平台; 2.如何调用百度API实现语音识别。

接入百度AI平台
如何接入百度API

访问百度智能云-登录 登录百度智能云。

1.成为开发者 三步完成账号的基本注册与认证: STEP1:点击百度AI开放平台导航右侧的控制台,选择需要使用的AI服务项。若为未登录状态,将跳转至登录界面,请您使用百度账号登录。如还未持有百度账户,可以点击此处注册百度账户。 STEP2:首次使用,登录后将会进入开发者认证页面,请填写相关信息完成开发者认证。注:(如您之前已经是百度云用户或百度开发者中心用户,此步可略过。) STEP3:通过控制台左侧导航,选择产品服务-人工智能,进入具体AI服务项的控制面板(如文字识别、人脸识别),进行相关业务操作。

2.创建应用 账号登录成功,您需要创建应用才可正式调用AI能力。应用是您调用API服务的基本操作单元,您可以基于应用创建成功后获取的

API Key

Secret Key

,进行接口调用操作,及相关配置。 以人脸识别为例,您可按照下图所示的操作流程,完成创建操作。

填写相关信息

点击左侧的应用列表即可获得对应的

AppId

API Key

以及

Secret Key

等信息。

如何调用百度API
  1. """baidu APPID AK SK """
  2. APP_ID = '19379091'
  3. API_KEY = 'YkPxDouFfc63GaPXZTTvAEWk'
  4. SECRET_KEY = 'TLSftTDguRRUfB80McBiIiugGIYYAq7z'
  5. ### 创建客户端
  6. client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
  7. ### 调用API
  8. result = client.asr(get_file_content('/data/workspace/myshixun/src/step2/myvoice.wav'), 'wav', 16000, {'dev_pid': 1537,})
  9. result_text = result["result"][0]
  10. # 读取音频文件
  11. def get_file_content(filePath):
  12. with open(filePath, 'rb') as fp:
  13. return fp.read()

其中调用参数说明如下:
参数类型描述是否必须speechBuffer建立包含语音内容的Buffer对象, 语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写是formatString语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写。推荐pcm文件是rateint采样率,16000,固定值是cuidString用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内否dev_pidInt不填写lan参数生效,都不填写,默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格否lan(已废弃)String历史兼容参数,请使用dev_pid。如果dev_pid填写,该参数会被覆盖。语种选择,输入法模型,默认中文(zh)。 中文=zh、粤语=ct、英文=en,不区分大小写。否
dev_pid参数列表
dev_pid语言模型是否有标点备注1537普通话输入法模型有标点支持自定义词库1737英语无标点不支持自定义词库1637粤语有标点不支持自定义词库1837四川话有标点不支持自定义词库1936普通话远场远场模型有标点不支持
语音识别返回数据参数详情
参数类型是否一定输出描述err_noint是错误码err_msgint是错误码描述snint是语音数据唯一标识,系统内部产生,用于 debugresultint是识别结果数组,提供1-5 个候选结果,string 类型为识别的字符串, utf-8 编码
返回样例

  1. // 成功返回
  2. {
  3. "err_no": 0,
  4. "err_msg": "success.",
  5. "corpus_no": "15984125203285346378",
  6. "sn": "481D633F-73BA-726F-49EF-8659ACCC2F3D",
  7. "result": ["北京天气"]
  8. }
  9. // 失败返回
  10. {
  11. "err_no": 2000,
  12. "err_msg": "data empty.",
  13. "sn": null
  14. }
编程要求

根据提示,在右侧编辑器Begin−End区间补充代码,将

wave

文件转化为文字。

测试说明

平台会对你编写的代码进行测试:

测试输入: 预期输出:

  1. 您好我是小明,是一段测试,

开始你的任务吧,祝你成功!

第3关:图灵对话实现

代码文件

import requests
import json

# Turing API key and URL
turing_api_key = '1202de25edf0495eab665b684d3a95e8'
api_url = 'http://openapi.tuling123.com/openapi/api/v2'

def turing(text_words):
    # Request structure for Turing API
    req = {
        "reqType": 0,
        "perception": {
            "inputText": {
                "text": "附近的酒店"
            },
            "inputImage": {
                "url": "imageUrl"
            },
            "selfInfo": {
                "location": {
                    "city": "北京",
                    "province": "北京",
                    "street": "信息路"
                }
            }
        },
        "userInfo": {
            "apiKey": turing_api_key,
            "userId": "keda"
        }
    }

    # Updating the text to be sent to Turing API
    req['perception']["inputText"]["text"] = text_words

    ########## Begin ########## 
    # Sending the request to the Turing API
    response = requests.request("post", api_url, json=req)

    # Parsing the response
    response_dict = json.loads(response.text)
    result = response_dict["results"][0]["values"]["text"]
    print("Robot said:", result)
    ########## End ########## 

    return result

if __name__ == "__main__":
    robot_result = turing("你是谁?")
    print("调用成功")

题目描述

任务描述

本关任务:编写一个能实现图灵对话的小程序。

相关知识

为了完成本关任务,你需要掌握: 1.如何接入图灵对话; 2.如何调用图灵对话API。

接入图灵对话
调用图灵API
  1. def turing(text_words):
  2. req = {
  3. "reqType":0,
  4. "perception": {
  5. "inputText": {
  6. "text": "附近的酒店"
  7. },
  8. "inputImage": {
  9. "url": "imageUrl"
  10. },
  11. "selfInfo": {
  12. "location": {
  13. "city": "北京",
  14. "province": "北京",
  15. "street": "信息路"
  16. }
  17. }
  18. },
  19. "userInfo": {
  20. "apiKey": turing_api_key,
  21. "userId": "keda"
  22. }
  23. }
  24. req['perception']["inputText"]["text"] = text_words
  25. response = requests.request("post", api_url, json=req)
  26. response_dict = json.loads(response.text)
  27. result = response_dict["results"][0]["values"]["text"]
  28. print("Robot said", result)
  29. return result

参数说明
参数说明reqType输入类型:0-文本(默认)、1-图片、2-音频perception输入信息userInfo用户参数
返回参数
参数inputText文本信息inputImage图片信息inputMedia音频信息selfInfo客户端属性

编程要求

根据提示,在右侧编辑器Begin−End区间补充代码,调用图灵API实现对话。

测试说明

平台会对你编写的代码进行测试:

测试输入:; 预期输出:

  1. Robot said 图灵机器人呀
  2. 调用成功

开始你的任务吧,祝你成功!

第4关:文字转化语音

代码文件

import pyttsx3

def speech_start_way1(text="Hello, I am using pyttsx3 for speech synthesis."):
    # 初始化pyttsx3引擎
    engine = pyttsx3.init()

    # 获取当前语速,并稍微降低它
    rate = engine.getProperty('rate')
    engine.setProperty('rate', rate - 50)

    # 传入要朗读的文本
    engine.say(text)

    # 运行语音引擎
    engine.runAndWait()
    

if __name__ == "__main__":
    speech_start_way1()

题目描述

任务描述

本关任务:编写一个能实现文字语音转换的小程序。

相关知识

为了完成本关任务,你需要掌握: 1.利用

pyttsx3

调用接口实现语音文字转化; 2.如何利用

win32com.client

实现语音文字转化。

利用pyttsx3调用接口实现语音文字转化
  1. import pyttsx3
  2. engine = pyttsx3.init()
  3. rate = engine.getProperty('rate')
  4. engine.setProperty('rate', rate - 50)
  5. engine.say(robot_result)
  6. engine.runAndWait()
利用win32com.client实现语音文字转化
  1. import win32com.client
  2. speaker = win32com.client.Dispatch("SAPI.SpVoice")
  3. speaker.Speak("我是小明")
编程要求

根据提示,在右侧编辑器 Begin−End 补充代码,计算。

测试说明

平台会对你编写的代码进行测试:

测试输入:; 预期输出:

  1. sh: 1: aplay: not found

开始你的任务吧,祝你成功!

第5关:ASR系统集成

代码文件

from pyaudio import PyAudio,paInt16
from aip import AipSpeech
import time, wave
import requests,json
import pyttsx3

"""baidu APPID AK SK """
APP_ID = '19379091'
API_KEY = 'YkPxDouFfc63GaPXZTTvAEWk'
SECRET_KEY = 'TLSftTDguRRUfB80McBiIiugGIYYAq7z'

"""turing """
turing_api_key = '1202de25edf0495eab665b684d3a95e8'
api_url = 'http://openapi.tuling123.com/openapi/api/v2'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

channels = 1
framerate = 16000
num_samples = 2000
sampwidth = 2
def my_record(rate = 16000):
    pa = PyAudio()
    stream = pa.open(format=paInt16, channels=channels, rate = framerate, input = True,
                        frames_per_buffer = num_samples)
    my_buf = []
    t = time.time()
    print("Recording...")
    while time.time() < t + 5:
        string_audio_data = stream.read(num_samples)
        my_buf.append(string_audio_data)
    print("done")
    save_file("./myvoice.wav", my_buf)
    stream.close()

def save_file(filepath, data):
    wf = wave.open(filepath, 'wb')
    wf.setnchannels(channels)
    wf.setsampwidth(sampwidth)
    wf.setframerate(framerate)
    wf.writeframes(b''.join(data))
    wf.close()

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

def turing(text_words):
    req = {
    "reqType":0,
    "perception": {
        "inputText": {
            "text": "附近的酒店"
        },
        "inputImage": {
            "url": "imageUrl"
        },
        "selfInfo": {
            "location": {
                "city": "北京",
                "province": "北京",
                "street": "信息路"
            }
        }
    },
    "userInfo": {
        "apiKey": turing_api_key,
        "userId": "keda"
    }
    }
    req['perception']["inputText"]["text"] = text_words
    response = requests.request("post", api_url, json=req)
    response_dict = json.loads(response.text)
    result = response_dict["results"][0]["values"]["text"]
    print("Robot said", result)
    return result

if __name__ == "__main__":
    # my_record()
    # 识别本地文件
    ########## Begin ##########
    print("finished")
    ########## End ##########

题目描述

任务描述

本关任务:编写一个ASR系统小程序。

相关知识

为了完成本关任务,你需要掌握:

  1. ASR系统流程;
  2. ASR代码实现步骤。
ASR系统流程

一个完备的ASR系统是要实现纯语音对话聊天,不要文字输入交流。ASR的实现流程如图1所示,大致分4个步骤: 1.我们说一句话,通过录音保存为语音文件; 2.调用百度API实现语音转文本; 3.调用图灵机器人API将文本输入得到图灵机器人的回复; 4.将回复的文本转成语音输出。

ASR代码实现步骤
  1. from pyaudio import PyAudio,paInt16
  2. from aip import AipSpeech
  3. import time, wave
  4. import requests,json
  5. import pyttsx3
  6. import win32com.client
  7. """baidu APPID AK SK """
  8. APP_ID = '19379091'
  9. API_KEY = 'YkPxDouFfc63GaPXZTTvAEWk'
  10. SECRET_KEY = 'TLSftTDguRRUfB80McBiIiugGIYYAq7z'
  11. """turing """
  12. turing_api_key = '1202de25edf0495eab665b684d3a95e8'
  13. api_url = 'http://openapi.tuling123.com/openapi/api/v2'
  14. client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
  15. channels = 1
  16. framerate = 16000
  17. num_samples = 2000
  18. sampwidth = 2
  19. def my_record(rate = 16000):
  20. pa = PyAudio()
  21. stream = pa.open(format=paInt16, channels=channels, rate = framerate, input = True,
  22. frames_per_buffer = num_samples)
  23. my_buf = []
  24. t = time.time()
  25. print("Recording...")
  26. while time.time() < t + 5:
  27. string_audio_data = stream.read(num_samples)
  28. my_buf.append(string_audio_data)
  29. print("done")
  30. save_file("./myvoice.wav", my_buf)
  31. stream.close()
  32. def save_file(filepath, data):
  33. wf = wave.open(filepath, 'wb')
  34. wf.setnchannels(channels)
  35. wf.setsampwidth(sampwidth)
  36. wf.setframerate(framerate)
  37. wf.writeframes(b''.join(data))
  38. wf.close()
  39. # 读取文件
  40. def get_file_content(filePath):
  41. with open(filePath, 'rb') as fp:
  42. return fp.read()
  43. def turing(text_words):
  44. req = {
  45. "reqType":0,
  46. "perception": {
  47. "inputText": {
  48. "text": "附近的酒店"
  49. },
  50. "inputImage": {
  51. "url": "imageUrl"
  52. },
  53. "selfInfo": {
  54. "location": {
  55. "city": "北京",
  56. "province": "北京",
  57. "street": "信息路"
  58. }
  59. }
  60. },
  61. "userInfo": {
  62. "apiKey": turing_api_key,
  63. "userId": "keda"
  64. }
  65. }
  66. req['perception']["inputText"]["text"] = text_words
  67. response = requests.request("post", api_url, json=req)
  68. response_dict = json.loads(response.text)
  69. result = response_dict["results"][0]["values"]["text"]
  70. print("Robot said", result)
  71. return result
  72. if __name__ == "__main__":
  73. # 识别语音并存盘
  74. my_record()
  75. # 识别本地文件,转化文字
  76. result = client.asr(get_file_content('./myvoice.wav'), 'wav', 16000, {
  77. 'dev_pid': 1837,
  78. })
  79. result_text = result["result"][0]
  80. print(result_text)
  81. # 图灵对话
  82. robot_result = turing(result_text)
  83. # 文字转语音
  84. engine = pyttsx3.init()
  85. rate = engine.getProperty('rate')
  86. engine.setProperty('rate', rate - 50)
  87. engine.say(robot_result)
  88. engine.runAndWait()
编程要求

根据提示,在右侧编辑器 Begin−End 区间补充代码,编写一个 ASR 系统小程序。

测试说明

平台会对你编写的代码进行测试:

测试输入:; 预期输出:

  1. finished

开始你的任务吧,祝你成功!


本文转载自: https://blog.csdn.net/gxmzuai/article/details/135302499
版权归原作者 gxmzuai 所有, 如有侵权,请联系我们删除。

“广西民族大学高级人工智能课程—头歌实践教学实践平台—构建自动语音识别”的评论:

还没有评论