Brug Tjenesten Microsoft Azure Speech til at udtrække tekst fra en lydfil

Side opdateret :
Dato for oprettelse af side :

Miljø til kontrol af drift

Microsoft Azure-stemmetjenester
  • Juli 2022-udgaven
Visuelt studie
  • Visuelt studie 2022
.NET
  • 6.0

forudsætning

Før du kan bekræfte, at disse tips virker, skal du:

Om prøvematerialer

Vi låner lydfiler fra følgende websted. Det er ikke inkluderet i eksempelkoden.

Læs mere her.

Først

For at optage indholdet af mødet mv. optages indholdet af samtalen, og senere for at oprette mødereferatet høres den optagede lyd og transskriberes til tekst. Det er dog let at forestille sig, at det er meget besværligt at skrive indholdet af samtalen ned i en sætning.

Sådan bruger du Microsoft Azure Speech-tjenesten til automatisk at eksportere og udskrive taledata til tekst. I det foregående eksempel er det en optagelse af mødet, men i dette tip udtrækkes det fra lydfilen, så det kan anvendes på alt, der indeholder samtaleindhold.

Også denne gang taler vi om transskribering til tekst, Du kan også bruge Microsoft Azure-stemmetjenesten til at konvertere og oversætte under optagelse.

Om gebyrer

Denne gang bruger vi den gratis plan, så selvom du prøver at betjene, vil du ikke blive opkrævet. Den gratis plan har dog tids- og tegngrænser, så hvis du har brug for mere konvertering efter faktisk at have brugt den, skal du skifte til en betalt plan.

Se venligst følgende officielle side for priser. Da det er en skytjeneste, kan gebyret svinge afhængigt af sæsonen.

Få adgang til Microsoft Azure-portalen

Få adgang til følgende URL-adresse i en webbrowser:

Hvis du allerede er logget ind, er du færdig. Hvis du ikke allerede er logget ind, vises følgende skærmbillede, så log ind.

Når du logger ind, vises følgende skærmbillede. Afhængigt af det design, du indstiller, kan displayet være anderledes.

Opret en taletjeneste i Microsoft Azure

Hvis du indtaster "stemme" i søgeinputfeltet over portalen, kommer "stemmetjeneste" ud, så vælg den.

「Cognitive Services | Når skærmen "Stemmetjeneste" vises, skal du vælge "Opret".

Skærmen "Opret taletjenester" åbnes, så indtast de nødvendige elementer.

Grundlæggende

Eksempel på
inputindhold af elementer
abonnement Vælg de abonnementer, du vil betale for. Selvom det er gratis, skal du altid binde det til en slags abonnement.
Ressourcegrupper Angiver, i hvilken ressourcegruppe den stemmetjeneste, der skal oprettes, skal medtages. Hvis du ikke har oprettet en endnu, skal du oprette en fra "Ny" nedenfor. Du kan tænke på ressourcegrupper som grupperinger, når du opretter forskellige tjenester.
Region Vælg i nærheden af et sted, hvor du måske bruger det oftest. Bemærk dog, at priserne kan variere efter region. Det østlige Japan
Navn Ethvert navn til denne stemmetjeneste. Hvis du opretter mere end én stemmetjeneste, skal du sørge for, at navnet er beskrivende. Dette navn er globalt og unikt, så du kan ikke bruge et navn, der bruges andre steder. SpeechToText-test
Prisniveau Hvis du vil bruge det gratis, skal du vælge "Gratis F0". Hvis du vil bruge det mod et gebyr, skal du vælge en anden plan. Selvfølgelig er der begrænsninger, hvis det er gratis. Gratis F0

Når du er indtastet, skal du vælge Næste: Netværk > nedenfor.

netværk

Eksempel på
inputindhold af elementer
slags Angiver det område, hvorfra denne stemmetjeneste er tilgængelig. Hvis du vil kunne få adgang til det hvor som helst uden detaljerede indstillinger, skal du vælge "Inklusive internettet ...". "Kan tilgås hvor som helst" betyder også "alle kan få adgang til det", men faktisk er det kun dem, der har "nøglen", der skal erhverves efter dette, der kan få adgang til det, så det er ikke så meget et problem med hensyn til sikkerhed. Herunder internettet...

Når du har indtastet det, skal du vælge Næste: Identitet > nedenfor.

Identitet

Eksempel på
inputindhold af elementer
Systemtildelt administreret id Denne gang bruger jeg stemmetjenesten alene, så det er godt at slukke for den. af
Administreret id, der er tildelt af brugeren Jeg behøver ikke at tilføje det, fordi jeg ikke opretter en bruger denne gang. uden

Når du har indtastet det, skal du vælge Næste: Tag > nedenfor.

tag

Da mærket ikke bruges denne gang, er det ikke indstillet.

Når du er indtastet, skal du vælge Næste: Gennemgå og oprette > nedenfor.

Gennemgå og opret

Hvis der ikke er problemer med inputindholdet, vises "Validering lykkedes". Hvis der er et problem, vises en fejlmeddelelse, så gå tilbage og indstil den igen.

Hvis der ikke er noget problem med inputindholdet, skal du klikke på knappen "Opret". Derefter begynder implementeringen.

Efter et stykke tid er implementeringen afsluttet, og følgende skærmbillede vises. Installationsnavnet er langt, men du behøver ikke bekymre dig om det, fordi det er midlertidigt i udrulningen.

Du kan klikke på knappen Gå til ressource for at kontrollere, at stemmetjenesten er oprettet.

Generering og hentning af nøgler

Der kræves en godkendelsesnøgle for at få adgang til denne stemmetjeneste fra klienten. Da det kun er tilgængeligt af det program, der har denne nøgle, er det nødvendigt at forhindre, at denne nøgle bliver stjålet af en tredjepart.

"Klient" henviser her til alle programmer, der bruger Microsoft Azure, såsom desktop-apps, smartphone-apps og webapps.

For at få nøglen skal du gå til den stemmetjeneste, du oprettede. Det kan tilgås fra dashboards, ressourcegrupper osv.

Når siden Stemmetjenester åbnes, skal du vælge Taster og slutpunkter i menuen til venstre.

Derefter åbnes siden "Nøgle og slutpunkt", og emnerne "Nøgle 1", "Nøgle 2", "Placering / region" og "Slutpunkt" vises.

Begge ting er nødvendige, men "Key 2" er en ekstra ramme, så den bruges ikke i de fleste tilfælde.

Noter hver værdi. Som nævnt i beskrivelsen skal du ikke dele nøglen med udviklingsparterne uventet.

Hvis nøglen lækkes, skal du klikke på "Regenerer nøgle 1" ovenfor for at udstede en ny nøgle. Vær selvfølgelig opmærksom på, at den forrige nøgle i dette tilfælde ikke længere kan bruges.

Brug en taletjeneste fra et program til at udtrække tekst fra tale

Fra nu af ændres brugen af stemmetjenesten afhængigt af det anvendte program. Denne gang får jeg adgang til det fra et .NET-skrivebordsprogram, men hvis du bruger en anden ramme, kan du prøve at bruge den på Internettet. Den officielle hjemmeside har også instruktioner om, hvordan du bruger den på flere sprog.

Denne gang opretter vi en WPF-skrivebordsapp i Visual Studio 2022. I tilfælde af Visual Studio Code er det lidt besværligt, fordi der ikke er nogen designer, men hvis du kun udtrækker programdelen, er det muligt at bruge den i en konsolapp eller en webapp.

Opret projekt

Start Visual Studio 2022.

Vælg Opret nyt projekt.

Vælg WPF-applikation.

Projektets navn og placering er vilkårlig. Når du er indtastet, skal du vælge Næste.

Versionen hedder ". NETTO 6,0". Når du er indstillet, skal du klikke på knappen "Opret".

NuGet-indstillinger

Du kan oprette adgang til Microsoft Azure API fra bunden, men det er nemmere at bruge det, fordi du allerede har et officielt bibliotek.

Højreklik på Afhængigheder for løsningen, og vælg Administrer NuGet-pakker.

Vælg fanen "Gennemse", indtast "Microsoft.CognitiveServices.Speech" i søgeinputfeltet, og der vises en liste, så vælg "Microsoft.CognitiveServices.Speech" og klik på knappen Installer.

Klik på knappen OK.

Vælg Jeg accepterer.

Når du er færdig, føjes den til pakken.

Oprettelse af brugergrænsefladen

Denne gang vil vi specificere en WAV-fil, der indeholder lyd og udtrække samtaleindholdet i tekst med Speech API og gøre det vist. Indtil videre skal du lade miljøet være afhængigt af inputfeltet, så du kan bruge koden ved at kopiere og indsætte.

Skærmen skal se sådan ud: Da kun minimumsbeløbet er inkluderet, skal du selv implementere det, hvis du f.eks. vil tilføje en filreferenceknap.

MainWindow.xaml er som følger:

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

Oprettelse af en proces

Programmet ExecuteButton_Click er alle pakket ind i metoder. Hvis du vil bruge den i andre rammer, skal du omskrive denne kode som en base.

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 forklaringen næsten er skrevet i koden, vil jeg ikke forklare detaljeret, men hvis du rejser den vigtige del, vil det være som følger.

  • SpeechConfig Konfiguration af taletjenester i
  • AudioConfig Opsætning af stemmedata i
  • SpeechRecognizer Generer behandlingsklasse i
  • Taledata analyseres en efter en, og den færdige tekst SpeechRecognizer.Recognized sendes i begivenheden fra tid til anden.
  • Hvis behandlingen af en eller anden grund er afsluttet, SpeechRecognizer.Canceled kaldes en begivenhed
  • Starten af behandlingen kaldes SpeechRecognizer.StartContinuousRecognitionAsync metoden, og afslutningen af behandlingen kaldes SpeechRecognizer.StopContinuousRecognitionAsync metoden.

Kontrol af drift

Når du har oprettet programmet, skal du udføre det, indtaste de nødvendige elementer og trykke på udførelsesknappen. Hvis du har angivet den korrekte lydfil, skal lyden afspilles, og teksten skal udtrækkes en efter en ved hjælp af Microsoft Azure-stemmetjenesten bag kulisserne.

Ekstraktionssystemet er ikke perfekt, fordi det afhænger af Microsoft Azure-stemmetjenesten, Hvis stemmen er stille og taler tydeligt, tror jeg, at den vil blive ekstraheret med betydelig nøjagtighed. Da det er en skytjeneste, selvom nøjagtigheden ikke er så høj nu, kan det blive bedre, før du ved af det, så det er let ikke at gøre noget på dette område.