Използвайте услугата Microsoft Azure Speech, за да извлечете текст от аудио файл

Страницата се актуализира :
Дата на създаване на страница :

Среда за проверка на работата

Microsoft Azure Voice Services
  • Издание юли 2022 г.
Визуален студиат
  • Визуално студио 2022
.НЕТ
  • 6.0

Предпоставка

Преди да можете да потвърдите, че тези съвети работят, трябва да:

За примерни материали

Заемаме аудио файлове от следния сайт. Тя не е включена в примерния код.

Външни връзки

Отначало

Например, за да се запише съдържанието на събранието и т.н., съдържанието на разговора се записва, а по-късно, за да се създадат протоколите от събранието, записаното аудио се чува и транскрибира в текст. Лесно е обаче да си представим, че е много обезпокоително да се запише съдържанието на разговора в изречение.

Ето как да използвате услугата Microsoft Azure Speech за автоматично експортиране и извеждане на данни от речта в текст. В предишния пример това е запис на събранието, но в този Съвети се извлича от аудио файла, така че може да се приложи към всичко, което съдържа съдържание на разговор.

Също така, този път говорим за транскрибиране на текст, Можете също така да използвате гласовата услуга Microsoft Azure, за да конвертирате и превеждате по време на запис.

За таксите

Този път ще използваме безплатния план, така че дори и да се опитате да работите, няма да бъдете таксувани. Въпреки това, Безплатният план има ограничения във времето и характера, така че ако имате нужда от повече преобразуване, след като действително го оперирате, моля, преминете към платен план.

Моля, вижте следната официална страница за ценообразуване. Тъй като това е облачна услуга, таксата може да варира в зависимост от сезона.

Достъп до портала на Microsoft Azure

Достъп до следния URL адрес в уеб браузър:

Ако вече сте влезли в профила си, сте готови. Ако все още не сте влезли в профила си, ще бъде показан следният екран, така че моля, влезте в профила си.

Когато влезете, ще се покаже следният екран. В зависимост от дизайна, който поставяте, дисплеят може да бъде различен.

Създаване на гласова услуга в Microsoft Azure

Ако въведете "глас" в полето за въвеждане на търсене над портала, ще излезе "гласова услуга", така че го изберете.

「Когнитивни услуги | Когато се показва екранът "Гласова услуга", изберете "Създаване".

Екранът "Създаване на речеви услуги" се отваря, така че въведете необходимите елементи.

Основни

Пример за входно
съдържание на елементите
абонамент Изберете абонаментите, за които искате да платите. Дори и да е безплатно, винаги трябва да го обвързвате с някакъв абонамент.
Ресурсни групи Посочва в коя ресурсна група трябва да включва гласовата услуга, която трябва да бъде създадена. Ако все още не сте създали такъв, моля, създайте един от "Нов" по-долу. Можете да мислите за ресурсни групи като групи, когато създавате различни услуги.
Регион Изберете близо до място, където може да го използвате най-често. Въпреки това, моля, имайте предвид, че цените могат да варират в зависимост от региона. Япония Изток
Име Всяко име за тази гласова услуга. Ако създавате повече от една гласова услуга, моля, уверете се, че името е описателно. Това име е глобално и уникално, така че не можете да използвате име, което се използва другаде. РечТоТекст-тест
Ценови ред Ако искате да го използвате безплатно, изберете "Free 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 файл, съдържащ аудио, и ще извлечем съдържанието на разговора в текст с 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 е завършена в методи. Ако искате да го използвате в други рамки, пренапишете този код като база.

МайнПрозорец.ксамл.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, Ако гласът е тих и говори ясно, мисля, че ще бъде извлечен със значителна точност. Тъй като това е облачна услуга, дори ако точността не е толкова висока сега, може да става все по-добре, преди да го знаете, така че е лесно да не правите нищо в тази област.