pyttsx3 неизвестный голосовой идентификатор

Я пытался понять это более 2 часов, не уверен на 100%, но я думаю, что это связано с ошибкой в ​​модуле sapi5.py, потому что у меня не установлены следующие голоса:

MSSAM = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\MSSam'
MSMARY = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\MSMary'
MSMIKE = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\MSMike'

Я попытался добавить к приведенному выше списку, изменил первую запись на MSGeorge, попытался перейти на python 3.6 и 3.7, попытался использовать pyttsx3 2.71,

также попытался изменить реестр, чтобы добавить в MSGeorge, например, то, что вызывается в этом выпуске https://stackoverflow.com/questions/62756194/pyttsx3-module-is-not-showing-all-installed-voices

Я не думаю, что кто-то видел это раньше, учитывая, что я искал в Интернете и на YouTube, я ничего не мог найти, поэтому я думаю, что это что-то простое,

Я использую ПК с Windows 10 с Python 3.8.6 на pycharm,

Код:

import pyttsx3
engine = pyttsx3.init() # object creation
voices = engine.getProperty('voices')
print(voices)

Ошибка:

Traceback (most recent call last):
  File "C:\Users\user\PycharmProjects\venv\lib\site-packages\pyttsx3\__init__.py", line 20, in init
    eng = _activeEngines[driverName]
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\lib\weakref.py", line 131, in __getitem__
    o = self.data[key]()
KeyError: None

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/pythonProject/Jarvis/Jarvis.py", line 2, in <module>
    engine = pyttsx3.init() # object creation
  File "C:\Users\user\PycharmProjects\venv\lib\site-packages\pyttsx3\__init__.py", line 22, in init
    eng = Engine(driverName, debug)
  File "C:\Users\user\PycharmProjects\venv\lib\site-packages\pyttsx3\engine.py", line 30, in __init__
    self.proxy = driver.DriverProxy(weakref.proxy(self), driverName, debug)
  File "C:\Users\user\PycharmProjects\venv\lib\site-packages\pyttsx3\driver.py", line 52, in __init__
    self._driver = self._module.buildDriver(weakref.proxy(self))
  File "C:\Users\user\PycharmProjects\venv\lib\site-packages\pyttsx3\drivers\sapi5.py", line 32, in buildDriver
    return SAPI5Driver(proxy)
  File "C:\Users\user\PycharmProjects\venv\lib\site-packages\pyttsx3\drivers\sapi5.py", line 49, in __init__
    self.setProperty('voice', self.getProperty('voice'))
  File "C:\Users\user\PycharmProjects\venv\lib\site-packages\pyttsx3\drivers\sapi5.py", line 102, in setProperty
    token = self._tokenFromId(value)
  File "C:\Users\user\PycharmProjects\venv\lib\site-packages\pyttsx3\drivers\sapi5.py", line 86, in _tokenFromId
    raise ValueError('unknown voice id %s', id_)
ValueError: ('unknown voice id %s', 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech_OneCore\\Voices\\Tokens\\MSTTS_V110_enGB_GeorgeM')

person Silent_storm    schedule 11.01.2021    source источник
comment
Каждая ОС Windows поставляется с предустановленными этими голосами. Попробуйте поставить «sapi5» вместо «голоса».   -  person Redgar Tech    schedule 13.01.2021
comment
Проблема все еще не возникает, ошибка в строке engine = pyttsx3.init()   -  person Silent_storm    schedule 16.01.2021


Ответы (1)


Хорошо, я думаю, что наконец исправил это, оказывается, что ошибка повышения значения, расположенная в функции ниже, кажется ошибкой:

def _tokenFromId(self, id_):
    tokens = self._tts.GetVoices()
    for token in tokens:
        if token.Id == id_:
            return token
#    raise ValueError('unknown voice id %s', id_)

Чтобы исправить ошибку, я закомментировал строку повышения ValueError, и код работает, пока я отлаживал, хотя pycharm я мог видеть, что идентификатор голоса передается в функцию, но по какой-то причине оператор if возвращает false.

Во всяком случае, кажется, работает сейчас,

Местоположение файла — буква диска, например F:...\Lib\site-packages\pyttsx3\drivers, прокрутите вниз, пока не найдете указанную выше функцию, и просто закомментируйте часть кода повышения,

person Silent_storm    schedule 16.01.2021
comment
Исключение возникает только в том случае, если return token не достигнуто. Это означает, что ваш id не является частью tokens. Это вернет только None и кажется очень плохим, так как, вероятно, где-то еще произойдет сбой. Я не знаю кода, но мне интересно, почему идентификатор отсутствует в tokens - person Nic Laforge; 17.01.2021
comment
@NicLaforge так и думал, но чего я не могу понять, так это того, что я пробовал это на другом ПК, и он работал нормально, я действительно в недоумении, есть идеи, что я мог бы сделать, чтобы отладить его дальше? конечно, вы не видели код раньше, но видели ли вы когда-нибудь подобную проблему, подобную этой? - person Silent_storm; 17.01.2021
comment
Если в реестре отсутствуют ключи, я бы предположил, что их больше нет. Вы пытались установить речевую платформу: microsoft.com/en -us/download/details.aspx?id=27225. - person Nic Laforge; 17.01.2021
comment
@NicLaforge Попробовал, без изменений. Я углублюсь в это и посмотрю, что происходит, спасибо за вашу помощь, я мог бы сравнить свой другой компьютер, чтобы увидеть, не бросается ли мне что-то очевидное. - person Silent_storm; 17.01.2021