Это демонстрационный пример того, как сгенерировать аудио по тексту с помощью Yandex SpeechKit Text-to-Speech, а затем получить текст с таймкодами с помощью Speech-to-Text.
- Описание
- Особенности
- Используемые технологии
- Требования
- Установка
- Использование
- Конфигурация
- Документация
- Лицензия
Этот проект демонстрирует, как использовать сервисы Yandex.Cloud для преобразования текста в речь, а затем распознать речь с получением временных меток для каждого слова. Это полезно для приложений, которым требуется синхронизация текста и аудио, таких как субтитры или интерактивные голосовые помощники.
- Синтез речи: Преобразование текста в аудио с помощью Yandex SpeechKit.
- Загрузка в Object Storage: Автоматическая загрузка сгенерированного аудио в Yandex Object Storage.
- Распознавание речи: Распознавание речи с получением временных меток для каждого слова.
- Аутентификация: Использование сервисных аккаунтов и IAM-токенов для безопасного доступа к API.
- Язык программирования: Python 3.7+
- Сервисы Yandex.Cloud:
- Yandex SpeechKit
- Yandex Object Storage
- Yandex Identity and Access Management (IAM)
- Библиотеки Python:
- requests
- boto3
- PyJWT
- python-dotenv
- colorama
- Python: версия 3.7 или выше
- Аккаунт в Yandex.Cloud
- Yandex.Cloud CLI: для настройки и управления ресурсами
-
Клонируйте репозиторий:
git clone https://github.com/yourusername/yandex-tts-stt-example.git cd yandex-tts-stt-example
-
Создайте виртуальное окружение (рекомендуется):
python -m venv venv source venv/bin/activate # Для Windows: venv\Scripts\activate
-
Установите зависимости:
pip install -r requirements.txt
-
Настройте переменные окружения (см. раздел Конфигурация).
-
Запустите скрипт:
python yandex_tts_stt.py
Результат работы скрипта выводится в формате JSON, который содержит оригинальный текст и список распознанных слов с их временными метками. Пример вывода:
✅ IAM-токен успешно получен.
✅ Аудио сохранено в output.ogg
✅ Аудиофайл загружен в Object Storage.
✅ Получен URI аудиофайла.
📝 Операция запущена с ID: e03igrvpvnjfomk0cs6s
🎉 Распознавание успешно завершено.
{
"original_text": "Привет, как твои дела?",
"words": [
{
"word": "привет",
"start_time": 160,
"end_time": 659
},
{
"word": "как",
"start_time": 740,
"end_time": 859
},
{
"word": "твои",
"start_time": 919,
"end_time": 1120
},
{
"word": "дела",
"start_time": 1180,
"end_time": 1540
}
]
}
Этот формат удобен для дальнейшей обработки на фронтенде, например, для подсветки слов в соответствии с их произношением в аудио.
🕒 Временные метки указаны в миллисекундах для удобства использования в веб-разработке.
Необходимо настроить несколько переменных окружения в файле .env
. Следуйте инструкциям ниже:
-
Создайте файл
.env
в директории проекта:touch .env
-
Добавьте в файл
.env
следующие переменные:FOLDER_ID=ваш_folder_id AWS_ACCESS_KEY_ID=ваш_access_key_id AWS_SECRET_ACCESS_KEY=ваш_secret_access_key BUCKET_NAME=имя_вашего_бакета
Как получить:
- Войдите в консоль управления Yandex.Cloud.
- Выберите нужный каталог (folder).
- FOLDER_ID отображается в URL браузера после
/folders/
.
-
Создайте сервисный аккаунт:
- Перейдите в раздел IAM -> Сервисные аккаунты.
- Нажмите "Создать сервисный аккаунт".
- Укажите имя (например, speechkit-sa).
-
Назначьте роли сервисному аккаунту:
- Перейдите во вкладку "Роли сервисного аккаунта".
- Нажмите "Назначить роль" и добавьте следующие роли:
editor
(или более конкретные, такие какspeechkit.tts.user
,speechkit.stt.user
,storage.uploader
).
-
Создайте ключ сервисного аккаунта:
- Перейдите во вкладку "Ключи API сервисного аккаунта".
- Нажмите "Создать новый ключ".
- Выберите "Ключ для доступа к API Yandex.Cloud".
- Скачайте файл
service_account_key.json
. - Поместите его в директорию проекта.
Создайте ключи доступа для Object Storage:
- Перейдите во вкладку "Ключи доступа сервисного аккаунта".
- Нажмите "Создать ключ доступа".
- Сохраните значения "Идентификатор ключа доступа" (AWS_ACCESS_KEY_ID) и "Секретный ключ доступа" (AWS_SECRET_ACCESS_KEY).
Примечание: Секретный ключ доступа отображается только один раз. Убедитесь, что вы его сохранили.
Создайте бакет в Object Storage:
- Перейдите в раздел Object Storage.
- Нажмите "Создать бакет".
- Укажите уникальное имя бакета (например, my-audio-bucket).
- Настройте права доступа, чтобы ваш сервисный аккаунт имел доступ к бакету.
Важные замечания:
- Защитите ваши учетные данные:
- Не добавляйте файл
.env
илиservice_account_key.json
в систему контроля версий. - Добавьте их в
.gitignore
.
- Не добавляйте файл
- Права доступа:
- Убедитесь, что сервисный аккаунт имеет необходимые роли для доступа к сервисам SpeechKit и Object Storage.
- Регион бакета:
- Убедитесь, что бакет создан в регионе
ru-central1
, если используете его в коде.
- Убедитесь, что бакет создан в регионе
Также необходимые ключи и идентификаторы можно сгенерировать через Yandex Cloud CLI, подбробнее смотреть инструкцию
- Yandex SpeechKit:
- Yandex Object Storage:
- Yandex Identity and Access Management (IAM):
- Yandex.Cloud CLI:
- Библиотеки Python:
Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.