Как добавить возможность распознования голоса python?
У меня есть вопрос как добавить возможность распознания текста в python голосом. Я пытался реализовать это не одной библиотекой но у меня не получилось. я хотел бы реализовать распознание голоса с последующим ответом от chatgpt. Ответившим буду признателен и смогу отблагодарить)
import openai
import time
import silero
import sounddevice as sd
import torch
import pyaudio
import eel
import speech_recognition as sr
language = "ru"
model_id = "ru_v3"
sample_rate = 48000
speaker = "baya"
put_accent = True
put_yo = True
device = torch.device("cpu")
model, _ = torch.hub.load(repo_or_dir='snakers4/silero-models',
model='silero_tts',
language=language,
speaker=model_id)
openai.api_key = 'token'
chat_history = [{'role': 'system', 'content': 'Ты мой помощник, тебя зовут Гэри'}]
def chat_with_model(user_input):
messages = chat_history + [{'role': 'user', 'content': user_input}]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0613",
max_tokens=1024,
messages=messages
)
generated_text = response.choices[0].message.content
chat_history.append({'role': 'assistant', 'content': generated_text})
return generated_text
def record_volume():
wlcmtxt = "Добрый день. Я Гэри\nСлушаю вас..."
audiorec = model.apply_tts(text=wlcmtxt,
speaker=speaker,
sample_rate=sample_rate,
put_accent=put_accent,
put_yo=put_yo)
r = sr.Recognizer()
with sr.Microphone(device_index=1) as source:
print("Добрый день. Я Гэри\nСлушаю вас...")
sd.play(audiorec, sample_rate)
time.sleep(len(audiorec) / sample_rate)
sd.stop()
audio = r.listen(source)
query = r.recognize_google(audio, language="ru-RU")
print(f'user:{query.lower()}')
while True:
user_input = input("user: ")
if user_input.lower() == 'exit':
break
response = chat_with_model(user_input)
txt = response
# Выводим ответ модели
model.to(device)
audio = model.apply_tts(text=txt,
speaker=speaker,
sample_rate=sample_rate,
put_accent=put_accent,
put_yo=put_yo)
# выводим текст и воспроизводим
print(txt)
sd.play(audio, sample_rate)
time.sleep(len(audio) / sample_rate)
sd.stop()
Источник: Stack Overflow на русском