展品讲解语音对话系统 实验报告

2023-11-02 11:59

本文主要是介绍展品讲解语音对话系统 实验报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

展品讲解语音对话系统 实验报告

  • 1. 任务定义
  • 2. 实验环境
  • 3. 系统功能
  • 4. 方法说明
    • 4.1 本地录音
      • 4.1.1 初始化
      • 4.1.2 录音
      • 4.1.3 保存音频
    • 4.2 百度语音识别
      • 4.2.1 初始化
      • 4.2.2 语音识别
    • 4.3 图灵机器人回答
      • 4.3.1 在图灵机器人平台新增语料库
      • 4.3.2 初始化
      • 4.3.3 获得回复
    • 4.4 处理回答内容并语音回答
  • 5. 演示视频及源码

1. 任务定义

  • 搭建以展品讲解为主要内容的语音对话系统
    1. 展品导览:通过对话,确认用户感兴趣的展品(假设展品为展馆内所展示的物品或图、画),以及导引用户参观其余展品。
    2. 展品讲解:通过对话,介绍展品。能够回答用户关于展品的n>1个提问。
    3. 闲聊:打招呼、再见、自我介绍等。
  • 实现方法不限

2. 实验环境

  • Windows 10
  • python 3.7.8
  • 图灵机器人
  • 百度语音识别

3. 系统功能

  • 机器人自我介绍
  • 打招呼和再见
  • 画展概况介绍
  • 指定展品编号进行介绍
  • 指定作者介绍其展品
  • 介绍展品作者信息
  • 介绍剩余展品内容
  • 部分闲聊

4. 方法说明

4.1 本地录音

4.1.1 初始化

framerate = 16000       # 采样率
num_samples = 2000      # 采样点
channels  = 1           # 声道
sampwidth = 2           # 采样宽度2bytes
FILEPATH  = 'speech.wav'

4.1.2 录音

  • 调用PyAudio库进行录音,recordTime为录音时长,默认为4秒
def my_record(recordTime=4):pa = PyAudio()# 打开一个新的音频streamstream = pa.open(format=paInt16, channels=channels,rate=framerate, input=True, frames_per_buffer=num_samples)# 存放录音数据my_buf = [] t = time.time()print('正在录音...')while time.time() < t + recordTime:  # 设置录音时间(秒)# 循环read,每次read 2000framesstring_audio_data = stream.read(num_samples)my_buf.append(string_audio_data)print('录音结束.')save_wave_file(FILEPATH, my_buf)stream.close()

4.1.3 保存音频

filepath:保存音频路径
data:音频内容

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

4.2 百度语音识别

4.2.1 初始化

# 百度语音识别的APIKey和SecretKey
base_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s"
APIKey = "***************"
SecretKey = "*****************"HOST = base_url % (APIKey, SecretKey)

4.2.2 语音识别

  • 获取音频内容
  • file:音频文件路径
def get_audio(file):with open(file, 'rb') as f:data = f.read()return data
  • 获取token信息
def getToken(host):res = requests.post(host)return res.json()['access_token']
  • 将音频内容上传到百度语音识别系统并获取结果
  • speech_data:音频内容
  • token:token信息
  • dev_pid:百度语音识别提供的几种语言选择,1537为普通话
# 传入语音二进制数据,token
# dev_pid为百度语音识别提供的几种语言选择
def speech2text(speech_data, token, dev_pid=1537):FORMAT = 'wav'RATE = '16000'CHANNEL = 1CUID = '********'SPEECH = base64.b64encode(speech_data).decode('utf-8')data = {'format': FORMAT,'rate': RATE,'channel': CHANNEL,'cuid': CUID,'len': len(speech_data),'speech': SPEECH,'token': token,'dev_pid':dev_pid}url = 'https://vop.baidu.com/server_api'headers = {'Content-Type': 'application/json'}# r=requests.post(url,data=json.dumps(data),headers=headers)print('正在识别...')r = requests.post(url, json=data, headers=headers)Result = r.json()if 'result' in Result:return Result['result'][0]else:return Result

4.3 图灵机器人回答

4.3.1 在图灵机器人平台新增语料库

在这里插入图片描述

4.3.2 初始化

# 图灵机器人的API_KEY、API_URL
turing_api_key = "********************"
api_url = "http://openapi.tuling123.com/openapi/api/v2"
headers = {'Content-Type': 'application/json;charset=UTF-8'}

4.3.3 获得回复

  • 将问题上传到图灵机器人系统获得回复
  • text_words:问题文本内容
  • result:图灵机器人的回答
# 图灵机器人回复
def Turing(text_words=""):req = {"reqType": 0,"perception": {"inputText": {"text": text_words},"selfInfo": {"location": {"city": "北京","province": "北京","street": "北京邮电大学西土城校区"}}},"userInfo": {"apiKey": '**************',"userId": "GZR"}}req["perception"]["inputText"]["text"] = text_words# 获得回复response = requests.request("post", api_url, json=req, headers=headers)response_dict = json.loads(response.text)# 提取回复内容result = response_dict["results"][0]["values"]["text"]print("NAO Robot said: " + result)return result

4.4 处理回答内容并语音回答

  • 处理图灵机器人的回答内容并进行语音回复
  • response:图灵机器人的回答
  • engine:语音引擎
  • allPaints:剩余尚未介绍展品
def answer(response, engine, allPaints):# 如果不需要全部介绍if response != '全部':temp = response[1]engine.say(response)engine.runAndWait()# 判断是否是介绍一幅展品,如果是则将其从剩余未介绍展品中剔除并介绍,否则正常回复if temp in allPaints:allPaints.remove(temp)temp = ""for i in allPaints:temp += itemp += '、'print("这里还剩下" + temp + "号画,请问需要继续介绍哪一幅画?")engine.say("这里还剩下" + temp + "号画,请问需要继续介绍哪一幅画?")engine.runAndWait()# 介绍全部剩余展品else:engine.say("那我就开始啦!")engine.runAndWait()for i in range(len(allPaints)):result = "介绍一下第{}幅画".format(allPaints[i])response = Turing(result)engine.say(response)engine.runAndWait()# 剩余展品清空allPaints = []

5. 演示视频及源码

  • 见附件

这篇关于展品讲解语音对话系统 实验报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330445

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节