Skip to main content

Внимание: этот пакет устарел и больше не поддерживается. Используйте актуальный SDK: https://github.com/yandex-cloud/yandex-ai-studio-sdk

С чего начать

Приведённые ниже примеры показывают, как использовать библиотеку 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')

Metadata

Release files for yandex-speechkit 1.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for yandex-speechkit 1.7.0
File Interpreter ABI Platform
yandex_speechkit-1.7.0-py3-none-any.whl Python 3 none any Details

Release files / yandex_speechkit-1.7.0-py3-none-any.whl

Download URL yandex_speechkit-1.7.0-py3-none-any.whl
Size 110.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
77a833e06e8cdc7b4fb0dab433bbd793aa29b93642b25a5c3cb73c495e7005f8
BLAKE2b-256 checksum
How to use checksums
db5d89abba549914fec73d87ab4f5b2a24067e1a672433beb4e0b8a9bf6cf835
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.9

Release history Release notifications | RSS feed

This release

1.7.0 This release

1 release file

1.6.5

1 release file

1.5.0

1 release file

1.3.3

1 release file

1.3.2

1 release file

1.3.1

1 release file

1.3.0

1 release file

1.2.2

1 release file

1.2.1

1 release file

1.2

1 release file

1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page