@hahadisson

AttributeError: 'tuple' object has no attribute 'to'?

я столкнулся с такой проблемой, Я написал код который работает до определенного момента, обьясняю

Суть моего кода:

Через библиотеку twitchio мы собираем информацию по новым входящим сообщениям в чате на Твич, новым фоловерам и платным подписчикам, если имеется входящее сообщение мы его отправляем в openai на обработку, получившийся ответ из openai мы должны синтезировать в голос через библиотеку silero

И как раз код ломается на этом моменте, как только я первый раз написал в чат сообщение, файл с настройками голосов начал качаться с репозитория гитхаба, но потом выдал ошибку условно "файл не найден или поврежден", тогда я начал удалять файл и скачивать его в ручную в папку, результата это не дало

Я переустановил виндовс, назвал user-пк на английском языке чтоб не было конфликта из-за кириллицы и столкнулся уже с другой ошибкой

ошибка
Using cache found in C:\Users\root/.cache\torch\hub\snakers4_silero-models_master
Traceback (most recent call last):
  File "C:\Users\root\AppData\Local\Programs\Python\Python39\lib\site-packages\twitchio\client.py", line 208, in wrapped
    await func(*args)
  File "C:\Users\root\Desktop\neural-chan-v1\main.py", line 47, in event_message
    audio_response = torch.hub.load(repo_or_dir='snakers4/silero-models',
AttributeError: 'tuple' object has no attribute 'to'


Пожалуйста, помогите разобраться, я тугой чайник который хочет написать себе свою игрушку и сижу уже 40 часов без сна потому что не могу решить совокупность проблем..

code

import twitchio
import openai
import torch
import sounddevice as sd
import time


# Set up OpenAI API key and engine
openai.api_key = 'sk-токенD3YioE'
openai_engine = "text-davinci-003"

# Set up TTS parameters
language = 'ru'
model_id = 'ru_v3'
sample_rate = 48000 # 48000
speaker = 'baya' # aidar, baya, kseniya, xenia, random
put_accent = True
put_yo = True
device = torch.device('cpu') # cpu или gpu

# Set up Twitch Bot
bot_nickname = 'idбот_bot'
twitch_oauth_token = 'u7токенkag'
twitch_channel_name = 'idканалoke'

class TwitchBot(twitchio.Client):
    def __init__(self):
        super().__init__(token=twitch_oauth_token, initial_channels=[twitch_channel_name])

    async def event_message(self, message):
        # Ignore messages from the bot itself
        if message.author.name.lower() == bot_nickname.lower():
            return

        # Handle new message from users
        prompt = f"{message.author.name} написал: {message.content}"
        response = openai.Completion.create(
            engine=openai_engine,
            prompt=prompt,
            max_tokens=300,
            n=1,
            stop=None,
            temperature=0.7
        )

        text_response = response.choices[0].text.strip()
        audio_response = torch.hub.load(repo_or_dir='snakers4/silero-models',
                          model='silero_tts',
                          language=language,
                          speaker=model_id).to(device).synthesize(text_response)
        print(f"{message.author.name} написал: {message.content} - {text_response}")
        sd.play(audio_response, sample_rate)
        time.sleep(len(audio_response) / sample_rate)
        sd.stop()

    async def event_subscribe(self, event):
        # Say thank you to new subscribers and followers
        if event.sub_plan == 'Prime' or event.sub_plan == '1000':
            prompt = f"Thank you for the paid subscription {event.user.name}"
            response = openai.Completion.create(
                engine=openai_engine,
                prompt=prompt,
                max_tokens=100,
                n=1,
                stop=None,
                temperature=0.7
            )
            text_response = response.choices[0].text.strip()
            audio_response = torch.hub.load(repo_or_dir='snakers4/silero-models',
                          model='silero_tts',
                          language=language,
                          speaker=model_id).to(device).synthesize(text_response)
            print(f"Thank you for the paid subscription {event.user.name}")
            sd.play(audio_response, sample_rate)
            time.sleep(len(audio_response) / sample_rate)
            sd.stop()
        else:
            prompt = f"Thank you for the follows {event.user.name}"
            response = openai.Completion.create(
                engine=openai_engine,
                prompt=prompt,
                max_tokens=100,
                n=1,
                stop=None,
                temperature=0.7
            )
            text_response = response.choices[0].text.strip()
            audio_response = torch.hub.load(repo_or_dir='snakers4/silero-models',
                          model='silero_tts',
                          language=language,
                          speaker=model_id).to(device).synthesize(text_response)
            print(f"Thank you for the follows {event.user.name}")
            sd.play(audio_response, sample_rate)
            time.sleep(len(audio_response) / sample_rate)
            sd.stop()

bot = TwitchBot()
bot.run()
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 1
@ragq1991
Это работает:
import torch
import sounddevice as sd
import time

sample_rate = 48000 # 48000
device = torch.device('cpu') # cpu или gpu
speaker = 'xenia'
model = torch.hub.load(repo_or_dir='snakers4/silero-models',
                          model='silero_tts',
                          language='ru',
                          speaker='v3_1_ru')[0]
model.to(device)
audio = model.apply_tts(text="приветмир",
                        speaker=speaker,
                        sample_rate=sample_rate)
sd.play(audio, sample_rate)
time.sleep(len(audio) / sample_rate)
sd.stop()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы