Використання служби мовлення Microsoft Azure для вилучення тексту з аудіофайлу

Сторінка оновлюється :
Дата створення сторінки :

Середовище перевірки роботи

Голосові служби Microsoft Azure
  • Липневе видання 2022 року
Візуальна студія
  • Візуальна студія 2022
.NET
  • 6.0

Передумовою

Перш ніж переконатися, що ці поради працюють, потрібно виконати наведені нижче дії.

Про зразкових матеріалах

Ми запозичуємо аудіофайли з наступного сайту. Він не входить в зразок коду.

Зовнішні посилання

На перших порах

Як приклад, для того, щоб записати зміст зустрічі і т. Д., Записується зміст бесіди, а в подальшому з метою створення протоколу зустрічі заслуховується записаний аудіо і транскрибується в текст. Однак неважко уявити, що записувати зміст розмови в пропозицію дуже клопітно.

Ось як за допомогою служби мовлення Microsoft Azure можна автоматично експортувати та виводити дані мовлення в текст. У попередньому прикладі це запис зустрічі, але в цій пораді він витягується з аудіофайлу, тому його можна застосувати до всього, що містить вміст розмови.

Також на цей раз мова йде про транскрибування в текст, Ви також можете використовувати голосову службу Microsoft Azure для конвертації та перекладу під час запису.

Про збори

Цього разу ми скористаємося безкоштовним планом, тому навіть якщо ви спробуєте працювати, з вас не стягуватиметься плата. Однак безкоштовний план має обмеження за часом і характером, тому, якщо вам потрібно більше конверсій після фактичного його використання, будь ласка, перейдіть на платний план.

Будь ласка, зверніться до наступної офіційної сторінки щодо ціноутворення. Оскільки це хмарний сервіс, плата може коливатися в залежності від сезону.

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

Скористайтеся такою URL-адресою у веб-браузері:

Якщо ви вже ввійшли, усе готово. Якщо ви ще не ввійшли в систему, відобразиться наступний екран, тому, будь ласка, увійдіть.

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

Створення голосової служби в Microsoft Azure

Якщо в поле введення пошуку над порталом ввести "голос", вийде "голосовий сервіс", тому виберіть його.

「| когнітивних послуг Коли відобразиться екран «Голосовий сервіс», виберіть «Створити».

Відкриється екран "Створення служб мовлення", тому введіть необхідні пункти.

Базові фрази

Приклад вхідного елементів
вмісту
абонемент Виберіть передплати, за які потрібно заплатити. Навіть якщо це безкоштовно, завжди потрібно прив'язувати його до якоїсь підписки.
Групи ресурсів Визначає, до якої групи ресурсів має бути включена створена голосова служба. Якщо ви ще не створили його, будь ласка, створіть його з "Новий" нижче. Групи ресурсів можна розглядати як групування під час створення різних служб.
Область Виберіть поблизу місця, де ви, можливо, використовуєте його найчастіше. Однак зверніть увагу, що ціни можуть відрізнятися в залежності від регіону. Схід Японії
Ім'я Будь-яка назва для цього голосового сервісу. Якщо ви створюєте більше однієї голосової служби, будь ласка, переконайтеся, що назва описова. Це ім'я глобальне і унікальне, тому не можна використовувати ім'я, яке використовується в іншому місці. SpeechToText-Test
Ціновий рівень Якщо ви хочете використовувати його безкоштовно, виберіть «Безкоштовний F0». Якщо ви хочете використовувати його за окрему плату, виберіть інший план. Звичайно, є обмеження, якщо вона безкоштовна. Безкоштовно F0

Після введення натисніть кнопку Далі: Мережевий > нижче.

мережа

Приклад вхідного елементів
вмісту
вид Вказує діапазон, з якого доступна ця голосова послуга. Якщо ви хочете мати доступ до нього з будь-якого місця без будь-яких детальних налаштувань, виберіть "Включаючи Інтернет...". "Можна отримати доступ з будь-якого місця" також означає "будь-хто може отримати до нього доступ", але насправді доступ до нього можуть отримати лише ті, у кого є "ключ", який потрібно придбати після цього, тому це не стільки проблема з точки зору безпеки. У тому числі інтернет...

Ввівши його, натисніть кнопку Далі: Ідентифікаційний > нижче.

Ідентичність

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

Після введення натисніть кнопку Далі: Тег > нижче.

Тег

Так як в цей раз тег не використовується, він не встановлюється.

Після введення натисніть кнопку Далі: Переглянути та створити > нижче.

Перегляд і створення

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

Якщо проблем з вхідним вмістом немає, натисніть кнопку "Створити". Потім почнеться розгортання.

Через деякий час розгортання завершується і виводиться наступний екран. Ім'я розгортання довге, але вам не потрібно турбуватися про це, оскільки воно тимчасове в розгортанні.

Ви можете натиснути кнопку Перейти до ресурсу, щоб переконатися, що голосова служба створена.

Генерація та отримання ключів

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

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

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

Коли відкриється сторінка Голосові служби, виберіть у меню ліворуч пункт Клавіші та Кінцеві точки.

Потім відкриється сторінка «Ключ і кінцева точка» і відобразяться пункти «Ключ 1», «Ключ 2», «Місцезнаходження/ регіон» і «Кінцева точка».

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

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

Якщо ключ просочився, натисніть «Відновити ключ 1» вище, щоб видати новий ключ. Звичайно, майте на увазі, що в цьому випадку попередній ключ вже не буде придатний до використання.

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

Відтепер використання голосового сервісу буде змінюватися в залежності від використовуваної програми. Цього разу я отримаю доступ до нього з настільної програми .NET, але якщо ви використовуєте інший фреймворк, спробуйте використовувати його в Інтернеті. На офіційному сайті також є інструкція, як користуватися ним на декількох мовах.

Цього разу ми створюємо настільну програму WPF у Visual Studio 2022. У випадку з Visual Studio Code це трохи клопітно, оскільки немає дизайнера, але якщо ви витягнете лише частину програми, її можна використовувати в консольному додатку або веб-додатку.

Створити проект

Старт Visual Studio 2022.

Виберіть створити новий проект.

Виберіть додаток WPF.

Назва проекту і місце розташування довільні. Після введення натисніть кнопку Далі.

Версія називається ". НЕТ 6,0". Після установки натисніть кнопку "Створити".

Налаштування NuGet

Ви можете створити доступ до API Microsoft Azure з нуля, але користуватися ним простіше, оскільки у вас вже є офіційна бібліотека.

Клацніть правою кнопкою миші «Залежності» для рішення та виберіть «Керування nuGet-пакетами».

Виберіть вкладку "Огляд", введіть в поле введення пошуку "Microsoft.CognitiveServices.Speech", і відобразиться список, тому виберіть "Microsoft.CognitiveServices.Speech" і натисніть кнопку Встановити.

Натисніть кнопку OK.

Виберіть, я згоден.

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

Створення інтерфейсу користувача

Цього разу ми вкажемо файл WAV, що містить аудіо, і витягнемо вміст розмови в текст за допомогою Speech 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 вся загорнута в методи. Якщо ви хочете використовувати його в інших фреймворках, перепишіть цей код в якості бази.

Головнавікна.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, Якщо голос тихий і говорить чітко, я думаю, що він буде витягнутий зі значною точністю. Оскільки це хмарний сервіс, навіть якщо точність зараз не така висока, вона може стати кращою, перш ніж ви її дізнаєтеся, тому легко нічого не робити в цій області.