Использование службы речи Microsoft Azure для извлечения текста из звукового файла

Страница обновлена :
Дата создания страницы :

Среда проверки операций

Голосовые службы Microsoft Azure
  • Издание за июль 2022 года
Visual Studio
  • Visual Studio 2022
.NET
  • 6.0

предварительное условие

Прежде чем вы сможете убедиться, что эти советы работают, вам необходимо:

Об образцах материалов

Мы заимствуем аудиофайлы со следующего сайта. Он не включен в пример кода.

Внешние ссылки

Сначала

Например, для того, чтобы записать содержание собрания и т.д., содержимое разговора записывается, а позже для того, чтобы создать протокол собрания, записанное аудио слышно и транскрибируется в текст. Однако легко представить, что очень хлопотно записать содержание разговора в предложение.

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

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

О сборах

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

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

Доступ к порталу Microsoft Azure

Доступ к следующему URL-адресу в веб-браузере:

Если вы уже выполнили вход, все готово. Если вы еще не выполнили вход, отобразится следующий экран, поэтому войдите в систему.

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

Создание службы голосовой связи в Microsoft Azure

Если ввести «голос» в поле ввода поиска над порталом, выйдет «голосовой сервис», поэтому выберите его.

「| когнитивных услуг Когда появится экран "Голосовая служба", выберите "Создать".

Откроется экран "Создание служб речи", поэтому введите необходимые элементы.

Основные

Пример входного
содержимого элементов
подписка Выберите подписки, за которые вы хотите платить. Даже если это бесплатно, вам всегда нужно привязать его к какой-то подписке.
Группы ресурсов Указывает, в какую группу ресурсов должна быть включена создаваемая голосовая служба. Если вы еще не создали его, пожалуйста, создайте его из «Нового» ниже. Группы ресурсов можно рассматривать как группы при создании различных служб.
Область Выберите рядом с местом, где вы можете использовать его чаще всего. Однако обратите внимание, что цены могут варьироваться в зависимости от региона. Япония Восток
имя Любое имя для этой голосовой службы. Если вы создаете более одной голосовой службы, убедитесь, что имя является описательным. Это имя является глобальным и уникальным, поэтому вы не можете использовать имя, которое используется в другом месте. SpeechToText-Test
Ценовая категория Если вы хотите использовать его бесплатно, выберите «Free F0». Если вы хотите использовать его за отдельную плату, пожалуйста, выберите другой план. Конечно, есть ограничения, если это бесплатно. Бесплатный F0

После ввода выберите Далее: Сеть > ниже.

сеть

Пример входного
содержимого элементов
добрый Задает диапазон, из которого доступна эта голосовая служба. Если вы хотите иметь доступ к нему из любого места без каких-либо подробных настроек, выберите «Включая Интернет...». «Может быть доступен из любого места» также означает «любой может получить к нему доступ», но на самом деле только те, у кого есть «ключ», который будет приобретен после этого, могут получить к нему доступ, поэтому это не такая большая проблема с точки зрения безопасности. В том числе и Интернет...

После ввода выберите Далее: Удостоверение > ниже.

Тождество

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

После ввода выберите Далее: тег > ниже.

ярлык

Поскольку на этот раз тег не используется, он не устанавливается.

После ввода нажмите кнопку Далее: Просмотр и создайте > ниже.

Просмотр и создание

Если проблем с входным содержимым нет, отображается сообщение "Проверка выполнена успешно". Если есть проблема, отобразится сообщение об ошибке, поэтому вернитесь и установите его снова.

Если с входным содержимым проблем нет, нажмите кнопку «Создать». Затем начнется развертывание.

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

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

Создание и извлечение ключей

Для доступа к этой голосовой службе от клиента требуется ключ проверки подлинности. Поскольку он доступен только программе, имеющей этот ключ, необходимо предотвратить кражу этого ключа третьей стороной.

«Клиент» здесь относится ко всем программам, использующим Microsoft Azure, таким как классические приложения, приложения для смартфонов и веб-приложения.

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

Когда откроется страница Службы голосовой связи, выберите Ключи и конечные точки в меню слева.

Затем откроется страница «Ключ и конечная точка» и отобразятся элементы «Ключ 1», «Ключ 2», «Местоположение/Регион» и «Конечная точка».

Оба элемента необходимы, но «Ключ 2» является запасным кадром, поэтому он не используется в большинстве случаев.

Запишите каждое значение. Как упоминалось в описании, пожалуйста, не делитесь ключом со сторонами разработки неожиданно.

Если ключ просочился, нажмите «Восстановить ключ 1» выше, чтобы выдать новый ключ. Конечно, имейте в виду, что в этом случае предыдущий ключ больше не будет пригоден для использования.

Использование службы распознавания речи из программы для извлечения текста из речи

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

На этот раз мы создаем классическое приложение WPF в Visual Studio 2022. В случае Visual Studio Code это немного хлопотно, потому что нет конструктора, но если вы извлекаете только программную часть, ее можно использовать в консольном приложении или веб-приложении.

Создать проект

Запустите Visual Studio 2022.

Выберите Создать новый проект.

Выберите Приложение WPF.

Имя и расположение проекта являются произвольными. После ввода нажмите кнопку Далее.

Версия называется". NET 6.0". После установки нажмите кнопку «Создать».

Параметры NuGet

Вы можете создать доступ к API Microsoft Azure с нуля, но его проще использовать, потому что у вас уже есть официальная библиотека.

Щелкните правой кнопкой мыши Зависимости решения и выберите Управление пакетами NuGet.

Выберите вкладку «Обзор», введите «Microsoft.CognitiveServices.Speech» в поле ввода поиска, и отобразится список, поэтому выберите «Microsoft.CognitiveServices.Speech» и нажмите кнопку «Установить».

Нажмите кнопку ОК.

Выберите Я согласен.

Когда вы закончите, он будет добавлен в пакет.

Создание пользовательского интерфейса

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

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

MainWindow.xaml выглядит следующим образом:

<Window x:Class="MicrosoftAzureSpeechToText.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MicrosoftAzureSpeechToText"
        mc:Ignorable="d"
        Title="Microsoft Azure の音声サービスを使用したテキスト抽出" Height="450" Width="800">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="20*"/>
      <ColumnDefinition Width="80*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Label Content="キー" Margin="4"/>
    <TextBox x:Name="KeyTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="" />
    <Label Content="場所/地域" Margin="4" Grid.Row="1"/>
    <TextBox x:Name="RegionTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="japaneast" Grid.Row="1"/>
    <Label Content="言語" Margin="4" Grid.Row="2"/>
    <TextBox x:Name="LanguageTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="ja-JP" Grid.Row="2"/>
    <Label Content="WAV ファイルパス" Margin="4" Grid.Row="3"/>
    <TextBox x:Name="WavFilePathTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="" Grid.Row="3"/>
    <Button x:Name="ExecuteButton" Content="実行" Margin="4" Grid.Row="4" Grid.ColumnSpan="2" FontSize="24" Click="ExecuteButton_Click"/>
    <Label Content="結果" Margin="4,2,4,2" Grid.Row="5"/>
    <TextBox x:Name="ResultTextBox" Margin="8" TextWrapping="Wrap" Text="" Grid.Row="6" Grid.ColumnSpan="2" VerticalScrollBarVisibility="Visible" />
  </Grid>
</Window>

Создание процесса

Программа ExecuteButton_Click полностью завернута в методы. Если вы хотите использовать его в других фреймворках, перепишите этот код в качестве основы.

MainWindow.xaml.cs

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
using System;
using System.Media;
using System.Threading.Tasks;
using System.Windows;

namespace MicrosoftAzureSpeechToText
{
  /// <summary>
  /// MainWindow.xamlのインタラクションロジック
  /// </summary>
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
    }

    private void AppendLineLog(string log)
    {
      // 非同期処理から書き込むので Dispatcher.Invoke を使用
      Dispatcher.Invoke(()=>ResultTextBox.AppendText(log + Environment.NewLine));
    }

    private async void ExecuteButton_Click(object sender, RoutedEventArgs e)
    {
      // 入力内容をテキストボックスから取得
      var key = KeyTextBox.Text;
      var region = RegionTextBox.Text;
      var lang = LanguageTextBox.Text;
      var wavFilePath = WavFilePathTextBox.Text;

      try
      {
        // 音声ファイルが指定されているか確認するため再生する
        var wavPlayer = new SoundPlayer(wavFilePath);
        wavPlayer.Play();

        var stopRecognition = new TaskCompletionSource<int>();

        // 音声サービスを構成する
        var speechConfig = SpeechConfig.FromSubscription(key, region);
        AppendLineLog($"{speechConfig.Region} で音声サービスを使用する準備ができました。");

        // 音声認識言語の指定
        // 使用できる値一覧:https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech-service/language-support?tabs=speechtotext#speech-to-text
        speechConfig.SpeechRecognitionLanguage = lang;

        // 入力を WAV ファイルとして設定
        using var audioConfig = AudioConfig.FromWavFileInput(wavFilePath);
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        // 解析結果が受信されたことを通知します。
        // このイベントは抽出が完了したものから随時発生します。
        speechRecognizer.Recognized += (s, e) =>
        {
          if (e.Result.Reason == ResultReason.RecognizedSpeech)
          {
            // 音声結果に認識されたテキストが含まれていることを示します。
            var time = TimeSpan.FromSeconds(e.Result.OffsetInTicks / 10000000).ToString(@"hh\:mm\:ss");
            var text = $"{time} {e.Result.Text}";
            AppendLineLog(text);
          }
          else if (e.Result.Reason == ResultReason.NoMatch)
          {
            // 音声を認識できなかったことを示します。
            AppendLineLog("音声を認識できませんでした。");
          }
        };

        // 音声認識が中断されたことを通知します。
        speechRecognizer.Canceled += (s, e) =>
        {
          AppendLineLog($"処理が終了しました。(Reason={e.Reason})");

          if (e.Reason == CancellationReason.Error)
          {
            AppendLineLog($"ErrorCode={e.ErrorCode}\r\n");
            AppendLineLog($"ErrorDetails={e.ErrorDetails}\r\n");
          }

          stopRecognition.TrySetResult(0);
        };

        // 継続的な処理を開始します。 StopContinuousRecognitionAsync を使用して処理を停止します。
        await speechRecognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

        // 完了するのを待ちます。Task.WaitAny を使用して、タスクをルート化してください。
        Task.WaitAny(new[] { stopRecognition.Task });

        // 処理を停止します。
        await speechRecognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
      }
      catch (Exception ex)
      {
        // 何らかの例外が発生した場合はエラー内容を出力
        AppendLineLog(ex.Message);
      }

      MessageBox.Show("処理が終了しました。");
    }
  }
}

Так как объяснение почти написано в коде, я не буду подробно объяснять, но если поднять важную часть, то она будет следующей.

  • SpeechConfig Настройка служб голосовой связи в
  • AudioConfig Настройка голосовых данных в
  • SpeechRecognizer Создать класс обработки в
  • Речевые данные анализируются один за другим, а завершенный текст SpeechRecognizer.Recognized передается в событии время от времени.
  • Если обработка по какой-либо причине завершена, SpeechRecognizer.Canceled вызывается событие
  • Начало обработки называется SpeechRecognizer.StartContinuousRecognitionAsync методом, а завершение обработки называется SpeechRecognizer.StopContinuousRecognitionAsync методом.

Проверка работы

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

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