树莓派Linux实现ChatGPT语音交互(语音识别,TTS)

这篇具有很好参考价值的文章主要介绍了树莓派Linux实现ChatGPT语音交互(语音识别,TTS)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

ChatGPT使用想必大家都不陌生,进入官网,注册账号即可开始正式的对话聊天,可是如何使用ChatGPT API,且在Linux环境下进行语音交互呢?碰巧在今年暑期参加物联网设计竞赛有用到这项功能,今天就来教下大家详细步骤。


一、ChatGPT API获取

如何获取一个ChatGPT账号相比对大家来说不是一件难事,网上教程很多大家可以搜一下,获取到一个账号后,可以进入https://platform.openai.com/account/api-keys页面。
linux tts,Linux学习,linux,chatgpt,交互,语音识别,python,物联网,自然语言处理
选择创建一个api key 大家一定要保存好这个密钥,后续使用都是利用这个密钥。这里需要注意免费API每个账户都是有限的,五美元,理论上自己日常使用时用不完了的。

二、API使用步骤

接下来就让我们来试验一下API密钥。首先在Linux环境下需要安装openai的包这里我们以树莓派为例。

pip3 install openai

成功安装后我们就可以创建一个Python运行一下,而众所周知,ChatGPT是需要需要使用魔法的,API调用也不例外。

# -*- coding: utf-8 -*-

import openai

# 设置OpenAI API密钥
openai.api_key = 'sk-xxxx'#这里需要替换为你的账户API KEY

# 定义初始对话历史
conversation_history = [
    {'role': 'system', 'content': 'You are a helpful assistant.'}
]

# 循环交互
while True:
    # 处理用户输入
    user_input = input("User: ")

    # 将用户输入添加到对话历史中
    conversation_history.append({'role': 'user', 'content': user_input})

    # 发送聊天请求
    response = openai.ChatCompletion.create(
        model='gpt-3.5-turbo',
        messages=conversation_history,
        max_tokens=100,
        n=1,
        stop=None,
        temperature=0.7
    )

    # 获取助手的回复
    assistant_reply = response['choices'][0]['message']['content']

    # 打印助手的回复
    print("Assistant:", assistant_reply)

    # 将助手的回复添加到对话历史中
    conversation_history.append({'role': 'assistant', 'content': assistant_reply})

    # 检查用户是否选择退出循环
    if user_input.lower() == 'exit':
        break


通过以上代码实现简单的API调用,运行。
linux tts,Linux学习,linux,chatgpt,交互,语音识别,python,物联网,自然语言处理
问出问题,就可以得到你想要的答案。其中的模型大家也可以根据需求选用。

三、语音识别

首先最重要的是外接一个麦克风设备,对外界实时音频进行识别,这里树莓派上使用的无驱的USB麦克风设备。
linux tts,Linux学习,linux,chatgpt,交互,语音识别,python,物联网,自然语言处理
想要实现真正意义上的语音交互,就只能从实时音频流中读取。

这里我们使用的是Google的语音识别API SpeechRecognition。
首先在终端中安装相关包。

pip3 install SpeechRecognition

成功安装,且麦克风设备安装完成,我们就可以进入下一步。
我们使用一个Python程序来进行实现。

import speech_recognition as sr

# 创建一个Recognizer对象
r = sr.Recognizer()

# 使用麦克风录音
with sr.Microphone() as source:
    print("请说话:")
    audio = r.listen(source)

# 将语音转换为文本
try:
    text = r.recognize_google(audio, language='zh-CN')
    print("你说的是:" + text)
except sr.UnknownValueError:
    print("无法识别你的语音")
except sr.RequestError as e:
    print("无法连接到Google API,错误原因:" + str(e))

这里是实现实时音频的识别。需要注意的是,speech_recognition的使用也需要Linux环境下的魔法上网。
运行代码会出现许多报错信息,但这些都不影响我们的识别结果。
linux tts,Linux学习,linux,chatgpt,交互,语音识别,python,物联网,自然语言处理
当显示请说话示例时就可以提出问题了。实测在安静环境下识别速度和识别准确率还是非常高的。
识别返回的结果保存在text中,只要将text赋值给上述GPT的输入即可。

三、TTS(语音合成)

要想实现语音对话,还需要将GPT回复的问题经过TTS转化为音频。
这里使用的阿里云的Sambert语音合成,实测合成速度很快,且语音自然。
首先需要下载Sambert的包

pip3 install dashscope

试验一下

# coding=utf-8

import dashscope
from dashscope.audio.tts import SpeechSynthesizer

dashscope.api_key='your-dashscope-api-key'

result = SpeechSynthesizer.call(model='sambert-zhichu-v1',
                                text='今天天气怎么样',
                                sample_rate=48000,
                                format='wav')

if result.get_audio_data() is not None:
    with open('output.wav', 'wb') as f:
        f.write(result.get_audio_data())
print('  get response: %s' % (result.get_response()))

执行代码后就能生成一个output.wav文件,文件内容就是text中问出的问题。

四、音频播放

得到了生成的音频文件,我们还需要将他播放出来。
Linux环境下python播放音频播放我尝过各种方式,最后使用效果最好,延时最低的是使用pygame来播放。
还是以同样的步骤,安装pygame。

pip3 install pygame

五、功能整合

将所有功能进行整合,即可实现最后想要实现的功能。

# -*- coding: utf-8 -*-
import openai
import pygame
from pygame import mixer
import dashscope
from dashscope.audio.tts import SpeechSynthesizer
import speech_recognition as sr
import time
# 创建一个Recognizer对象
r = sr.Recognizer()
mixer.init()

# 设置OpenAI API密钥
openai.api_key = 'sk-xx'
dashscope.api_key='sk-xx'

# 定义初始对话历史
conversation_history = [
    {'role': 'system', 'content': 'You are a helpful assistant.'}
]

# 循环交互
while True:
    # 处理用户输入
    # 使用麦克风录音
    with sr.Microphone() as source:
        print("请开始说话...")
        audio = r.listen(source)

    try:
        # 使用语音识别引擎将音频转换为文字
        text = r.recognize_google(audio, language='zh-CN')
        print("识别结果:", text)
    except sr.UnknownValueError:
        print("无法识别音频")
    except sr.RequestError as e:
        print("请求出错:", e)
    user_input = text

    # 将用户输入添加到对话历史中
    conversation_history.append({'role': 'user', 'content': user_input})

    # 发送聊天请求
    response = openai.ChatCompletion.create(
        model='gpt-3.5-turbo',
        messages=conversation_history,
        max_tokens=100,
        n=1,
        stop=None,
        temperature=0.7
    )

    # 获取助手的回复
    assistant_reply = response['choices'][0]['message']['content']
    result = SpeechSynthesizer.call(model='sambert-zhimiao-emo-v1',
                                text=assistant_reply,
                                sample_rate=48000,
                                format='wav')
    # 打印助手的回复
    print("Assistant:", assistant_reply)
    if result.get_audio_data() is not None:
        with open('output.wav', 'wb') as f:
            f.write(result.get_audio_data())
    mixer.music.load('output.wav')
    mixer.music.play()

    # 将助手的回复添加到对话历史中
    conversation_history.append({'role': 'assistant', 'content': assistant_reply})
    time.sleep(1)
    while pygame.mixer.music.get_busy()!=True:  # 在音频播放完成之前不退出程序
        pass
    print('  get response: %s' % (result.get_response()))

运行代码,就可以的到想要得到的效果。因代理问题,最后效果会有短暂的延时。

总结

该案例实现起来不难,找准如何使用才是关键所在,这里实现的用ChatGPT,也可换成文心一言等国内大模型,其效果更好,响应速度更快。本次的分享也就到这里,如果还有什么问题请各位批评指教,大家一起相互学习。文章来源地址https://www.toymoban.com/news/detail-721161.html

到了这里,关于树莓派Linux实现ChatGPT语音交互(语音识别,TTS)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于ARM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

    目录 一   项目说明 ①   设计框架 ②   功能说明 ③   硬件说明 ④   软件说明 二   项目代码 1 mainPro.c 主函数 2 InputCommand.h 控制设备头文件 3 contrlDevices.h 外接设备头文件 4 bathroomLight.c 泳池灯 5 livingroomLight.c 卧室灯 6 restaurantLight.c 餐厅灯 7 upstairLight.c 二楼灯 8 fire.c 火焰

    2024年02月03日
    浏览(36)
  • 基于RAM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

    目录 一   项目说明 ①   设计框架 ②   功能说明 ③   硬件说明 ④   软件说明 二   项目代码 1 mainPro.c 主函数 2 InputCommand.h 控制设备头文件 3 contrlDevices.h 外接设备头文件 4 bathroomLight.c 泳池灯 5 livingroomLight.c 卧室灯 6 restaurantLight.c 餐厅灯 7 upstairLight.c 二楼灯 8 fire.c 火焰

    2024年02月02日
    浏览(25)
  • 【ESP32S3 Sense接入语音识别+MiniMax模型+TTS模块语音播报】

    讲解视频: ESP32S3 AI助手使用MiniMax大模型生产工具1 大家好,今天的教程将围绕如何实现精准的语音播报功能展开,我们用到了ESP32S3 Sense接入语音识别+MiniMax模型对话+SNR9816TTS模块。 目前这是我使用的ESP32S3官方硬件👍👍👍(小小的身材有大大的力量)只需要35元加摄像头麦

    2024年04月12日
    浏览(26)
  • 基于百度语音识别、文心一言大模型、百度语音合成的一套完整的语音交互(利用Python实现)

           本人小白,因为毕设项目需要用的语音交互,便查网上的资料利用百度api实现,比较简单的过程,供大家借鉴批判。 项目框架大致分为3步:(1)百度语音识别可以将我们输入的语音转化为文本输入到文心一言大模型;(2)文心一言大模型根据输入以输出响应文本;

    2024年04月17日
    浏览(27)
  • 基于树莓派构建深度学习语音识别系统

    +v hezkz17进数字音频系统研究开发交流答疑裙   1 Linux 音频框架如何做语音识别系统?   要在Linux上构建一个语音识别系统,可以使用以下步骤和工具: 安装音频框架:在Linux上运行语音识别系统需要一个适当的音频框架。常见的选择包括 ALSA(Advanced Linux Sound Architecture)和

    2024年02月15日
    浏览(20)
  • Unity+chatgpt+webgl实现声音录制+语音识别

            AI二次元女友这个项目持续更新,在window端的语音识别和语音合成的功能,在上一篇博文里已经详细说明了微软Azure语音服务的代码实现。也是为了实现一次代码,多端复用这样的诉求,所以全部的代码实现都改成了web api的方式。然而在实测发布到webgl的时候,就发现

    2024年02月16日
    浏览(23)
  • Linux 中的机器学习:Whisper——自动语音识别系统

    Whisper 是一种自动语音识别 (ASR) 系统,使用从网络收集的 680000 小时多语言和多任务数据进行训练,Whisper 由深度学习和神经网络提供支持,是一种基于 PyTorch 构建的自然语言处理系统,这是免费的开源软件。 我们用 Ubuntu 22.04 LTS 测试了 Whisper,为避免污染您的系统,我们建议

    2024年02月07日
    浏览(25)
  • .net实现简单语音朗读(TTS)功能

    首先,添加DotNetSpeech.dll引用,可以在这里直接下载,也可以参照这篇文章说的,在安装Speech SDK以后,在Common FilesMicrosoft SharedSpeech目录下面找到SAPI.dll,用Tlbimp.exe工具将该dll转换成.net平台下的Assembly---DotNetSpeech.dll。 然后,using DotNetSpeech; 朗读功能: 注:SpeechVoiceSpeakFlags是

    2024年02月07日
    浏览(21)
  • 微软(TTS)文本转语音服务API实现

    此博客实现与java实现微软文本转语音(TTS)经验总结_java tts_${简简单单}的博客-CSDN博客之上,首先感谢博客源码的提供,本人在上面添加了一些详细的注释,方便大家跟好的理解和使用,毕竟我已经用原文调试了一下午才调通,一些细节的问题给大家标注出来,免得浪费大家

    2024年02月07日
    浏览(26)
  • 4个步骤实现Java版的TTS(文字转语音)

    TTS是Text To Speech的缩写,即“从文本到语音”,让机器能够说话。 微软自带TTS(Text To Speech) 语音引擎,可以将文本转换成语音播报。 现在通过Java程序(jacob包),利用Windows自带的TTS实现语言的播报。 详细步骤如下: 下载jacob jar包和dll文件 将dll放置到相应的文件目录中 将

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包