如何优雅的用Python玩转语音聊天机器人

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何优雅的用Python玩转语音聊天机器人相关的知识,希望对你有一定的参考价值。

参考技术A 所需硬件:
树莓派B+
人体红外线感应模块
内置麦克风摄像头(实测树莓派免驱淘宝链接)
申请API:
百度语音api
图灵api
语音聊天机器人实现原理:当有人来到跟前时--》触发聊天功能,开始以每2s检测录制语音--》通过百度语音api合成文字--》传递给图灵api返回回答信息--》通过百度语音合成播放
【人体感应识别部分Python代码renti.py】
123456789101112131415161718192021222324252627282930313233

#/usr/bin/python#coding:utf-8import RPi.GPIO as GPIOimport timeimport osimport signalimport atexitGPIO.setmode(GPIO.BCM) GPIO_PIR = 14 GPIO.setup(GPIO_PIR,GPIO.IN) # Echojing = 0dong = 0 sum = 0sum1 = 0oldren = 0sleep = 0def ganying(): i = 0 ok = 0 error = 0 while i < 10: if GPIO.input(GPIO_PIR) == 1 : ok = ok + 1 if GPIO.input(GPIO_PIR) == 0 : error = error + 1 time.sleep(0.01) i = i + 1 ren = ok/(error+1) return ren

1

GPIO_PIR = 14

为 红外线检测模块与树莓派的针脚,脚本函数返回0表示无人,>0 为有人
【Python语音识别聊天部分robot.py】
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112

#/usr/bin/python# -*- coding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding( "utf-8" )import urllibimport urllib2import jsonimport uuidimport base64import osimport timefrom renti import * #获取百度tokenappid=7647466apikey="百度API"secretkey="百度API" baidu_url="h.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apikey + "&client_secret=" + secretkey; y_post=urllib2.urlopen(baidu_url)y_read=y_post.read()y_token=json.loads(y_read)['access_token']#print y_read#print y_token #------------------function------------- def luyin(): os.system('arecord -D plughw:1,0 -c 1 -d 2 1.wav -r 8000 -f S16_LE 2>/dev/null') def fanyi():
#---------------语音识别部分 mac_address="haogeoyes" with open("1.wav",'rb') as f: s_file = f.read() speech_base64=base64.b64encode(s_file).decode('utf-8') speech_length=len(s_file) data_dict = 'format':'wav', 'rate':8000, 'channel':1, 'cuid':mac_address, 'token':y_token, 'lan':'zh', 'speech':speech_base64, 'len':speech_length json_data = json.dumps(data_dict).encode('utf-8') json_length = len(json_data) asr_server = 'm/server_api' request = urllib2.Request(url=asr_server) request.add_header("Content-Type", "application/json") request.add_header("Content-Length", json_length) fs = urllib2.urlopen(url=request, data=json_data) result_str = fs.read().decode('utf-8') json_resp = json.loads(result_str) if json_resp.has_key('result'): out_txt=json_resp['result'][0] else: out_txt="Null" return out_txt def tuling(b): f=urllib.urlopen("23.com/openapi/api?key="此处为图灵API"&info=%s" % b) f=json.loads(f.read())['text'] return f def hecheng(text,y_token): #text="你好我是机器人牛牛很高兴能够认识你" geturl="u.com/text2audio?tex="+text+"&lan=zh&per=1&pit=9&spd=6&cuid=CCyo6UGf16ggKZGwGpQYL9Gx&ctp=1&tok="+y_token return os.system('omxplayer "%s" > /dev/null 2>&1 '%(geturl)) #return os.system('omxplayer "%s" > /dev/null 2>&1 '%(geturl)) def nowtime(): return time.strftime('%Y-%m-%d %H:%M:%S ') #---------------main-----------------num=0 #num用来判断是第一次说话,还是在对话过程中first=1 #判断是不是第一说话 当1000次没有人动认为是第一次while True: if ganying()!=0: run=open('run.log','a') if first==0: hecheng("你好,我是牛牛机器人,你可以和我聊天,不过说话的时候你必须靠近话筒近一点,",y_token) hecheng("说点什么吧,2秒钟内说完哦.",y_token) first=1 #为1一段时间就不执行 num=0 #从新计数 #print ganying() run.write(nowtime()+"说点神马吧..........."+'\n') print nowtime()+"说点神马吧.........." luyin() #开始录音 out=fanyi().encode("utf-8") #翻译文字 run.write(nowtime()+"我说:"+out+'\n') print nowtime()+"我说:"+out if out == "Null": text="没有听清楚你说什么" os.system('omxplayer "shenme.wav" > /dev/null 2>&1 ') else: text=tuling(out) hecheng(text,y_token) print nowtime()+"牛牛:"+text run.write(nowtime()+"牛牛:"+text+'\n') run.close() else: #print ganying() #调试查看是否为0有人没人 #print num num=num+1 #num长时间增大说明没有人在旁边 if num > 1000: first=0 #0表示第一次说话

万事俱备 运行nohup python robot.py 哈哈就可以脱离屏幕开始愉快的语音聊天啦
下面看看聊天的日志记录吧
后续更新。。。。。。Python如何用语音优雅的控制小车

我用Python轻松玩转ChatGPT的聊天机器人和AI画画

ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。用户只需注册一个OpenAI账号和申请一个api_key就可供开发人员使用,并且可以与各种编程语言(如 JavaScript、Python 等)集成。

DALL-E 是 OpenAI 开发的一种生成式预训练转换器 (GPT) 模型,可以根据文本描述生成图像。它在文本和图像数据集上进行训练,使其能够理解两者之间的关系并生成与给定文本描述相匹配的图像。该 API 可供开发人员使用,并且可以与各种编程语言(如 JavaScript、Python 等)集成。

这里要说明一些OpenAI的账号注册目前看来在国内无法注册,但是可以想一些变通的方法或者让国外的亲朋好友帮你注册和申请api_key,只要拿到api_key就可以在国内调用ChatGPT机器人模型和AI画画模型了:

聊天机器人API接口参数说明

  • model:模型名词
  • prompt:您对机器人提出的问题
  • temperature:自定义模型的行为的参数,该参数控制生成文本的随机性级别。较高的temperature会导致更多变化且可能不太连贯的响应,而较低的temperature会产生更可预测且可能更连贯的响应
  • max_tokens:应答语句的长度

下面我们介绍一下通过python来开发一个基于windows命令行窗口的简单实用的ChatGPT的聊天小程序。首先我们需要在命令行中安装openai包:

pip install openai

接下来可以开始编写基于windows命令行窗口的聊天程序chat.py:

import openai
import os
os.system('')

#注册的api_key
openai.api_key = "sk-xxxxxxxxxx"
def get_answer(question):
    response = openai.Completion.create(
    model="text-davinci-003",
    prompt=question,
    temperature=0.5, 
    max_tokens=1024 )    
    return response.choices[0].text

def ask_question():
    flag=True
    greeting="\\033[1;31m我是ChatGPT聊天机器人,我可以回答您的任何问题!如果您想退出,请输入:quit\\033[0m"
    print()
    print(greeting)
    print()
    while(flag==True):
        question = input()
        if(question!='quit'):
            answer=get_answer(question)
            answer = answer[2:]
            print()
            print(f"\\033[1;31m机器人:answer\\033[0m")
            print()

        else:
            flag=False
            print()
            print("\\033[1;31m机器人:后会有期,bye!\\033[0m")   
           
ask_question()

接下来我们将chat.py文件拷贝到 d:\\ ,然后我们在windows命令行中执行该聊天程序:

python d:\\chat.py

下面是我和机器人之间的有趣对话:

 

 

 

 DALL-E 的AI画画 API接口参数说明

  • model:用于图像生成的 DALL-E 模型。
  • prompt:你想要用来生成图像的文本提示
  • response_format:响应的格式 - 在本例中为“url”。
  • n: 生成的图片数量,默认为1
  • size :生成的图片尺寸 256×256,512×512,1024×1024

import openai
from PIL import Image
from io import BytesIO
import requests as req

#注册的api_key
openai.api_key="sk-jWpXXXXXXXXXX" 

#用来生成图像的文本提示
prompt="一只坐在椅子上仰望星空的猫" 
#生成图像
response=openai.Image.create(prompt=prompt,
              n=3,
              model="image-alpha-001",
              size="512x512",
              response_format="url") 

#第一张图片
image_rul=response["data"][0]["url"]
res=req.get(image_rul)
Image.open(BytesIO(res.content))

 

#第二张图片
image_rul=response["data"][1]["url"]
res=req.get(image_rul)
Image.open(BytesIO(res.content))

 

#第三张图片
image_rul=response["data"][2]["url"]
res=req.get(image_rul)
Image.open(BytesIO(res.content))

 小结

ChatGPT聊天机器人相对来说效果比较好,机器人知识面比较广,几乎没有回答不出来的问题,甚至可以替你编写代码,但是缺点是机器人只能针对当前问题做出回答,无法参考上下文的内容来准确回答问题,比如如果你多次问机器人的姓名,机器人会每次都给出不同的姓名,而且有时候机器人会给出明显错误的回答。个人感觉ChatGPT最大的优点是知识面比较广就像一本百科全书它什么都知道,但是结合上下文的能量比较差,还远远无法做的像真人那样和人类互动。

DALL-E是openai的一个AI绘画模型,该模型稍显稚嫩,和目前业界比较成熟的AI绘画模型相比还有所差距。DALL-E的绘画效果还比较粗糙,画面缺少美感,物体的形状轮廓都不是很理想,所以该模型还有很大的提升空间。

以上是关于如何优雅的用Python玩转语音聊天机器人的主要内容,如果未能解决你的问题,请参考以下文章

python自动化高效办公第二期,带你项目实战{数据可视化发送邮件(定时任务监控)python聊天机器人(基于微信钉钉)}

python自动化高效办公第二期,带你项目实战{数据可视化发送邮件(定时任务监控)python聊天机器人(基于微信钉钉)}

如何使用 Python 中的 API 使用 Discord 聊天机器人发送新闻?

Python如何使用图灵的API Key搭建聊天机器人?

题目:用python3实现微信聊天机器人

python 实现简单语音聊天机器人