Skip to main content

SpeechKit package

Project description

С чего начать

Приведённые ниже примеры показывают, как использовать библиотеку Yandex SpeechKit для распознавания и синтеза аудио.

Чтобы реализовать примеры, установите пакет yandex-speechkit с помощью менеджера пакетов pip.

pip install yandex-speechkit

Аутентификация в сервисе

Аутентификация происходит от имени сервисного аккаунта с помощью IAM-токена или API-ключа. Подробнее об аутентификации в API SpeechKit.

Вы можете использовать один из следующих сниппетов для определения способа аутентификации в сервисе:

Использование аутентификации через API-ключ

from speechkit import configure_credentials, creds

configure_credentials(
    yandex_credentials=creds.YandexCredentials(
        api_key='<api key>'
    )
)

Использование аутентификации через IAM-токен

from speechkit import configure_credentials, creds

configure_credentials(
    yandex_credentials=creds.YandexCredentials(
        iam_token='<iam token>'
    )
)

Использование распознавания речи

Используйте приведённый ниже пример для распознавания аудио в текст. Вы также можете выставить следующие параметры модели:

  • modelтег версии модели распознавания, например general (основная версия модели) или general:rc (версия-кандидат для релиза)
  • languageязык распознавания
  • audio_processing_type — параметр, определяющий способ обработки аудио (в режиме реального времени, после получения всей аудиозаписи и т.п.)

NB. На текущий момент в библиотеке не поддержана возможность потокового и асинхронного распознавания, но их можно просимулировать с помощью опции audio_processing_type.

from speechkit import model_repository
from speechkit.stt import AudioProcessingType

model = model_repository.recognition_model()

model.model = 'general'
model.language = 'en-US'
model.audio_processing_type = AudioProcessingType.Full

result = model.transcribe_file('path/to/audio')
for c, res in enumerate(result):
    print(f'channel: {c}\n'
          f'raw_text: {res.raw_text}\n'
          f'norm_text: {res.normalized_text}\n')

Также в библиотеке поддержано разделение текста на фразы:

for c, res in enumerate(result):
    print(f'channel: {c}')
    for utterance in res.utterances:
        print(utterance)

Синтез речи

Используйте приведённый ниже пример для синтеза речи. Доступные параметры модели:

  • model — тег версии модели синтеза, на текущий момент для полнотекстового синтеза доступна только версия general
  • voice — один из доступных голосов
  • role — одна из доступных эмоций для указанного голоса
  • speed — скорость речи
  • norm_type — тип нормализации громкости (LUFS или MAX_PEAK)
  • volume — значение громкости, соответствующее указанному типу нормализации громкости
  • unsafe_mode — специальный флаг, разрешающий синтез длинных текстов (по умолчанию можно синтезировать текст не длиннее 250 символов)

По умолчанию все аудио синтезируются в формате WAV с частотой дискретизации 22050 Гц. Вы можете изменить это поведение, указав опции audio_encoding и sample_rate (доступно только для аудио в формате PCM).

Более полное описание доступных значений параметров можно найти в официальной документации.

from speechkit import model_repository

model = model_repository.synthesis_model()

model.voice = 'john'

result = model.synthesize('Hello, world!', raw_format=False)  # returns audio as pydub.AudioSegment
result.export('path/to/audio', format='wav')

Синтез речи на основе шаблона

Синтез по шаблонам — это возможность синтезировать речь по заранее заготовленным фразам (шаблонам), в которых изменяются отдельные ключевые части — переменные. Данная технология доступна только пользователям SpeechKit Brand Voice.

В базовом сценарии вам будет необходимо самостоятельно подготовить шаблоны и разметить переменные, но в рамках данного примера мы сделаем это автоматически.

from speechkit import model_repository
from speechkit.stt import AudioProcessingType
from speechkit.tts import AudioEncoding
from speechkit.tts.yandex import AudioTemplate, AudioTemplateVar, TextTemplate, TextTemplateVar

# preparing the template phrase text
var_desc = '{var}'
var_original = 'Садовая'
var_synthesis = 'Спортивная'
text = f'Следующая станция - {var_desc}.'


# using synthesis model to prepare template audio
synthesis_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 variable
recognition_model = model_repository.recognition_model()
recognition_model.model = 'general'
recognition_model.language = 'ru-RU'
recognition_model.audio_processing_type = AudioProcessingType.Full

original_recognition = recognition_model.transcribe(original_audio)[0]
assert original_recognition.raw_text == 'следующая станция садовая'
variable_markup = original_recognition.words[-1]


# forming the request
text_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 Center
pattern_based_synthesis_model.voice = '<voice_id>'  # set this parameter if you do not use SpeechKit Brand Voice Call Center

result = pattern_based_synthesis_model.synthesize_template(text_template, audio_template, raw_format=False)
result.export('path/to/audio', format='wav')

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

yandex_speechkit-1.5.0-py3-none-any.whl (118.7 kB view details)

Uploaded Python 3

File details

Details for the file yandex_speechkit-1.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for yandex_speechkit-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ca44b10c30d6acb6440ef623e559341205b269672ae7fecc52290cc6375884fb
MD5 5e06ec0e87227065eb75d740b10c715b
BLAKE2b-256 aa5630ae86f0efbbdd98f35f856822a46ddfca998b419e9a888672796fdaab6e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page