Verwenden des Microsoft Azure Speech-Diensts zum Extrahieren von Text aus einer Audiodatei

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Umgebung für die Betriebsprüfung

Microsoft Azure-VoIP-Dienste
  • Ausgabe Juli 2022
Visual Studio
  • Visual Studio 2022
.NET
  • 6.0

Vorbedingung

Bevor Sie überprüfen können, ob diese Tipps funktionieren, müssen Sie folgende Schritte ausführen:

Allgemeine Einführung: Mustermaterialien

Wir leihen Audiodateien von der folgenden Website aus. Es ist nicht im Beispielcode enthalten.

Weblinks

Zuerst

Um beispielsweise den Inhalt des Meetings usw. aufzuzeichnen, wird der Inhalt des Gesprächs aufgezeichnet, und später, um das Protokoll des Meetings zu erstellen, wird das aufgezeichnete Audio gehört und in Text transkribiert. Es ist jedoch leicht vorstellbar, dass es sehr mühsam ist, den Inhalt des Gesprächs in einen Satz zu schreiben.

Hier erfahren Sie, wie Sie den Microsoft Azure Speech-Dienst verwenden, um Sprachdaten automatisch in Text zu exportieren und auszugeben. Im vorherigen Beispiel handelt es sich um eine Aufzeichnung der Besprechung, aber in diesen Tipps wird sie aus der Audiodatei extrahiert, sodass sie auf alles angewendet werden kann, was Unterhaltungsinhalte enthält.

Auch dieses Mal sprechen wir über die Transkription in Text, Sie können auch den Microsoft Azure-Sprachdienst verwenden, um während der Aufzeichnung zu konvertieren und zu übersetzen.

Über Gebühren

Dieses Mal werden wir den kostenlosen Plan verwenden, so dass selbst wenn Sie versuchen zu arbeiten, Sie nicht belastet werden. Der kostenlose Plan hat jedoch Zeit- und Zeichenbeschränkungen, wenn Sie also mehr Konvertierung benötigen, nachdem Sie ihn tatsächlich betrieben haben, wechseln Sie bitte zu einem kostenpflichtigen Plan.

Bitte beachten Sie die folgende offizielle Seite für die Preise. Da es sich um einen Cloud-Dienst handelt, kann die Gebühr je nach Saison schwanken.

Zugreifen auf das Microsoft Azure-Portal

Greifen Sie in einem Webbrowser auf die folgende URL zu:

Wenn Sie bereits angemeldet sind, sind Sie fertig. Wenn Sie noch nicht angemeldet sind, wird der folgende Bildschirm angezeigt, also melden Sie sich bitte an.

Wenn Sie sich anmelden, wird der folgende Bildschirm angezeigt. Abhängig von dem Design, das Sie einstellen, kann das Display unterschiedlich sein.

Erstellen eines VoIP-Diensts in Microsoft Azure

Wenn Sie "voice" in das Sucheingabefeld über dem Portal eingeben, wird "voice service" herauskommen, also wählen Sie es aus.

「Cognitive Services | Wenn der Bildschirm "Sprachdienst" angezeigt wird, wählen Sie "Erstellen".

Der Bildschirm "Sprachdienste erstellen" öffnet sich, geben Sie die erforderlichen Elemente ein.

Grundlagen

Beispiel für
Eingabeinhalte von Elementen
Abonnement Wählen Sie die Abonnements aus, für die Sie bezahlen möchten. Selbst wenn es kostenlos ist, müssen Sie es immer an eine Art Abonnement binden.
Ressourcengruppen Gibt an, in welche Ressourcengruppe der zu erstellende VoIP-Dienst eingeschlossen werden soll. Wenn Sie noch keine erstellt haben, erstellen Sie bitte eine von "Neu" unten. Sie können sich Ressourcengruppen als Gruppierungen vorstellen, wenn Sie verschiedene Dienste erstellen.
Region Wählen Sie in der Nähe eines Ortes, an dem Sie es am häufigsten verwenden. Bitte beachten Sie jedoch, dass die Preise je nach Region variieren können. Japan Ost
Name Ein beliebiger Name für diesen Sprachdienst. Wenn Sie mehr als einen Sprachdienst erstellen, stellen Sie sicher, dass der Name beschreibend ist. Dieser Name ist global und eindeutig, sodass Sie keinen Namen verwenden können, der an anderer Stelle verwendet wird. SpeechToText-Test
Preisstufe Wenn Sie es kostenlos nutzen möchten, wählen Sie "Free F0". Wenn Sie es gegen eine Gebühr nutzen möchten, wählen Sie bitte einen anderen Plan. Natürlich gibt es Einschränkungen, wenn es kostenlos ist. Kostenlos F0

Wählen Sie nach der Eingabe unten > Weiter: Netzwerk aus.

Netz

Beispiel für
Eingabeinhalte von Elementen
Art Gibt den Bereich an, aus dem auf diesen Sprachdienst zugegriffen werden kann. Wenn Sie von überall ohne detaillierte Einstellungen darauf zugreifen möchten, wählen Sie "Einschließlich des Internets...". "Kann von überall aus aufgerufen werden" bedeutet auch "jeder kann darauf zugreifen", aber tatsächlich können nur diejenigen, die den "Schlüssel" haben, der danach erworben werden muss, darauf zugreifen, so dass es nicht so sehr ein Problem in Bezug auf die Sicherheit ist. Inklusive Internet...

Nachdem Sie es eingegeben haben, wählen Sie Weiter > unten aus.

Identität

Beispiel für
Eingabeinhalte von Elementen
Vom System zugewiesene verwaltete ID Diesmal benutze ich den Sprachdienst allein, daher ist es gut, ihn auszuschalten. aus
Vom Benutzer zugewiesene verwaltete ID Ich muss es nicht hinzufügen, weil ich diesmal keinen Benutzer erstelle. ohne

Nachdem Sie es eingegeben haben, wählen Sie weiter aus: Markieren Sie > unten.

Etikett

Da das Tag diesmal nicht verwendet wird, wird es nicht gesetzt.

Wählen Sie nach der Eingabe Weiter aus: Überprüfen und erstellen Sie > unten.

Überprüfen und erstellen

Wenn es keine Probleme mit den Eingabeinhalten gibt, wird "Validierung erfolgreich" angezeigt. Wenn es ein Problem gibt, wird eine Fehlermeldung angezeigt, also gehen Sie zurück und stellen Sie es erneut ein.

Wenn es kein Problem mit den Eingabeinhalten gibt, klicken Sie auf die Schaltfläche "Erstellen". Dann beginnt die Bereitstellung.

Nach einer Weile ist die Bereitstellung abgeschlossen und der folgende Bildschirm wird angezeigt. Der Bereitstellungsname ist lang, aber Sie müssen sich keine Gedanken darüber machen, da er in der Bereitstellung temporär ist.

Sie können auf die Schaltfläche Gehe zu Ressource klicken, um zu überprüfen, ob der VoIP-Dienst erstellt wurde.

Generieren und Abrufen von Schlüsseln

Für den Zugriff auf diesen Sprachdienst vom Client aus ist ein Authentifizierungsschlüssel erforderlich. Da es nur für das Programm zugänglich ist, das diesen Schlüssel hat, ist es notwendig zu verhindern, dass dieser Schlüssel von einem Dritten gestohlen wird.

"Client" bezieht sich hier auf alle Programme, die Microsoft Azure verwenden, z. B. Desktop-Apps, Smartphone-Apps und Web-Apps.

Um den Schlüssel zu erhalten, wechseln Sie zu dem Sprachdienst, den Sie erstellt haben. Auf sie kann über Dashboards, Ressourcengruppen usw. zugegriffen werden.

Wenn die Seite Sprachdienste geöffnet wird, wählen Sie im Menü auf der linken Seite die Option Tasten und Endpunkte aus.

Dann öffnet sich die Seite "Schlüssel und Endpunkt" und die Elemente "Schlüssel 1", "Schlüssel 2", "Standort/Region" und "Endpunkt" werden angezeigt.

Beide Gegenstände sind notwendig, aber "Key 2" ist ein Ersatzrahmen, so dass er in den meisten Fällen nicht verwendet wird.

Notieren Sie sich jeden Wert. Wie in der Beschreibung erwähnt, teilen Sie den Schlüssel bitte nicht unerwartet mit den Entwicklungsparteien.

Wenn der Schlüssel durchgesickert ist, klicken Sie oben auf "Schlüssel 1 neu generieren", um einen neuen Schlüssel auszugeben. Beachten Sie natürlich, dass in diesem Fall der vorherige Schlüssel nicht mehr verwendet werden kann.

Verwenden eines Sprachdiensts aus einem Programm zum Extrahieren von Text aus Sprache

Von nun an ändert sich die Nutzung des Sprachdienstes je nach verwendetem Programm. Dieses Mal greife ich von einer .NET-Desktopanwendung darauf zu, aber wenn Sie ein anderes Framework verwenden, versuchen Sie, es im Internet zu verwenden. Die offizielle Website enthält auch Anweisungen zur Verwendung in mehreren Sprachen.

Dieses Mal erstellen wir eine WPF-Desktop-App in Visual Studio 2022. Im Fall von Visual Studio Code ist es ein wenig mühsam, da es keinen Designer gibt, aber wenn Sie nur den Programmteil extrahieren, ist es möglich, ihn in einer Konsolen-App oder einer Web-App zu verwenden.

Projekt erstellen

Starten Sie Visual Studio 2022.

Wählen Sie Neues Projekt erstellen aus.

Wählen Sie WPF-Anwendung aus.

Der Projektname und der Standort sind willkürlich. Wählen Sie nach der Eingabe Weiter aus.

Die Version heißt ". NET 6.0". Klicken Sie nach der Einstellung auf die Schaltfläche "Erstellen".

NuGet-Einstellungen

Sie können den Zugriff auf die Microsoft Azure-API von Grund auf neu erstellen, aber es ist einfacher, sie zu verwenden, da Sie bereits über eine offizielle Bibliothek verfügen.

Klicken Sie mit der rechten Maustaste auf Abhängigkeiten für die Lösung, und wählen Sie NuGet-Pakete verwalten aus.

Wählen Sie die Registerkarte "Durchsuchen", geben Sie "Microsoft.CognitiveServices.Speech" in das Sucheingabefeld ein, und eine Liste wird angezeigt, also wählen Sie "Microsoft.CognitiveServices.Speech" und klicken Sie auf die Schaltfläche Installieren.

Klicken Sie auf die Schaltfläche OK.

Wählen Sie Ich stimme zu aus.

Wenn Sie fertig sind, wird es dem Paket hinzugefügt.

Erstellen der Benutzeroberfläche

Dieses Mal geben wir eine WAV-Datei mit Audio an und extrahieren die Unterhaltungsinhalte mit der Sprach-API in Text und lassen sie anzeigen. Lassen Sie die Umgebung vorerst abhängig vom Eingabefeld, damit Sie den Code per Kopieren und Einfügen verwenden können.

Der Bildschirm sollte wie folgt aussehen: Da nur der Mindestbetrag enthalten ist, wenn Sie beispielsweise einen Dateiverweis-Button hinzufügen möchten, implementieren Sie ihn bitte selbst.

MainWindow.xaml lautet wie folgt:

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

Erstellen eines Prozesses

Das ExecuteButton_Click Programm ist in Methoden verpackt. Wenn Sie es in anderen Frameworks verwenden möchten, schreiben Sie diesen Code als Basis neu.

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

Da die Erklärung fast im Code geschrieben ist, werde ich es nicht im Detail erklären, aber wenn Sie den wichtigen Teil ansprechen, wird es wie folgt sein.

  • SpeechConfig Konfigurieren von VoIP-Diensten in
  • AudioConfig Einrichten von Sprachdaten in
  • SpeechRecognizer Verarbeitungsklasse generieren in
  • Sprachdaten werden nacheinander analysiert, und der fertige Text SpeechRecognizer.Recognized wird von Zeit zu Zeit im Ereignis übergeben.
  • Wenn die Verarbeitung aus irgendeinem Grund abgeschlossen ist, SpeechRecognizer.Canceled wird ein Ereignis aufgerufen
  • Der Beginn der Verarbeitung wird als Methode bezeichnet, und der Abschluss der Verarbeitung wird SpeechRecognizer.StartContinuousRecognitionAsync SpeechRecognizer.StopContinuousRecognitionAsync als Methode bezeichnet.

Betriebsprüfung

Nachdem Sie das Programm erstellt haben, führen Sie es aus, geben Sie die erforderlichen Elemente ein und drücken Sie die Schaltfläche Ausführen. Wenn Sie die richtige Audiodatei angegeben haben, sollte das Audio wiedergegeben werden, und der Text sollte nacheinander mit dem Microsoft Azure-Sprachdienst hinter den Kulissen extrahiert werden.

Das System der Extraktion ist nicht perfekt, da es vom Microsoft Azure-Sprachdienst abhängt. Wenn die Stimme leise ist und klar spricht, denke ich, dass sie mit beträchtlicher Genauigkeit extrahiert wird. Da es sich um einen Cloud-Dienst handelt, auch wenn die Genauigkeit jetzt nicht so hoch ist, kann es besser werden, bevor Sie es wissen, so dass es leicht ist, nichts in diesem Bereich zu tun.