Skip to content

e-Nicko/yandex-tts-stt-example

Repository files navigation

Yandex TTS-STT Example 🎙️📝

Это демонстрационный пример того, как сгенерировать аудио по тексту с помощью 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: для настройки и управления ресурсами

🛠 Установка

  1. Клонируйте репозиторий:

    git clone https://github.com/yourusername/yandex-tts-stt-example.git
    cd yandex-tts-stt-example
  2. Создайте виртуальное окружение (рекомендуется):

    python -m venv venv
    source venv/bin/activate  # Для Windows: venv\Scripts\activate
  3. Установите зависимости:

    pip install -r requirements.txt

▶️ Использование

  1. Настройте переменные окружения (см. раздел Конфигурация).

  2. Запустите скрипт:

    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. Следуйте инструкциям ниже:

  1. Создайте файл .env в директории проекта:

    touch .env
  2. Добавьте в файл .env следующие переменные:

    FOLDER_ID=ваш_folder_id
    AWS_ACCESS_KEY_ID=ваш_access_key_id
    AWS_SECRET_ACCESS_KEY=ваш_secret_access_key
    BUCKET_NAME=имя_вашего_бакета

Получение необходимых переменных

1. FOLDER_ID

Как получить:

  • Войдите в консоль управления Yandex.Cloud.
  • Выберите нужный каталог (folder).
  • FOLDER_ID отображается в URL браузера после /folders/.

2. Ключ сервисного аккаунта

  1. Создайте сервисный аккаунт:

    • Перейдите в раздел IAM -> Сервисные аккаунты.
    • Нажмите "Создать сервисный аккаунт".
    • Укажите имя (например, speechkit-sa).
  2. Назначьте роли сервисному аккаунту:

    • Перейдите во вкладку "Роли сервисного аккаунта".
    • Нажмите "Назначить роль" и добавьте следующие роли:
      • editor (или более конкретные, такие как speechkit.tts.user, speechkit.stt.user, storage.uploader).
  3. Создайте ключ сервисного аккаунта:

    • Перейдите во вкладку "Ключи API сервисного аккаунта".
    • Нажмите "Создать новый ключ".
    • Выберите "Ключ для доступа к API Yandex.Cloud".
    • Скачайте файл service_account_key.json.
    • Поместите его в директорию проекта.

3. AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY

Создайте ключи доступа для Object Storage:

  • Перейдите во вкладку "Ключи доступа сервисного аккаунта".
  • Нажмите "Создать ключ доступа".
  • Сохраните значения "Идентификатор ключа доступа" (AWS_ACCESS_KEY_ID) и "Секретный ключ доступа" (AWS_SECRET_ACCESS_KEY).

Примечание: Секретный ключ доступа отображается только один раз. Убедитесь, что вы его сохранили.

4. BUCKET_NAME

Создайте бакет в Object Storage:

  1. Перейдите в раздел Object Storage.
  2. Нажмите "Создать бакет".
  3. Укажите уникальное имя бакета (например, my-audio-bucket).
  4. Настройте права доступа, чтобы ваш сервисный аккаунт имел доступ к бакету.

Важные замечания:

  • Защитите ваши учетные данные:
    • Не добавляйте файл .env или service_account_key.json в систему контроля версий.
    • Добавьте их в .gitignore.
  • Права доступа:
    • Убедитесь, что сервисный аккаунт имеет необходимые роли для доступа к сервисам SpeechKit и Object Storage.
  • Регион бакета:
    • Убедитесь, что бакет создан в регионе ru-central1, если используете его в коде.

Также необходимые ключи и идентификаторы можно сгенерировать через Yandex Cloud CLI, подбробнее смотреть инструкцию

Документация

📄 Лицензия

Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.

About

Demonstration of using Yandex SpeechKit for speech synthesis and recognition with timecodes, including audio upload to Yandex Object Storage

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages