Использование API преобразования речи в текст с Node.js

Использование API преобразования речи в текст с Node.js

О практической работе

subjectПоследнее обновление: дек. 15, 2022
account_circleАвторы: Anu Srivastava

1. Обзор

Google Cloud Speech-to-Text API позволяет разработчикам преобразовывать аудио в текст на 120 языках и их вариантах, применяя мощные модели нейронных сетей в простом в использовании API.

В этой лабораторной работе вы сосредоточитесь на использовании API преобразования речи в текст с Node.js. Вы узнаете, как отправить аудиофайл на английском и других языках в Cloud Speech-to-Text API для транскрипции.

  • Как включить API преобразования речи в текст
  • Как аутентифицировать запросы API
  • Как установить клиентскую библиотеку Google Cloud для Node.js
  • Как расшифровать аудиофайлы на английском языке
  • Как расшифровать аудиофайлы со словесными временными метками
  • Как расшифровать аудиофайлы на разных языках

Что вам понадобится

  • Проект облачной платформы Google
  • Браузер, например Chrome или Firefox.
  • Знакомство с использованием Javascript/Node.js

Опрос

Как вы будете использовать этот урок?

Как бы вы оценили свой опыт работы с Node.js?

Как бы вы оценили свой опыт использования сервисов Google Cloud Platform?

2. Настройка и требования

Самостоятельная настройка среды

  1. Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. (Если у вас еще нет учетной записи Gmail или G Suite, вам необходимо ее создать .)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID .

  1. Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.

Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы не взимать плату за пределами этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

Активировать Cloud Shell

  1. В Cloud Console нажмите «Активировать Cloud Shell». H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlannQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWapJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecH rbzQ

Если вы никогда раньше не запускали Cloud Shell, вам будет представлен промежуточный экран (ниже сгиба) с описанием того, что это такое. В этом случае нажмите «Продолжить» (и вы больше никогда его не увидите). Вот как выглядит этот одноразовый экран:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Подготовка и подключение к Cloud Shell займет всего несколько минут.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbha

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью просто браузера или Chromebook.

После подключения к Cloud Shell вы увидите, что вы уже прошли аутентификацию и что для проекта уже установлен идентификатор вашего проекта.

  1. Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:
gcloud auth list

Вывод команды

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Вывод команды

[core]
project = <PROJECT_ID>

Если это не так, вы можете установить это с помощью этой команды:

gcloud config set project <PROJECT_ID>

Вывод команды

Updated property [core/project].

3. Включить API преобразования речи в текст

Прежде чем вы сможете начать использовать API преобразования речи в текст, вы должны включить этот API. Вы можете включить API, используя следующую команду в Cloud Shell:

gcloud services enable speech.googleapis.com

4. Аутентификация запросов API

Чтобы отправлять запросы к API преобразования речи в текст, вам необходимо использовать учетную запись службы . Учетная запись службы принадлежит вашему проекту и используется клиентской библиотекой Google Node.js для выполнения запросов API преобразования речи в текст. Как и любая другая учетная запись пользователя, учетная запись службы представлена ​​адресом электронной почты. В этом разделе вы будете использовать Cloud SDK для создания учетной записи службы, а затем создадите учетные данные, которые вам понадобятся для аутентификации в качестве учетной записи службы.

Сначала установите переменную среды с вашим PROJECT_ID, которую вы будете использовать в этой лаборатории кода. Если вы используете Cloud Shell, она будет установлена ​​для вас:

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

Затем создайте новую учетную запись службы для доступа к API преобразования речи в текст, используя:

gcloud iam service-accounts create my-speech-to-text-sa \
  --display-name "my speech-to-text codelab service account"

Затем создайте учетные данные, которые ваш код Node.js будет использовать для входа в систему в качестве новой учетной записи службы. Создайте эти учетные данные и сохраните их как файл JSON ~/key.json с помощью следующей команды:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account  my-speech-to-text-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

Наконец, установите переменную среды GOOGLE_APPLICATION_CREDENTIALS , которая используется библиотекой Node.js API преобразования речи в текст, описанной на следующем шаге, чтобы найти ваши учетные данные. В переменной среды должен быть установлен полный путь к созданному вами JSON-файлу учетных данных, используя:

export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

Подробнее об аутентификации API преобразования речи в текст можно прочитать здесь.

5. Установите клиентскую библиотеку Google Cloud Speech-to-Text API для Node.js.

Сначала создайте проект, который вы будете использовать для запуска этой лаборатории API преобразования речи в текст, инициализируйте новый пакет Node.js в выбранной вами папке:

npm init

NPM задает несколько вопросов о конфигурации проекта, например об имени и версии. Для каждого вопроса нажмите ENTER чтобы принять значения по умолчанию. Точкой входа по умолчанию является файл с именем index.js .

Затем установите в проект библиотеку Google Cloud Speech:

npm install --save @google-cloud/speech

Дополнительные инструкции по настройке разработки Node.js для Google Cloud см. в Руководстве по установке .

Теперь вы готовы использовать API преобразования речи в текст!

6. Транскрипция аудиофайлов

В этом разделе вы расшифруете предварительно записанный аудиофайл на английском языке. Аудиофайл доступен в Google Cloud Storage.

Перейдите к файлу index.js внутри и замените код следующим:

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
  const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

  // The audio file's encoding, sample rate in hertz, and BCP-47 language code
  const audio = {
    uri: gcsUri,
  };
  const config = {
    encoding: 'LINEAR16',
    sampleRateHertz: 16000,
    languageCode: 'en-US',
  };
  const request = {
    audio: audio,
    config: config,
  };

  // Detects speech in the audio file
  const [response] = await client.recognize(request);
  const transcription = response.results
      .map(result => result.alternatives[0].transcript)
      .join('\n');
  console.log(`Transcription: ${transcription}`);
}

quickstart();

Уделите минуту или две, чтобы изучить код и увидеть, что он используется для расшифровки аудиофайла*.*

Параметр Encoding сообщает API, какой тип кодирования аудио вы используете для аудиофайла. Flac — это тип кодировки для файлов .raw (более подробную информацию см. в документации по типу кодировки).

В объекте RecognitionAudio вы можете передать API либо uri нашего аудиофайла в облачном хранилище, либо локальный путь к аудиофайлу. Здесь мы используем URI Cloud Storage.

Запустите программу:

node .

Вы должны увидеть следующий вывод:

how old is the Brooklyn Bridge

7. Расшифровка с временными метками слов

Функция преобразования речи в текст может определять смещение времени (временную метку) транскрибируемого аудио. Смещения по времени показывают начало и конец каждого произнесенного слова в поставляемом аудио. Значение смещения времени представляет собой количество времени, прошедшее с начала звука, с шагом 100 мс.

Перейдите к файлу index.js внутри и замените код следующим:

const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
  const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

  // The audio file's encoding, sample rate in hertz, and BCP-47 language code
  const audio = {
    uri: gcsUri,
  };
  const config = {
    encoding: 'LINEAR16',
    sampleRateHertz: 16000,
    languageCode: 'en-US',
    enableWordTimeOffsets: true,
  };
  const request = {
    audio: audio,
    config: config,
  };

  // Detects speech in the audio file
  const [response] = await client.recognize(request);
  response.results.forEach((result) => {
    result.alternatives.forEach((alternative) => {
      console.log(`Transcript: ${alternative.transcript}`);
      console.log(`Word details:`);
      console.log(` Word count ${alternative.words.length}`);
      alternative.words.forEach((item) => {
        console.log(`  ${item.word}`);
        const s = parseInt(item.startTime.seconds) +
         item.startTime.nanos/1000000000;
        console.log(`   WordStartTime: ${s}s`);
        const e = parseInt(item.endTime.seconds) +
        item.endTime.nanos/1000000000;
        console.log(`   WordEndTime: ${e}s`);
      });
    });
  });
}

quickstart();

Уделите минуту или две, чтобы изучить код и увидеть, что он используется для расшифровки аудиофайла с временными метками слов*.* Параметр EnableWordTimeOffsets сообщает API о необходимости включения смещений времени (более подробную информацию см. в документе ).

Запустите программу еще раз:

node .

Вы должны увидеть следующий вывод:

Transcript: how old is the Brooklyn Bridge
Word details:
 Word count 6
  how
   WordStartTime: 0s
   WordEndTime: 0.3s
  old
   WordStartTime: 0.3s
   WordEndTime: 0.6s
  is
   WordStartTime: 0.6s
   WordEndTime: 0.8s
  the
   WordStartTime: 0.8s
   WordEndTime: 0.9s
  Brooklyn
   WordStartTime: 0.9s
   WordEndTime: 1.1s
  Bridge
   WordStartTime: 1.1s
   WordEndTime: 1.4s

8. Транскрипция разных языков

API преобразования речи в текст поддерживает транскрипцию более чем на 100 языках! Список поддерживаемых языков вы можете найти здесь .

В этом разделе вы расшифруете заранее записанный аудиофайл на французском языке. Аудиофайл доступен в Google Cloud Storage.

Перейдите к файлу index.js внутри и замените код следующим:

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
  const gcsUri = 'gs://cloud-samples-data/speech/corbeau_renard.flac';

  // The audio file's encoding, sample rate in hertz, and BCP-47 language code
  const audio = {
    uri: gcsUri,
  };
  const config = {
    encoding: 'FLAC',
    languageCode: 'fr-FR',
  };
  const request = {
    audio: audio,
    config: config,
  };

  // Detects speech in the audio file
  const [response] = await client.recognize(request);
  const transcription = response.results
      .map((result) => result.alternatives[0].transcript)
      .join('\n');
  console.log(`Transcription: ${transcription}`);
}

quickstart();

Запустите программу еще раз, и вы должны увидеть следующий вывод:

maître corbeau sur un arbre perché tenait en son bec un fromage

Это фраза из популярной французской детской сказки .

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

9. Поздравляем!

Вы узнали, как использовать API преобразования речи в текст с помощью Node.js для выполнения различных видов транскрипции аудиофайлов!

Очистить

Чтобы избежать списания средств с вашей учетной записи Google Cloud Platform за ресурсы, используемые в этом кратком руководстве:

  • Перейдите в консоль облачной платформы .
  • Выберите проект, который хотите закрыть, затем нажмите «Удалить» вверху: это запланирует удаление проекта.

Узнать больше

Лицензия

Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.