人工智障聊天机器人

目录

 

项目构想

项目感想

项目API调用

项目语言以及库

项目目录

文件构成

代码清单

main:2.Speech_Recognition.py

1. Sound_Recording.py 

3.tuling.py 

4.Specch_Sythesis.py

问题总结

1.调用playsound库进行播放音频时会出现使用后资源不释放产生以下错误:

PermissionError: [Errno 13] Permission denied: “1.MP3”

解决办法参考以下:https://blog.csdn.net/liang4000/article/details/96766845

2.仔细阅读各个API文档

3.如何退出死循环:添加if判断语音是否含有“退出”

项目视频展示


  • 项目构想

录制一段音频并识别成字符,将字符传入图灵机器人并获得回复,将回复合成音频文件并播放。

  • 项目感想

讯飞语音识别率还行,但是项目容错率低,并且项目基本调用API,没进一步研究语音识别技术的过程与实现,不过还是颇有收获,学习到了完成项目期间出现各种各样的问题的解决办法,所以只要你敢想,敢动手去做就一定会有收获。

  • 项目API调用

讯飞语音识别,百度语音合成,图灵机器人。

  • 项目语言以及库

Python+playsound+pyaudio+wave+os+百度API+讯飞API+图灵机器人API。

  • 项目目录

  • 文件构成

中文目录:语音识别为主函数----->>函数调用步骤(1.语音录制  2.语音识别  3.图灵机器人  4.语音合成)

英文目录:Speech_Recognition.py----->>(1. Sound_Recording.py  2.Speech_Recognition.py  3.tuling.py  4.Specch_Sythesis.py)

  • 代码清单

main:2.Speech_Recognition.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/27 16:10
# @Author  : Cxk
# @File    : Speech_Recognition.py# -*- coding:utf-8 -*-
#
#   author: iflytek
#
#  本demo测试时运行的环境为:Windows + Python3.7
#  本demo测试成功运行时所安装的第三方库及其版本如下,您可自行逐一或者复制到一个新的txt文件利用pip一次性安装:
#   cffi==1.12.3
#   gevent==1.4.0
#   greenlet==0.4.15
#   pycparser==2.19
#   six==1.12.0
#   websocket==0.2.1
#   websocket-client==0.56.0
#
#  语音听写流式 WebAPI 接口调用示例 接口文档(必看):https://doc.xfyun.cn/rest_api/语音听写(流式版).html
#  webapi 听写服务参考帖子(必看):http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=38947&extra=
#  语音听写流式WebAPI 服务,热词使用方式:登陆开放平台https://www.xfyun.cn/后,找到控制台--我的应用---语音听写(流式)---服务管理--个性化热词,
#  设置热词
#  注意:热词只能在识别的时候会增加热词的识别权重,需要注意的是增加相应词条的识别率,但并不是绝对的,具体效果以您测试为准。
#  语音听写流式WebAPI 服务,方言试用方法:登陆开放平台https://www.xfyun.cn/后,找到控制台--我的应用---语音听写(流式)---服务管理--识别语种列表
#  可添加语种或方言,添加后会显示该方言的参数值
#  错误码链接:https://www.xfyun.cn/document/error-code (code返回错误码时必看)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
import websocket
import datetime
import hashlib
import base64
import hmac
import json
from urllib.parse import urlencode
import time
import ssl
from wsgiref.handlers import format_date_time
from datetime import datetime
from time import mktime
import _thread as threadfrom Speech_Synthesis import *
from tuling import *
from Sound_Recording import *from playsound import playsound
import osSTATUS_FIRST_FRAME = 0  # 第一帧的标识
STATUS_CONTINUE_FRAME = 1  # 中间帧标识
STATUS_LAST_FRAME = 2  # 最后一帧的标识class Ws_Param(object):# 初始化def __init__(self, APPID, APIKey, APISecret, AudioFile):self.APPID = APPIDself.APIKey = APIKeyself.APISecret = APISecretself.AudioFile = AudioFile# 公共参数(common)self.CommonArgs = {"app_id": self.APPID}# 业务参数(business),更多个性化参数可在官网查看self.BusinessArgs = {"domain": "iat", "language": "zh_cn", "accent": "mandarin", "vinfo":1,"vad_eos":10000}# 生成urldef create_url(self):url = 'wss://ws-api.xfyun.cn/v2/iat'# 生成RFC1123格式的时间戳now = datetime.now()date = format_date_time(mktime(now.timetuple()))# 拼接字符串signature_origin = "host: " + "ws-api.xfyun.cn" + "\n"signature_origin += "date: " + date + "\n"signature_origin += "GET " + "/v2/iat " + "HTTP/1.1"# 进行hmac-sha256进行加密signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),digestmod=hashlib.sha256).digest()signature_sha = base64.b64encode(signature_sha).decode(encoding='utf-8')authorization_origin = "api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"" % (self.APIKey, "hmac-sha256", "host date request-line", signature_sha)authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')# 将请求的鉴权参数组合为字典v = {"authorization": authorization,"date": date,"host": "ws-api.xfyun.cn"}# 拼接鉴权参数,生成urlurl = url + '?' + urlencode(v)# print("date: ",date)# print("v: ",v)# 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致# print('websocket url :', url)return url# 收到websocket消息的处理
def on_message(ws, message):global resulttry:code = json.loads(message)["code"]sid = json.loads(message)["sid"]if code != 0:errMsg = json.loads(message)["message"]print("sid:%s call error:%s code is:%s" % (sid, errMsg, code))else:data = json.loads(message)["data"]["result"]["ws"]for i in data:for w in i["cw"]:result += w["w"]
#             print("sid:%s call success!,data is:%s" % (sid, json.dumps(data, ensure_ascii=False)))except Exception as e:print("receive msg,but parse exception:", e)return '识别出错!'# 收到websocket错误的处理
def on_error(ws, error):print("### error:", error)# 收到websocket关闭的处理
def on_close(ws):print("### closed ###")# 收到websocket连接建立的处理
def on_open(ws):def run(*args):frameSize = 8000  # 每一帧的音频大小intervel = 0.04  # 发送音频间隔(单位:s)status = STATUS_FIRST_FRAME  # 音频的状态信息,标识音频是第一帧,还是中间帧、最后一帧with open(wsParam.AudioFile, "rb") as fp:while True:buf = fp.read(frameSize)# 文件结束if not buf:status = STATUS_LAST_FRAME# 第一帧处理# 发送第一帧音频,带business 参数# appid 必须带上,只需第一帧发送if status == STATUS_FIRST_FRAME:d = {"common": wsParam.CommonArgs,"business": wsParam.BusinessArgs,"data": {"status": 0, "format": "audio/L16;rate=16000","audio": str(base64.b64encode(buf), 'utf-8'),"encoding": "raw"}}d = json.dumps(d)ws.send(d)status = STATUS_CONTINUE_FRAME# 中间帧处理elif status == STATUS_CONTINUE_FRAME:d = {"data": {"status": 1, "format": "audio/L16;rate=16000","audio": str(base64.b64encode(buf), 'utf-8'),"encoding": "raw"}}ws.send(json.dumps(d))# 最后一帧处理elif status == STATUS_LAST_FRAME:d = {"data": {"status": 2, "format": "audio/L16;rate=16000","audio": str(base64.b64encode(buf), 'utf-8'),"encoding": "raw"}}ws.send(json.dumps(d))time.sleep(1)break# 模拟音频采样间隔time.sleep(intervel)ws.close()thread.start_new_thread(run, ())def play(file):playsound("%s"%file)if __name__ == "__main__":while(True):"""录音参数 1 音频文件参数 2 录音时长 单位(秒)"""audio_record("yinping.wav", 5)"""讯飞音频识别APPID=ID, APIKey=KEY,APISecret=Secret,AudioFile=音频文件全局变量result:拼接返回结果"""global resultresult=''time1 = datetime.now()wsParam = Ws_Param(APPID='申请的讯飞ID', APIKey='申请的讯飞KEY',APISecret='申请的讯飞Secret',AudioFile=r'yinping.wav')websocket.enableTrace(False)wsUrl = wsParam.create_url()ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close)ws.on_open = on_openws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})time2 = datetime.now()print("录音音频识别结果:"+result)if("退出"in result):"""退出死循环说关键词:退出"""print("程序已退出!!")play("2.mp3")breakelse:"""图灵机器人回复tuling(参数)参数:讯飞音频识别回传字符串百度语音合成getBaiduVoice(参数)参数:图灵机器人回传字符串结果:合成音频文件1.MP3"""strss=tuling(result)getBaiduVoice(strss)"""播放图灵机器人合成语音1.MP3"""play("1.mp3")print("-------------------")continue

1. Sound_Recording.py 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/27 18:18
# @Author  : Cxk
# @File    : Sound_Recording.pyimport pyaudio
import os
import wave
# 用Pyaudio库录制音频
#   out_file:输出音频文件名
#   rec_time:音频录制时间(秒)
def audio_record(out_file, rec_time):CHUNK = 1024FORMAT = pyaudio.paInt16 #16bit编码格式CHANNELS = 1 #单声道RATE = 16000 #16000采样频率p = pyaudio.PyAudio()# 创建音频流 stream = p.open(format=FORMAT, # 音频流wav格式channels=CHANNELS, # 单声道rate=RATE, # 采样率16000input=True,frames_per_buffer=CHUNK)print("开始录音...")frames = [] # 录制的音频流# 录制音频数据for i in range(0, int(RATE / CHUNK * rec_time)):data = stream.read(CHUNK)frames.append(data)# 录制完成stream.stop_stream()stream.close()p.terminate()print("录音完毕...")# 保存音频文件wf = wave.open(out_file, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()#     audio_record("yinping.wav", 5)

3.tuling.py 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/27 17:50
# @Author  : Cxk
# @File    : tuling.pyimport requests
import json
def tuling(info):appkey = "申请的图灵机器人KEY"url = "http://www.tuling123.com/openapi/api?key=%s&info=%s"%(appkey,info)req = requests.get(url)content = req.textdata = json.loads(content)answer = data['text']print("图灵机器人回复:"+answer)return answer

4.Specch_Sythesis.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/27 19:38
# @Author  : Cxk
# @File    : Speech_Synthesis.pyfrom aip import AipSpeech
# import randomdef getBaiduVoice(text):""" 你的 APPID AK SK """APP_ID = '申请的百度ID'API_KEY = '申请的百度KEY'SECRET_KEY = '申请的讯飞Secret'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)result = client.synthesis(text = text, options={'vol':5,'per':4})if not isinstance(result,dict):
#         i=random.randint(1,10) with open('1.mp3','wb') as f:f.write(result)
#         return ielse:print(result)
  • 问题总结

1.调用playsound库进行播放音频时会出现使用后资源不释放产生以下错误:

PermissionError: [Errno 13] Permission denied: “1.MP3”

解决办法参考以下:https://blog.csdn.net/liang4000/article/details/96766845

2.仔细阅读各个API文档

3.如何退出死循环:添加if判断语音是否含有“退出”

if("退出"in result):"""退出死循环说关键词:退出"""print("程序已退出!!")play("2.mp3")break
  • 项目视频展示

Python人工智障聊天机器人

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16004.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据AI人工智能】意识机器:ChatGPT 能否拥有自我意识?

导语 2022年11月30日,一个现象级应用程序诞生于互联网,这就是OpenAI开发的ChatGPT。从问答到写程序,从提取摘要到论文写作,ChatGPT展现出了多样化的通用智能。于是,微软、谷歌、百度、阿里、讯飞,互联网大佬们纷纷摩拳擦掌准备入场……但是,请先冷静一下…… 现在 all i…

不写代码、靠“玩” ChatGPT 年入百万,提示工程师正变成硅谷新宠

以下文章转发自来源于硅星人 ,作者章姝敏 随着 ChatGPT 等 AI 工具的风靡,越来越多人将其作为日常生活和工作的助手。为了能更好地与它对话,一个新兴职业——提示工程师应运而生。用自然语言对话,听起来再日常不过了,为…

2023年最新人工智能入门指南(学习清单)

ChatGPT最近很火,为了帮助想入门人工智能的小伙伴们准备了一份超详细的学习清单 前言 为帮助大家快速入门机器学习、深度学习,根据我自己多年的学习和工作经验,总结了这份保姆级的学习清单,让大家在学习时不走弯路。 这份清单主…

ARM简介及其发展历史

前言 ARM名声很大,最近在学习STM32,也借机梳理一下关于ARM的各种概念和信息。 本文主要内容:ARM一词的含义,ARM的发展历史,ARM cortex系列处理器简介与ARM在不同市场的应用情况。 一. ARM一词的4种含义 1.1 ARM公司 …

【探索 Kubernetes|容器基础进阶篇 系列 4】理解现代云原生时代的引擎

文章目录 系列文章目录👹 关于作者一、前言|回顾二、静态和动态视图三、爆火的容器编排工具 Kubernetes 的诞生四、Kubernetes 要解决的问题是什么?五、理解 Kubernetes 全局架构图Master(控制节点)Node(计算节点&…

究诸经典,探寻大模型演变之踪迹

编者按:在仅仅五年的时间里,大语言模型、transformers几乎完全改变了自然语言处理领域。 为了便于快速、扎实、深入地学习大语言模型,本文整理一个简单的经典学术资料列表,供正在入门中的机器学习研究人员和开发者参考。 以下是译…

从ChatGPT看爆火技术概念及医疗领域科技与应用场景

作者:京东健康 陈刚 一、前言 最近OpenAI在官网上宣告了多模态大模型 GPT-4 的诞生,它可能是迄今为止最好的多模态模型。 主要更新内容如下: 1. 逻辑分析能力更加全面、「考试」能力大幅提升 2. 拥有了 识图 能力,可以进行更多元…

ChatGPT生成的程序漏洞百出,程序员的饭碗算是保住了

自去年11月Chat GPT概念推出以来,瞬间风靡全球、热度不减,仅用不到两个月的时间就使月活跃用户数达到1亿。凭借1750亿左右的参数量和关注度创造了互联网应用程序的神话。 对于用户来讲,ChatGPT的出现引领传统互联网彻底迈入AI新时代。由于其在…

【ChatGPT追女孩子攻略】见招拆招

使用ChatGPT写情话可以带给我们很多乐趣和惊喜,这种技术可以为你的爱人创作一篇充满真情实感的情书。在使用这项技术时,首先要明确表达的主题和情感。 接着,向ChatGPT输入一些关于自己和恋人之间的故事或细节,让它能够更好地理解…

2023年的深度学习入门指南(2) - 给openai API写前端

2023年的深度学习入门指南(2) - 给openai API写前端 上一篇我们说了,目前的大规模预训练模型技术还避免不了回答问题时出现低级错误。 但是其实,人类犯的逻辑错误也是层出不穷。 比如,有人就认为要想学好chatgpt,就要先学好Pyth…

chatGPT解读(chatGPT前世今生之今生)

12期:chatGPT解读(chatGPT前世今生之今生) 验 关注该公众号 证 chatGPT解读 我们带着几个问题,一起去看看chatGPT吧。 上周讲了GPT-1,GPT-2, GPT-3的整体演化过程。那么,既然chatGPT是在…

2023年的深度学习入门指南(13) - 写后端

2023年的深度学习入门指南(13) - 写后端 我们前面学习了用python在本机上写前端,也学习了使用HTML在本机写前端。同理,我们可以写Windows应用,mac应用,iOS应用,Android应用等等以适合各种终端。其实,最通用…

小白的GPT入门指南 - 插件篇

前言 GPT爆火小半年了, 早在AI赛道布局的各大厂商也是纷纷宣布产品上线 度娘的 “文心一言” 腾讯的 “HunYuan” 阿里的 “通义” 华为 的“盘古” … 码哥也简单的体验了下已发布的几款AI模型, 实话实讲, 目前还是GPT的更智能一点, 不过GPT需要折腾的问题对小白有点不友好.…

《ChatGPT实用指南》在线版重磅发布,专为小白打造

文 / 高扬(微信公众号:量子论) 为方便大家阅读,我们对《ChatGPT实用指南》进行了重大改版,抛弃PDF版本,升级为在线阅读版,增加了大量实用的操作和详细的讲解,保证小白可以轻松上手&a…

面向Java开发者的ChatGPT提示词工程(5)

GPT 的局限性 当我们探讨开发大型语言模型应用程序时,必须认识到 GPT 存在一些局限性。这些限制对于我们保持清醒的头脑至关重要。 在 GPT 的训练过程中,虽然注入了大量知识,但它并不能完美地记住所有的信息,同时对这些知识的边…

chatgpt赋能python:Python就业薪资

Python就业薪资 Python是今天全球最受欢迎的编程语言之一,因为其容易的语法,高级工具,丰富的库,简洁的代码语言和易于编写的框架使它成为开发人员的首选语言。在今天的全球招聘市场中,Python开发人员很受欢迎&#xf…

chatgpt赋能python:Python就业需要什么学历?

Python就业需要什么学历? Python编程语言自问世以来,越来越受到IT行业的青睐。Python的广泛应用范围,良好的兼容性和易学易用的特点,让很多人选择从事Python相关工作。 那么,Python就业需要什么学历呢? 学…

人工智能ai在第四次工业革命中起到的作用

人工智能(AI)被认为是能够引领第四次工业革命的重要技术之一。AI 在许多领域具有广泛的应用潜力,包括自动驾驶、机器人技术、智能制造、医疗保健和能源等。通过AI的技术创新,我们可以实现更高效、更智能的生产方式,提高…

“无所不能”的 ChatGPT,正准备把各行各业打得满地找牙

如果有一天,你遇到的任何问题,都能通过搜索找到答案,那会是什么体验? 这个疯狂的现实正在离我们越来越近。 继AI绘画,AI编程搅得满城风雨后,美国的人工智能团队OpenAI最近又整了个大活—— 他们推出了一…

【ChatGPT】:告别单调对话,我带你体验

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄,vue成神之路★ ★ 解决算法,一个专栏就够了★ ★ 架…