De Microsoft Azure Speech-service gebruiken om tekst uit een audiobestand te extraheren

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Controle-omgeving voor bewerking

Microsoft Azure Voice Services
  • Editie juli 2022
Visual Studio
  • Visual Studio 2022
.NET
  • 6.0

voorwaarde

Voordat u kunt controleren of deze tips werken, moet u het volgende doen:

Informatie over voorbeeldmaterialen

We lenen audiobestanden van de volgende site. Het is niet opgenomen in de voorbeeldcode.

Externe links

Eerst

Om bijvoorbeeld de inhoud van de vergadering op te nemen, enz., Wordt de inhoud van het gesprek opgenomen en later om de notulen van de vergadering te maken, wordt de opgenomen audio gehoord en in tekst getranscribeerd. Het is echter gemakkelijk voor te stellen dat het erg lastig is om de inhoud van het gesprek in een zin op te schrijven.

Hier leest u hoe u de Microsoft Azure Speech-service kunt gebruiken om spraakgegevens automatisch naar tekst te exporteren en uit te voeren. In het vorige voorbeeld is het een opname van de vergadering, maar in deze Tips wordt het uit het audiobestand geëxtraheerd, zodat het kan worden toegepast op alles wat gespreksinhoud bevat.

Ook hebben we het deze keer over transcriberen naar tekst, U kunt ook de Microsoft Azure-spraakservice gebruiken om te converteren en te vertalen tijdens het opnemen.

Over vergoedingen

Deze keer gebruiken we het gratis abonnement, dus zelfs als u probeert te werken, worden er geen kosten in rekening gebracht. Het gratis abonnement heeft echter tijds- en tekenlimieten, dus als u meer conversie nodig hebt nadat u het daadwerkelijk hebt gebruikt, moet u overstappen op een betaald abonnement.

Raadpleeg de volgende officiële pagina voor prijzen. Omdat het een cloudservice is, kan de vergoeding fluctueren afhankelijk van het seizoen.

Toegang tot de Microsoft Azure Portal

Open de volgende URL in een webbrowser:

Als u al bent aangemeld, bent u klaar. Als u nog niet bent aangemeld, wordt het volgende scherm weergegeven, dus meld u aan.

Wanneer u zich aanmeldt, wordt het volgende scherm weergegeven. Afhankelijk van het ontwerp dat u instelt, kan het scherm verschillen.

Een spraakservice maken in Microsoft Azure

Als u "spraak" invoert in het zoekinvoerveld boven de portal, komt "spraakservice" tevoorschijn, dus selecteer deze.

「Cognitive Services | Wanneer het scherm "Voice Service" wordt weergegeven, selecteert u "Maken".

Het scherm "Spraakservices maken" wordt geopend, dus voer de benodigde items in.

Algemeen

Voorbeeld van
invoerinhoud van items
abonnement Selecteer de abonnementen waarvoor u wilt betalen. Zelfs als het gratis is, moet je het altijd koppelen aan een soort abonnement.
Resourcegroepen Hiermee geeft u op in welke resourcegroep de spraakservice moet worden opgenomen. Als je er nog geen hebt gemaakt, maak er dan een van "Nieuw" hieronder. U kunt resourcegroepen zien als groeperingen wanneer u verschillende services maakt.
Regio Kies in de buurt van een plaats waar u het het vaakst gebruikt. Houd er echter rekening mee dat de prijzen per regio kunnen verschillen. Japan Oost
naam Elke naam voor deze spraakservice. Als u meer dan één spraakservice maakt, moet u ervoor zorgen dat de naam beschrijvend is. Deze naam is globaal en uniek, dus u kunt geen naam gebruiken die elders wordt gebruikt. SpeechToText-Test
Prijscategorie Als u het gratis wilt gebruiken, kiest u "Gratis F0". Als u het tegen betaling wilt gebruiken, kiest u een ander abonnement. Natuurlijk zijn er beperkingen als het gratis is. Gratis F0

Eenmaal ingevoerd, selecteert u Volgende: Netwerk > hieronder.

netwerk

Voorbeeld van
invoerinhoud van items
soort Hiermee geeft u het bereik op van waaruit deze spraakservice toegankelijk is. Als u het overal wilt kunnen openen zonder gedetailleerde instellingen, selecteert u "Inclusief internet ...". "Overal toegankelijk" betekent ook "iedereen heeft er toegang toe", maar in feite hebben alleen degenen die de "sleutel" hebben die hierna moet worden verkregen, er toegang toe, dus het is niet zozeer een probleem op het gebied van beveiliging. Inclusief internet...

Nadat u het hebt ingevoerd, selecteert u Volgende: Identiteit > hieronder.

Identiteit

Voorbeeld van
invoerinhoud van items
Door het systeem toegewezen beheerde id Deze keer gebruik ik de spraakdienst alleen, dus het is goed om deze uit te schakelen. af
Door de gebruiker toegewezen beheerde id Ik hoef het niet toe te voegen omdat ik deze keer geen gebruiker maak. zonder

Nadat u het hebt ingevoerd, selecteert u Volgende: Tag > hieronder.

label

Aangezien de tag deze keer niet wordt gebruikt, is deze niet ingesteld.

Eenmaal ingevoerd, selecteert u Volgende: Controleren en > hieronder.

Beoordelen en maken

Als er geen problemen zijn met de invoerinhoud, wordt "Validatie geslaagd" weergegeven. Als er een probleem is, wordt een foutmelding weergegeven, dus ga terug en stel het opnieuw in.

Als er geen probleem is met de invoerinhoud, klikt u op de knop "Maken". Dan begint de implementatie.

Na een tijdje is de implementatie voltooid en wordt het volgende scherm weergegeven. De implementatienaam is lang, maar u hoeft zich er geen zorgen over te maken omdat deze tijdelijk in implementatie is.

U kunt op de knop Ga naar bron klikken om te controleren of de spraakservice is gemaakt.

Sleutels genereren en ophalen

Een verificatiesleutel is vereist om toegang te krijgen tot deze spraakservice vanaf de client. Omdat het alleen toegankelijk is voor het programma dat deze sleutel heeft, is het noodzakelijk om te voorkomen dat deze sleutel door een derde partij wordt gestolen.

"Client" verwijst hier naar alle programma's die Microsoft Azure gebruiken, zoals desktop-apps, smartphone-apps en web-apps.

Als u de sleutel wilt ophalen, gaat u naar de spraakservice die u hebt gemaakt. Het is toegankelijk via dashboards, resourcegroepen, enzovoort.

Wanneer de pagina Spraakservices wordt geopend, selecteert u Toetsen en eindpunten in het menu aan de linkerkant.

Vervolgens wordt de pagina "Sleutel en eindpunt" geopend en worden de items "Sleutel 1", "Sleutel 2", "Locatie / regio" en "Eindpunt" weergegeven.

Beide items zijn noodzakelijk, maar "Key 2" is een reserveframe, dus het wordt in de meeste gevallen niet gebruikt.

Noteer elke waarde. Zoals vermeld in de beschrijving, gelieve de sleutel niet onverwacht te delen met de ontwikkelpartijen.

Als de sleutel is gelekt, klikt u hierboven op "Sleutel opnieuw genereren" om een nieuwe sleutel uit te geven. Houd er natuurlijk rekening mee dat in dit geval de vorige sleutel niet langer bruikbaar is.

Een spraakservice uit een programma gebruiken om tekst uit spraak te extraheren

Vanaf nu zal het gebruik van de spraakdienst veranderen afhankelijk van het gebruikte programma. Deze keer zal ik het openen vanuit een .NET-desktoptoepassing, maar als u een ander framework gebruikt, probeer het dan op internet te gebruiken. De officiële website heeft ook instructies over hoe het in verschillende talen te gebruiken.

Deze keer maken we een WPF-bureaubladapp in Visual Studio 2022. In het geval van Visual Studio Code is het een beetje lastig omdat er geen ontwerper is, maar als u alleen het programmagedeelte uitpakt, is het mogelijk om het in een console-app of een web-app te gebruiken.

Project maken

Start Visual Studio 2022.

Selecteer Nieuw project maken.

Selecteer WPF-toepassing.

De projectnaam en locatie zijn willekeurig. Eenmaal ingevoerd, selecteert u Volgende.

De versie heet ". NET 6.0". Eenmaal ingesteld, klikt u op de knop "Maken".

NuGet-instellingen

U kunt helemaal opnieuw toegang krijgen tot de Microsoft Azure API, maar het is gemakkelijker om deze te gebruiken omdat u al een officiële bibliotheek hebt.

Klik met de rechtermuisknop op Afhankelijkheden voor de oplossing en selecteer NuGet-pakketten beheren.

Selecteer het tabblad "Bladeren", voer "Microsoft.CognitiveServices.Speech" in het zoekinvoerveld in en er wordt een lijst weergegeven, dus selecteer "Microsoft.CognitiveServices.Speech" en klik op de knop Installeren.

Klik op de knop OK.

Selecteer Ik ga akkoord.

Als je klaar bent, wordt het aan het pakket toegevoegd.

De gebruikersinterface maken

Deze keer zullen we een WAV-bestand met audio specificeren en de inhoud van het gesprek in tekst extraheren met de Speech API en deze weergeven. Laat de omgeving voorlopig afhankelijk van het invoerveld, zodat u de code kunt gebruiken door te kopiëren en te plakken.

Het scherm zou er als volgt uit moeten zien: Aangezien alleen het minimumbedrag is inbegrepen, moet u deze zelf implementeren als u bijvoorbeeld een bestandsverwijzingsknop wilt toevoegen.

MainWindow.xaml is als volgt:

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

Een proces maken

Het ExecuteButton_Click programma is allemaal verpakt in methoden. Als u het in andere frameworks wilt gebruiken, herschrijft u deze code als basis.

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

Omdat de uitleg bijna in de code staat, zal ik het niet in detail uitleggen, maar als je het belangrijke deel aan de orde stelt, zal het als volgt zijn.

  • SpeechConfig Spraakservices configureren in
  • AudioConfig Spraakgegevens instellen in
  • SpeechRecognizer Verwerkingsklasse genereren in
  • Spraakgegevens worden één voor één geanalyseerd en de voltooide tekst SpeechRecognizer.Recognized wordt van tijd tot tijd in het evenement doorgegeven.
  • Als de verwerking om de een of andere reden is voltooid, SpeechRecognizer.Canceled wordt een gebeurtenis aangeroepen
  • Het begin van de verwerking wordt SpeechRecognizer.StartContinuousRecognitionAsync de methode genoemd en de voltooiing van de verwerking wordt SpeechRecognizer.StopContinuousRecognitionAsync de methode genoemd.

Werkingscontrole

Nadat u het programma hebt gemaakt, voert u het uit, voert u de benodigde items in en drukt u op de knop Uitvoeren. Als u het juiste audiobestand hebt opgegeven, moet de audio worden afgespeeld en moet de tekst één voor één worden uitgepakt met behulp van de Microsoft Azure-spraakservice achter de schermen.

Het extractiesysteem is niet perfect omdat het afhankelijk is van de Microsoft Azure-spraakservice, Als de stem stil is en duidelijk spreekt, denk ik dat deze met aanzienlijke nauwkeurigheid zal worden geëxtraheerd. Omdat het een cloudservice is, zelfs als de nauwkeurigheid nu niet zo hoog is, wordt het misschien beter voordat je het weet, dus het is gemakkelijk om niets op dat gebied te doen.