Обзор

В этом посте вы развернете на своем локальном компьютере простое веб-приложение транскрипции в реальном времени с использованием React (Javascript) и Azure Speech to Text.

Приложение будет использовать микрофон вашего компьютера для захвата аудиовхода, который затем будет транскрибироваться в режиме реального времени с помощью Azure Speech to Text.

Расшифрованный текст будет отображаться на экране вашего компьютера по мере его создания. Вы также сможете скачать транскрипцию в виде текстового файла.

Мы будем использовать код из этого репозитория образцов Azure.

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

Пожалуйста, помните: если вы решите развернуть его на сервере, помните, что вы должны его защитить.

Зачем мы это делаем?

На днях я сказал кое-что, что кто-то в шутку назвал принципом Сильвы: «Отличному ИИ нужен отличный пользовательский интерфейс».

И все разговоры об OpenAI и ChatGPT в наши дни лишь демонстрируют, насколько этот принцип верен.

Посмотрите, например, на сайт ChatGPT. Это чистый, простой, гладкий и очень эффективный. Это просто, а Простота — это высшая степень изощренности (как однажды сказал Леонардо да Винчи).

Какое отношение все это имеет к транскрипции в реальном времени? Как люди, занимающиеся искусственным интеллектом, мы всегда стремимся показать, как построить систему, чтобы наши замечательные инструменты искусственного интеллекта работали, но иногда пренебрегаем демонстрацией того, насколько легко и приятно сочетать это с великолепным пользовательским интерфейсом для полного решения.

Это обсуждение вдохновило меня (и пару других людей в Microsoft) на демонстрацию того, как легко создать отличный пользовательский интерфейс для демонстрации нашего великолепного ИИ. Наши речевые службы, Azure OpenAI и т. д.

Это будет первый из серии блогов, демонстрирующих отличный пользовательский интерфейс с транскрипцией в реальном времени. Следующие сообщения будут основываться на этом простом решении, добавляя более сложные функции, такие как повышение точности с помощью списков фраз, пользовательских моделей, переводов, вопросов и ответов с помощью ChatGPT и т. д.

Транскрипция в реальном времени

В наши дни транскрипция в реальном времени является неотъемлемой частью многих приложений. Люди хотят говорить со своими устройствами и получать ответы. Когда я прошу у OpenAI порекомендовать ресторан, мне приходится вводить информацию на клавиатуре, и мне кажется, что я беру в руки беспилотный автомобиль, минуя все технологии и управляя им вручную. Медленно и явно старомодно.

Преобразование речи в текст Azure

Azure Speech to Text — это облачное решение, предоставляемое Microsoft Azure, которое позволяет разработчикам преобразовывать речь в текст в режиме реального времени. В нем используются наши проверенные модели на основе трансформаторов, которые расшифровывают речь с высокой точностью и малой задержкой. Azure Speech to Text также поддерживает пользовательские модели и позволяет разработчикам транскрибировать речь на нескольких языках.

Почему девконтейнеры?

Devcontainers — это расширение с открытым исходным кодом, предоставленное Microsoft, которое позволяет разработчикам создавать среду разработки, согласованную на разных платформах.

Devcontainers гарантирует, что все необходимые зависимости будут установлены в среде разработки, что избавит разработчиков от необходимости устанавливать зависимости на свой локальный компьютер.

Если вы никогда раньше не использовали Devcontainer, это будет отличным и простым введением. Вы установите его, просто выполнив следующие шаги.

Начиная

Ладно, хватит разговоров. Давайте приступим к работе.

Предпосылки

Для начала вам потребуется следующее на вашем ПК с Windows/Mac/Linux:

  • Visual Studio Code (если у вас его нет, вы можете установить его отсюда)
  • Docker Desktop (если у вас его нет, вы можете установить его отсюда)
  • Git: (если у вас его нет, вы можете установить его отсюда)

В качестве альтернативы, если вы не хотите ничего устанавливать на свой локальный компьютер, вы можете использовать Github Codespace. github Codespace делает еще один шаг вперед с devcontainer — запускает devcontainer в облаке.

(Вы можете бесплатно начать работу с Codespaces здесь: GitHub Codespaces)

Предоставление Azure Cognitive Services

Вам потребуется подписка Azure. Если у вас его нет, вы можете создать бесплатную учетную запись.

Получив подписку Azure, вам потребуется создать экземпляр Azure Cognitive Services.

Для этого нажмите на эту ссылку Развернуть в Azure и следуйте всем инструкциям.

После завершения развертывания запишите значения «SpeechServiceEndpoint» и «SpeechServiceKey».

Клонировать репозиторий

Если вы еще этого не сделали, клонируйте репозиторий с https://github.com/Azure-Samples/real-time-transcription-simple и откройте его с помощью кода Visual Studio (локально на своем ПК или на Github). Кодовое пространство).

Если вы работаете на своем ПК, вы получите подобное сообщение в правом нижнем углу экрана.

Нажмите Повторно открыть в контейнере, чтобы открыть контейнер разработки.

Это создаст контейнер Docker со всеми необходимыми зависимостями для проекта и перезапустит Visual Studio Code с этим контейнером (и теперь вы используете Devcontainers).

Добавьте свои секреты

После установки и запуска Devcontainer вам необходимо добавить свои секреты в файл .env.

Файл .env содержит учетные данные для службы Azure Speech to Text.

Чтобы добавить свои секреты, выполните следующие действия:

Создайте файл .env. В терминале кода Visual Studio введите следующую команду в терминале кода Visual Studio:

cd webapp 
cp env-template .env

Обновите файл .env, введя учетные данные для Azure Cognitive Services (и, конечно же, сохраните его):

REACT_APP_COG_SERVICE_KEY=<your congnitive service key>
REACT_APP_COG_SERVICE_LOCATION=<your cognitive service region>

Запуск веб-приложения локально

После добавления секретов вы можете запустить веб-приложение, введя следующую команду в терминале Visual Studio Code:

cd webapp 
yarn start

Это запустит веб-приложение на вашем локальном компьютере и перенаправит на него порт 3000.

Теперь вы можете открыть браузер и перейти к http://localhost:3000/

Вы увидите что-то вроде этого:

Нажмите Старт, чтобы начать расшифровку (логотип начнет вращаться, напоминая вам, что вы расшифровываете).

Говорите по-английски в микрофон, и транскрипция будет отображаться в веб-приложении в режиме реального времени.

Нажмите Стоп, чтобы остановить транскрипцию.

Нажмите Экспорт, чтобы загрузить расшифровку.

Под капотом

Приложение использует функцию непрерывного распознавания Azure Speech to Text, которая позволяет службе расшифровывать речь в режиме реального времени по мере ее произнесения.

Волшебство происходит в этом файле: https://github.com/Azure-Samples/real-time-transcription-simple/blob/main/webapp/src/Components/Transcription.js

В этом коде мы определяем конфигурацию речи с помощью следующего кода:

const speechConfig = sdk.SpeechConfig
  .fromSubscription("YourSpeechKey", "YourSpeechRegion");

Чтобы захватить микрофон компьютера, мы используем API мультимедийных служб навигатора. Это делается при первом отображении веб-сайта с помощью этого кода:

const getMedia = async (constraints) => {
  let stream = null
  try {
    stream = await navigator.mediaDevices.getUserMedia(constraints)
    // stream is then passed to the recognizer
  } catch (err) {
    /* handle the error */
    alert(err)
    console.log(err)
  }
}

Мы определяем конфигурацию аудио для чтения потока, определенного выше. Это делается с помощью такого кода:

// configure Azure STT to listen to an audio Stream
const audioConfig = AudioConfig.fromStreamInput(stream)

Затем объединяем все это в один распознаватель:

const recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

И создайте обратные вызовы, когда выполняется непрерывное распознавание:

recognizer.recognizing = (s, e) => {
  // uncomment to debug
  // console.log(`RECOGNIZING: Text=${e.result.text}`)
  setRecognisingText(e.result.text)
  textRef.current.scrollTop = textRef.current.scrollHeight
}
recognizer.recognized = (s, e) => {
  setRecognisingText("")
  if (e.result.reason === sdk.ResultReason.RecognizedSpeech) {
    // uncomment to debug
    // console.log(`RECOGNIZED: Text=${e.result.text}`)
    setRecognisedText((recognisedText) => {
      if (recognisedText === '') {
        return `${e.result.text} `
      }
      else {
        return `${recognisedText}${e.result.text} `
      }
    })
    textRef.current.scrollTop = textRef.current.scrollHeight
  }
  else if (e.result.reason === sdk.ResultReason.NoMatch) {
    console.log("NOMATCH: Speech could not be recognized.")
  }
}
recognizer.canceled = (s, e) => {
  console.log(`CANCELED: Reason=${e.reason}`)
  if (e.reason === sdk.CancellationReason.Error) {
    console.log(`"CANCELED: ErrorCode=${e.errorCode}`)
    console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`)
    console.log("CANCELED: Did you set the speech resource key and region values?")
  }
  recognizer.stopContinuousRecognitionAsync()
}
recognizer.sessionStopped = (s, e) => {
  console.log("\n    Session stopped event.")
  recognizer.stopContinuousRecognitionAsync()
}

Затем, всякий раз, когда мы хотим запустить распознаватель, мы запускаем:

recognizer.startContinuousRecognitionAsync()

И, чтобы остановить его, мы запускаем:

recognizer.stopContinuousRecognitionAsync()

Вы можете найти справочную информацию о том, как это работает, в разделе Azure Speech to Text — использование непрерывного распознавания.

Заключение

И вот что ChatGPT говорит об этой работе:

Таким образом, использование служб транскрипции речи Azure меняет правила игры, когда речь идет об анализе данных с помощью OpenAI.

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

Представьте, например, что мы хотим расшифровать эпизод подкаста и проанализировать настроение говорящих. Такой анализ было бы трудно, если вообще возможно, провести вручную, не тратя уйму времени на прослушивание и ведение заметок. Так что да, транскрипция речи — довольно крутой инструмент, который должен быть в вашем наборе инструментов для анализа данных!

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