chatgpt的语音机器人

准备工作

一.OpenAi的Api

1.登录openai

openai官网

2.点击Develovpers的overview

在这里插入图片描述### 3.点击右上角的Login in
在这里插入图片描述### 4.点击右上角的view apikey
在这里插入图片描述### 5.点击Creat new secret key
在这里插入图片描述这样就会得到一个chatgpt的api,请妥善保存这个api,当你关闭这个网页的时候,api就不可再见了。

二. 准备百度云的api

1.登录百度云

在这里插入图片描述

2.点击右上角登录或者注册账户即可

3.进入控制台,找到下图所示的语音技术

在这里插入图片描述这个一般会有免费的资源赠送,点击领取后再创建资源。注意找到下图所示的AppID,API Key和Screat Key。妥善保存这三个,后面代码中会用到。
在这里插入图片描述

三.科学上网

这个不细说了,没有的话可以去网上搜一下教程,可能会用到。

代码部分

1.导入必须的库

下载导入下述的库

import speech_recognition as sr
from aip import AipSpeech
import openai
import pygame
import asyncio
import edge_tts
可以直接用pip下载,如果国内下载不成功的话可以试着用下面的命令下载。

pip install xxx(包名) -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2.更换上面得到的api信息到代码中

APP_ID = 'XXX'
API_KEY = 'XXX'
SECRET_KEY = 'XXX'
 openai.api_key = "XXX"

3.完整代码如下(可能需要用到全局代理)

import speech_recognition as sr
from aip import AipSpeech
import openai
import pygame
import asyncio
import edge_tts

APP_ID = 'XXX'
API_KEY = 'XXX'
SECRET_KEY = 'XXX'

allresult=""

def rec(rate=16000):
    """从系统麦克风拾取音频数据并保存为 wav 格式文件"""
    r = sr.Recognizer()
    with sr.Microphone(sample_rate=rate) as source:
        print("连接到麦克风...")
        print("请说话进行录音...")
        audio = r.listen(source)   
    print("正在上传录音文件到百度语音服务...")
    with open("recording.wav", "wb") as f:
        f.write(audio.get_wav_data())
    return 1


def listen():
    """上传录音文件到百度语音服务,返回语音识别结果"""
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    with open('recording.wav', 'rb') as f:
        audio_data = f.read()
    results = client.asr(audio_data, 'wav', 16000, {'dev_pid': 1537})
    if 'result' in results:
        print("你说的是:" + results['result'][0])
        return results['result'][0]
    else:                                    
        print("出现错误,错误代码:" , results['err_no'])


def chat(prompt):
    """与 OpenAI 文本 AI 进行聊天"""
    openai.api_key = "XXX"
    prompt = prompt
    try:
        response  = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            max_tokens=1024,
            top_p=1,
            frequency_penalty=0,
            presence_penalty=0,
            temperature=0.5,
            messages=[{"role": "user", "content": prompt}],
            timeout={"with":1000},
        )
        result = response.choices[0].message.content
        print("AI 回复:" + result)
        return result   
    except Exception as e:
        print("API调用失败:", e)
        return None


async def speak(text=""):
    voice = "zh-TW-HsiaoChenNeural"
    output_file = "audio.mp3"
    
    communicate = edge_tts.Communicate(text, voice)
    await communicate.save(output_file)
    print(f"\n已将文本“{text}”转换为语音并保存为文件“{output_file}”。")

def play():
    """播放语音"""
    pygame.mixer.init()
    pygame.mixer.music.load("C:/Users/Emails/Desktop/py/audio.mp3")
    pygame.mixer.music.set_volume(0.5)
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():
        pass
    pygame.mixer.music.unload()


# 语音识别并与 AI 进行聊天
def speech():
    while True:
        rec()  # 保存录音文件:recording.wav
        text = listen()  # 自动打开录音文件recording.wav进行识别,返回 识别的文字存到text
        if '结束程序' in text:  #这里我设置了一个结束语,说“结束程序”的时候就结束,你也可以改掉
            return "对话结束"
        text_1 = chat(text)  # 将text中的文字发送给机器人,返回机器人的回复存到text_1
        asyncio.run(speak(text_1))
        play() #播放audio.mp3文件

if __name__ == '__main__':
    speech()

4.将其保存为.py文件,点击运行即可

语音播放使用的是edge-tts,所以播放速度达到瓶颈,目前还没想到办法优化。
如果代码运行的过程出错,请查看上述的库是否正确安装。
代码正确运行截图如下:
在这里插入图片描述如果有什么好的优化方案,可以直接私我,哥们高强度在线!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值