Raspberry Pi Linux implémente l'interaction vocale ChatGPT (reconnaissance vocale, TTS)


Préface

Tout le monde doit être familiarisé avec l'utilisation de ChatGPT. Accédez au site officiel et créez un compte pour démarrer une conversation formelle. Mais comment utiliser l'API ChatGPT et mener une interaction vocale dans l'environnement Linux ? Il m'est arrivé d'utiliser cette fonction lors de ma participation à un concours de conception pour l'Internet des objets cet été. Aujourd'hui, je vais vous apprendre les étapes détaillées.


1. Acquisition de l'API ChatGPT

Comment obtenir un compte ChatGPT n'est pas difficile pour tout le monde. Il existe de nombreux didacticiels en ligne que vous pouvez rechercher. Après avoir obtenu un compte, vous pouvez entrer https://platform.openai.com/account/api -keys page.
Insérer la description de l'image ici
Choisissez de créer une clé API. Vous devez enregistrer cette clé et l'utiliser pour une utilisation ultérieure. A noter ici que chaque compte de l'API gratuite est limité à cinq dollars, qui ne peuvent théoriquement pas être utilisés pour une utilisation quotidienne.

2. Étapes d'utilisation de l'API

Expérimentons ensuite avec la clé API. Tout d'abord, vous devez installer le package openai dans l'environnement Linux. Ici, nous prenons le Raspberry Pi comme exemple.

pip3 install openai

Après une installation réussie, nous pouvons créer un Python et l'exécuter. Comme nous le savons tous, ChatGPT nécessite de la magie et les appels API ne font pas exception.

# -*- 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


Réalisez un appel API simple et exécutez le code ci-dessus.
Insérer la description de l'image ici
Posez les questions et obtenez les réponses que vous souhaitez. Vous pouvez également choisir parmi les modèles selon vos besoins.

3. Reconnaissance vocale

La première et la plus importante chose est de connecter un microphone externe pour identifier l'audio en temps réel du monde extérieur. Voici le microphone USB sans pilote utilisé sur le Raspberry Pi.
Insérer la description de l'image ici
Si vous souhaitez obtenir une véritable interaction vocale, vous ne pouvez lire qu'à partir du flux audio en temps réel.

Nous utilisons ici l'API de reconnaissance vocale de Google, SpeechRecognition.
Installez d'abord les packages appropriés dans le terminal.

pip3 install SpeechRecognition

est installé avec succès et le périphérique microphone est installé, nous pouvons passer à l'étape suivante.
Nous utilisons un programme Python pour l'implémenter.

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))

Voici la réalisation de la reconnaissance audio en temps réel. Il convient de noter que l'utilisation de Speech_recognition nécessite également un accès magique à Internet dans l'environnement Linux.
De nombreux messages d'erreur apparaîtront lors de l'exécution du code, mais ceux-ci n'affecteront pas nos résultats d'identification.
Insérer la description de l'image ici
Vous pouvez poser des questions lorsque l'exemple Please Speak est affiché. Selon les mesures réelles, la vitesse et la précision de reconnaissance dans un environnement calme sont encore très élevées.
Le résultat renvoyé par la reconnaissance est enregistré sous forme de texte. Il suffit d'attribuer du texte à l'entrée du GPT ci-dessus.

3. TTS (synthèse vocale)

Pour réaliser un dialogue vocal, les questions auxquelles répond GPT doivent également être converties en audio via TTS.
La synthèse vocale Sambert d'Alibaba Cloud est utilisée ici. La vitesse de synthèse réelle est très rapide et la parole est naturelle.
Vous devez d'abord télécharger le package de Sambert

pip3 install dashscope

Expérimentez-le

# 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()))

Après avoir exécuté le code, un fichier output.wav sera généré. Le contenu du fichier est la question posée dans le texte.

4. Lecture audio

a obtenu le fichier audio généré et nous devons encore le lire.
J'ai essayé différentes manières de lire de l'audio en python sous un environnement Linux. Au final, celle avec le meilleur effet et le délai le plus faible utilisait pygame.
Suivez toujours les mêmes étapes pour installer pygame.

pip3 install pygame

5. Intégration fonctionnelle

En intégrant toutes les fonctions, vous pouvez atteindre la fonction finale que vous souhaitez réaliser.

# -*- 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()))

Exécutez le code et vous obtiendrez l'effet souhaité. En raison de problèmes d'agence, il y aura un court retard dans l'effet final.

Résumer

Ce cas n'est pas difficile à mettre en œuvre. La clé est de savoir comment l'utiliser. ChatGPT est utilisé ici, ou il peut être remplacé par de grands modèles nationaux tels que Wen Xinyiyan, qui ont de meilleurs effets et une vitesse de réponse plus rapide. C'est tout pour ce partage. Si vous avez encore des questions, n'hésitez pas à critiquer et à nous donner des conseils. Apprenons les uns des autres.

おすすめ

転載: blog.csdn.net/qq_62444807/article/details/132950826