Package: yandex-speechkit
С чего начатьПриведённые ниже примеры показывают, как использовать библиотеку Yandex SpeechKit для распознавания и синтеза аудио.Чтобы реализовать примеры, установите пакетyandex-speechkitс помощью менеджера пакетовpip.pipinstallyandex-speechkitАутентификация в сервисеАутентификация происходит от имени сервисного аккаунта с помощьюIAM-токенаилиAPI-ключа. Подробнее обаутентификации в API SpeechKit.Вы можете использовать один из следующих сниппетов для определения способа аутентификации в сервисе:Использование аутентификации через API-ключfromspeechkitimportconfigure_credentials,credsconfigure_credentials(yandex_credentials=creds.YandexCredentials(api_key='<api key>'))Использование аутентификации через IAM-токенfromspeechkitimportconfigure_credentials,credsconfigure_credentials(yandex_credentials=creds.YandexCredentials(iam_token='<iam token>'))Использование распознавания речиИспользуйте приведённый ниже пример для распознавания аудио в текст. Вы также можете выставить следующие параметры модели:model—тег версиимодели распознавания, напримерgeneral(основная версия модели) илиgeneral:rc(версия-кандидат для релиза)language—язык распознаванияaudio_processing_type— параметр, определяющий способ обработки аудио (в режиме реального времени, после получения всей аудиозаписи и т.п.)NB. На текущий момент в библиотеке не поддерживана возможность потокового и асинхронного распознавания, но их можно просимулировать с помощью опцииaudio_processing_type.fromspeechkitimportmodel_repositoryfromspeechkit.sttimportAudioProcessingTypemodel=model_repository.recognition_model()model.model='general:rc'model.language='en-US'model.audio_processing_type=AudioProcessingType.Fullresult=model.transcribe_file('path/to/audio')forc,resinenumerate(result):print(f'channel:{c}\n'f'raw_text:{res.raw_text}\n'f'norm_text:{res.normalized_text}\n')Также в библиотеке поддержано разделение текста на фразы:forc,resinenumerate(result):print(f'channel:{c}')forutteranceinres.utterances:print(utterance)Синтез речиИспользуйте приведённый ниже пример для синтеза речи. Доступные параметры модели:model— тег версии модели синтеза, на текущий момент для полнотекстового синтеза доступна только версияgeneralvoice— один издоступных голосовrole— одна издоступных эмоцийдля указанного голосаspeed— скорость речиnorm_type— тип нормализации громкости (LUFSилиMAX_PEAK)volume— значение громкости, соответствующее указанному типу нормализации громкостиunsafe_mode— специальный флаг, разрешающий синтез длинных текстов (по умолчанию можно синтезировать текст не длиннее 250 символов)По умолчанию все аудио синтезируются в форматеWAVс частотой дискретизации 22050 Гц. Вы можете изменить это поведение, указав опцииaudio_encodingиsample_rate(доступно только для аудио в формате PCM).Более полное описание доступных значений параметров можно найти вофициальной документации.fromspeechkitimportmodel_repositorymodel=model_repository.synthesis_model()model.voice='john'result=model.synthesize('Hello, world!',raw_format=False)# returns audio as pydub.AudioSegmentresult.export('path/to/audio',format='wav')Синтез речи на основе шаблонаСинтез по шаблонам— это возможность синтезировать речь по заранее заготовленным фразам (шаблонам), в которых изменяются отдельные ключевые части — переменные. Данная технология доступна только пользователямSpeechKit Brand Voice.В базовом сценарии вам будет необходимо самостоятельно подготовить шаблоны и разметить переменные, но в рамках данного примера мы сделаем это автоматически.fromspeechkitimportmodel_repositoryfromspeechkit.sttimportAudioProcessingTypefromspeechkit.ttsimportAudioEncodingfromspeechkit.tts.yandeximportAudioTemplate,AudioTemplateVar,TextTemplate,TextTemplateVar# preparing the template phrase textvar_desc='{var}'var_original='Садовая'var_synthesis='Спортивная'text=f'Следующая станция -{var_desc}.'# using synthesis model to prepare template audiosynthesis_model=model_repository.synthesis_model()synthesis_model.model='general'synthesis_model.voice='alena'original_audio=synthesis_model.synthesize(text.replace(var_desc,var_original),raw_format=True)# using recognition model to obtain timings for our variablerecognition_model=model_repository.recognition_model()recognition_model.model='general:rc'recognition_model.language='ru-RU'recognition_model.audio_processing_type=AudioProcessingType.Fulloriginal_recognition=recognition_model.transcribe(original_audio)[0]assertoriginal_recognition.raw_text=='следующая станция садовая'variable_markup=original_recognition.words[-1]# forming the requesttext_template=TextTemplate(text=text,variables=[TextTemplateVar(name=var_desc,value=var_synthesis)])audio_template=AudioTemplate(audio=original_audio,audio_format=AudioEncoding.WAV,variables=[AudioTemplateVar(name=var_desc,start_ms=variable_markup.start_time_ms,length_ms=variable_markup.end_time_ms-variable_markup.start_time_ms)])pattern_based_synthesis_model=model_repository.synthesis_model()pattern_based_synthesis_model.model='zsl'# set this parameter if you use SpeechKit Brand Voice Call Centerpattern_based_synthesis_model.voice='<voice_id>'# set this parameter if you do not use SpeechKit Brand Voice Call Centerresult=pattern_based_synthesis_model.synthesize_template(text_template,audio_template,raw_format=False)result.export('path/to/audio',format='wav')