@Rogalic

Pyinstaller не работает вместе с silero tts выбивая ошибку, как это можно исправить?

Я хотел скомпилировать при помощи модуля pyinstaller свой код, в котором используется silero tts, но столкнулся с ошибкой. Чтобы разобраться не я ли допустил ошибку в написании, я взял пример кода с официальной странички github selero (код должен создавать файл, в котором бот произносит заданный текст):
import os
import torch

device = torch.device('cpu')
torch.set_num_threads(4)
local_file = 'model.pt'

if not os.path.isfile(local_file):
    torch.hub.download_url_to_file('https://models.silero.ai/models/tts/ru/v3_1_ru.pt',
                                   local_file)

model = torch.package.PackageImporter(local_file).load_pickle("tts_models", "model")
model.to(device)

example_text = 'В недрах тундры выдры в г+етрах т+ырят в вёдра ядра кедров.'
sample_rate = 48000
speaker = 'baya'

audio_paths = model.save_wav(text=example_text,
                             speaker=speaker,
                             sample_rate=sample_rate)

Код работает в PyCharm без проблем, но при попытке открытия скомпилированного .exe файла выбивает ошибку:
Traceback (most recent call last):
  File "torch\hub.py", line 639, in download_url_to_file
    pbar.update(len(buffer))
  File "torch\hub.py", line 37, in update
    sys.stderr.write("\r{0:.1f}%".format(100 * self.n / float(self.total)))
    ^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'write'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "main.py", line 9, in <module>
  File "torch\hub.py", line 630, in download_url_to_file
    with tqdm(total=file_size, disable=not progress,
  File "torch\hub.py", line 50, in __exit__
    sys.stderr.write('\n')
    ^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'write'

Подскажите, как можно исправить эту ошибку?

Я пробовал добавлять hidden import как сказано здесь https://github.com/pytorch/audio/issues/2470, но это не помогло и я понял, что эта проблема возникает лишь при использовании tts моделей silero, а например с использованием te модели для редактирования текста всё работает нормально.
  • Вопрос задан
  • 255 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nds90
скрипт 2.py
import os
import sys
import torch
import sounddevice as sd
import wave # чтобы не было ошибки что модуль не найден при запуске его нада указывать явно

example_text = 'В недрах тундры выдры в г+етрах т+ырят в вёдра ядра к+едров.'
sample_rate = 48000  #8000 24000 48000
speaker='baya'  #'aidar' 'baya' 'kseniya' 'xsenia' 'eugene' 'random'

if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
    os.chdir(sys._MEIPASS)
    
torch.set_num_threads(4)
model = torch.package.PackageImporter('./model.pt').load_pickle("tts_models", "model")
model.to(torch.device('cpu'))

audio = model.apply_tts(text=example_text,
                        speaker=speaker,
                        sample_rate=sample_rate,
                        put_accent=True,
                        put_yo=True)

sd.play(audio, sample_rate)
sd.wait()
sd.stop()


правим 2.spec

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(
    ['2.py'],
    pathex=[],
    binaries=[],
    datas=[('model.pt', '.')],
    hiddenimports=['pkg_resources.py2_warn'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=['torch.distributions'],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='2',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)


ну и собственно собирает в 1 исполняемый файл

pyinstaller 2.spec

думаю суть понятна)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы