Wyodrębnianie tekstu z pliku audio za pomocą usługi Microsoft Azure Speech

Strona zaktualizowana :
Data utworzenia strony :

Środowisko sprawdzania operacji

Usługi głosowe Microsoft Azure
  • Edycja z lipca 2022 r.
Visual Studio
  • Program Visual Studio 2022
Platforma .NET
  • 6.0

Warunek wstępny

Zanim będzie można sprawdzić, czy te wskazówki działają, należy:

Informacje o przykładowych materiałach

Pliki audio wypożyczamy z poniższej strony. Nie jest on uwzględniony w przykładowym kodzie.

Linki zewnętrzne

Na początku

Na przykład, aby nagrać zawartość spotkania itp., Treść rozmowy jest nagrywana, a później w celu utworzenia protokołu spotkania nagrany dźwięk jest słyszany i transkrybowany na tekst. Łatwo jednak sobie wyobrazić, że bardzo kłopotliwe jest zapisanie treści rozmowy w zdaniu.

Poniżej opisano, jak używać usługi Microsoft Azure Speech do automatycznego eksportowania i wyprowadzania danych mowy do tekstu. W poprzednim przykładzie jest to nagranie spotkania, ale w tej poradzie jest wyodrębniane z pliku audio, dzięki czemu można je zastosować do wszystkiego, co zawiera zawartość konwersacji.

Również tym razem mówimy o transkrypcji na tekst, Możesz także użyć usługi głosowej Microsoft Azure do konwersji i tłumaczenia podczas nagrywania.

Informacje o opłatach

Tym razem skorzystamy z planu Free, więc nawet jeśli spróbujesz działać, nie zostaniesz obciążony. Jednak bezpłatny plan ma limity czasu i znaków, więc jeśli potrzebujesz więcej konwersji po faktycznym uruchomieniu, zmień na płatny plan.

Zapoznaj się z poniższą oficjalną stroną w celu uzyskania cen. Ponieważ jest to usługa w chmurze, opłata może się zmieniać w zależności od sezonu.

Uzyskiwanie dostępu do witryny Microsoft Azure Portal

Uzyskaj dostęp do następującego adresu URL w przeglądarce internetowej:

Jeśli jesteś już zalogowany, wszystko jest gotowe. Jeśli nie jesteś jeszcze zalogowany, zostanie wyświetlony następujący ekran, więc zaloguj się.

Po zalogowaniu zostanie wyświetlony następujący ekran. W zależności od ustawionego projektu wyświetlacz może się różnić.

Tworzenie usługi głosowej na platformie Microsoft Azure

Jeśli wpiszesz "głos" w polu wprowadzania wyszukiwania nad portalem, pojawi się "usługa głosowa", więc wybierz ją.

「| usług Cognitive Services Po wyświetleniu ekranu "Usługa głosowa" wybierz "Utwórz".

Zostanie otwarty ekran "Create Speech Services", więc wprowadź niezbędne elementy.

Podstawy

Przykład wejściowej
zawartościelementów
subskrypcja Wybierz subskrypcje, za które chcesz zapłacić. Nawet jeśli jest bezpłatny, zawsze musisz powiązać go z jakąś subskrypcją.
Grupy zasobów Określa, do której grupy zasobów ma należeć usługa głosowa, która ma zostać utworzona. Jeśli jeszcze go nie utworzyłeś, utwórz go z "Nowego" poniżej. Grupy zasobów można traktować jako grupy podczas tworzenia różnych usług.
Region Wybierz w pobliżu miejsca, w którym możesz go używać najczęściej. Należy jednak pamiętać, że ceny mogą się różnić w zależności od regionu. Japonia Wschodnia
nazwa Dowolna nazwa tej usługi głosowej. Jeśli tworzysz więcej niż jedną usługę głosową, upewnij się, że nazwa jest opisowa. Ta nazwa jest globalna i unikatowa, więc nie można używać nazwy używanej w innym miejscu. SpeechToText-Test
Warstwa cenowa Jeśli chcesz go używać za darmo, wybierz "Free F0". Jeśli chcesz go używać za opłatą, wybierz inny plan. Oczywiście istnieją ograniczenia, jeśli jest bezpłatny. Darmowe F0

Po wprowadzeniu wybierz Dalej: Sieć > poniżej.

sieć

Przykład wejściowej
zawartościelementów
rodzaj Określa zakres, z którego ta usługa głosowa jest dostępna. Jeśli chcesz mieć dostęp do niego z dowolnego miejsca bez żadnych szczegółowych ustawień, wybierz "W tym Internet...". "Można uzyskać dostęp z dowolnego miejsca" oznacza również "każdy może uzyskać do niego dostęp", ale w rzeczywistości tylko ci, którzy mają "klucz" do nabycia po tym, mogą uzyskać do niego dostęp, więc nie jest to tak duży problem pod względem bezpieczeństwa. Łącznie z Internetem...

Po wprowadzeniu go wybierz Dalej: Tożsamość > poniżej.

Tożsamość

Przykład wejściowej
zawartościelementów
Identyfikator zarządzany przypisany do systemu Tym razem korzystam z samej usługi głosowej, więc dobrze ją wyłączyć. od
Identyfikator zarządzany przypisany przez użytkownika Nie muszę go dodawać, ponieważ tym razem nie tworzę użytkownika. bez

Po wprowadzeniu go wybierz Dalej: Oznacz > poniżej.

znacznik

Ponieważ tag nie jest używany tym razem, nie jest ustawiany.

Po wprowadzeniu wybierz Dalej: Przejrzyj i utwórz > poniżej.

Przejrzyj i utwórz

Jeśli nie ma problemów z zawartością wejściową, wyświetlany jest komunikat "Walidacja powiodła się". Jeśli wystąpi problem, zostanie wyświetlony komunikat o błędzie, więc wróć i ustaw go ponownie.

Jeśli nie ma problemu z zawartością wejściową, kliknij przycisk "Utwórz". Następnie rozpocznie się wdrażanie.

Po chwili wdrożenie zostanie zakończone i zostanie wyświetlony następujący ekran. Nazwa wdrożenia jest długa, ale nie musisz się o nią martwić, ponieważ jest tymczasowa we wdrożeniu.

Możesz kliknąć przycisk Przejdź do zasobu, aby sprawdzić, czy usługa głosowa została utworzona.

Generowanie i pobieranie kluczy

Klucz uwierzytelniania jest wymagany do uzyskania dostępu do tej usługi głosowej z klienta. Ponieważ jest on dostępny tylko dla programu, który ma ten klucz, konieczne jest zapobieganie kradzieży tego klucza przez stronę trzecią.

"Klient" odnosi się tutaj do wszystkich programów korzystających z platformy Microsoft Azure, takich jak aplikacje klasyczne, aplikacje na smartfony i aplikacje internetowe.

Aby uzyskać klucz, przejdź do utworzonej usługi głosowej. Dostęp do niego można uzyskać z pulpitów nawigacyjnych, grup zasobów i tak dalej.

Po otwarciu strony Usługi głosowe wybierz pozycję Klucze i punkty końcowe z menu po lewej stronie.

Następnie otworzy się strona "Klucz i punkt końcowy" i zostaną wyświetlone elementy "Klucz 1", "Klucz 2", "Lokalizacja / region" i "Punkt końcowy".

Oba elementy są konieczne, ale "Key 2" jest ramką zapasową, więc nie jest używany w większości przypadków.

Zanotuj każdą wartość. Jak wspomniano w opisie, proszę nie dzielić się kluczem ze stronami deweloperskimi niespodziewanie.

Jeśli klucz wycieknie, kliknij "Ponownie wygeneruj klucz 1" powyżej, aby wydać nowy klucz. Oczywiście należy pamiętać, że w takim przypadku poprzedni klucz nie będzie już użyteczny.

Używanie usługi mowy z programu do wyodrębniania tekstu z mowy

Od teraz korzystanie z usługi głosowej będzie się zmieniać w zależności od używanego programu. Tym razem uzyskam do niego dostęp z aplikacji klasycznej .NET, ale jeśli używasz innej struktury, spróbuj użyć jej w Internecie. Oficjalna strona internetowa zawiera również instrukcje, jak z niej korzystać w kilku językach.

Tym razem tworzymy aplikację klasyczną WPF w programie Visual Studio 2022. W przypadku Visual Studio Code jest to trochę kłopotliwe, ponieważ nie ma projektanta, ale jeśli wyodrębnisz tylko część programu, możliwe jest użycie go w aplikacji konsolowej lub aplikacji internetowej.

Utwórz projekt

Uruchom program Visual Studio 2022.

Wybierz pozycję Utwórz nowy projekt.

Wybierz opcję Aplikacja WPF.

Nazwa i lokalizacja projektu są dowolne. Po wprowadzeniu wybierz Dalej.

Wersja nazywa się ". NET 6,0". Po ustawieniu kliknij przycisk "Utwórz".

Ustawienia NuGet

Możesz utworzyć dostęp do interfejsu API platformy Microsoft Azure od podstaw, ale łatwiej jest z niego korzystać, ponieważ masz już oficjalną bibliotekę.

Kliknij prawym przyciskiem myszy pozycję Zależności dla rozwiązania i wybierz polecenie Zarządzaj pakietami NuGet.

Wybierz kartę "Przeglądaj", wprowadź "Microsoft.CognitiveServices.Speech" w polu wprowadzania wyszukiwania, a zostanie wyświetlona lista, więc wybierz "Microsoft.CognitiveServices.Speech" i kliknij przycisk Zainstaluj.

Kliknij przycisk OK.

Wybierz opcję Zgadzam się.

Gdy skończysz, zostanie on dodany do pakietu.

Tworzenie interfejsu użytkownika

Tym razem określimy plik WAV zawierający dźwięk i wyodrębnimy zawartość konwersacji na tekst za pomocą interfejsu API mowy i wyświetlimy go. Na razie pozostaw środowisko zależne od pola wejściowego, abyś mógł użyć kodu poprzez kopiowanie i wklejanie.

Ekran powinien wyglądać tak: Ponieważ uwzględniona jest tylko minimalna kwota, jeśli chcesz na przykład dodać przycisk odwołania do pliku, zaimplementuj go samodzielnie.

MainWindow.xaml jest następujący:

<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>

Tworzenie procesu

Program ExecuteButton_Click jest opakowany w metody. Jeśli chcesz go używać w innych frameworkach, przepisz ten kod jako podstawę.

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("処理が終了しました。");
    }
  }
}

Ponieważ wyjaśnienie jest prawie napisane w kodzie, nie wyjaśnię szczegółowo, ale jeśli podniesiesz ważną część, będzie ona następująca.

  • SpeechConfig Konfigurowanie usług głosowych w
  • AudioConfig Konfigurowanie danych głosowych w
  • SpeechRecognizer Generowanie klasy przetwarzania w
  • Dane mowy są analizowane jeden po drugim, a ukończony tekst SpeechRecognizer.Recognized jest przekazywany w zdarzeniu od czasu do czasu.
  • Jeśli przetwarzanie zostanie zakończone z jakiegoś powodu, SpeechRecognizer.Canceled wywoływane jest zdarzenie
  • Rozpoczęcie przetwarzania SpeechRecognizer.StartContinuousRecognitionAsync nazywa się metodą, a zakończenie przetwarzania SpeechRecognizer.StopContinuousRecognitionAsync nazywa się metodą.

Kontrola operacji

Po utworzeniu programu wykonaj go, wprowadź niezbędne elementy i naciśnij przycisk wykonywania. Jeśli określono poprawny plik audio, dźwięk powinien być odtwarzany, a tekst powinien być wyodrębniany jeden po drugim przy użyciu usługi głosowej Microsoft Azure za kulisami.

System ekstrakcji nie jest doskonały, ponieważ zależy od usługi głosowej Microsoft Azure, Jeśli głos jest cichy i mówi wyraźnie, myślę, że zostanie wydobyty ze znaczną dokładnością. Ponieważ jest to usługa w chmurze, nawet jeśli dokładność nie jest teraz tak wysoka, może być coraz lepiej, zanim się zorientujesz, więc łatwo jest nie robić nic w tym obszarze.