Uporaba storitve Microsoft Azure Speech za izvleček besedila iz zvočne datoteke

Stran posodobljena :
Datum ustvarjanja strani :

Okolje za preverjanje delovanja

Glasovne storitve Microsoft Azure
  • Julij 2022 izdaja
Vizualni studio
  • Vizualni studio 2022
.NET
  • 6.0

Pogoj

Preden lahko preverite, ali ti nasveti delujejo, morate:

O vzorčnih materialih

Zvočne datoteke si izposojamo na naslednjem mestu. Ni vključena v vzorčno kodo.

Zunanje povezave

Sprva

Kot primer, za snemanje vsebine srečanja itd., se vsebina pogovora zabeleži, kasneje pa se za ustvarjanje zapisnika srečanja zasliša in prepiše posneti zvok v besedilo. Lahko pa si predstavljamo, da je zelo težavno vsebino pogovora zapisati v stavek.

Če želite samodejno izvoziti in izvažati govorne podatke v besedilo, uporabite storitev Microsoft Azure Speech. V prejšnjem primeru gre za posnetek srečanja, vendar se v tem Nasvetu izvleče iz zvočne datoteke, tako da se lahko uporabi za vse, kar vsebuje vsebino pogovora.

Prav tako, tokrat govorimo o prenosu besedila, Glasovno storitev Microsoft Azure lahko uporabite tudi za pretvarjanje in prevajanje med snemanjem.

O pristojbinah

Tokrat bomo uporabili Brezplačni načrt, zato tudi če boste poskušali delovati, vam ne bodo zaračunali. Vendar pa ima brezplačni načrt časovne omejitve in omejitve znakov, zato če potrebujete več pretvorbe, potem ko ga dejansko upravljate, spremenite v plačljivem načrtu.

Za določanje cen glejte naslednjo uradno stran. Ker gre za storitev v oblaku, lahko pristojbina niha glede na sezono.

Dostop do portala Microsoft Azure

Dostop do tega URL-ja v spletnem brskalniku:

Če ste že prijavljeni, ste končali. Če še niste prijavljeni, se prikaže naslednji zaslon, zato se prijavite.

Ko se prijavite, se prikaže naslednji zaslon. Glede na načrt, ki ga nastavljate, je zaslon morda drugačen.

Ustvarjanje glasovne storitve v storitvi Microsoft Azure

Če v polje za vnos iskanja nad portalom vnesete »glas«, bo prišla »glasovna storitev«, zato ga izberite.

-Kognitivne storitve | Ko se prikaže zaslon »Glasovna storitev«, izberite »Ustvari«.

Odpre se zaslon »Ustvari govorne storitve«, zato vnesite potrebne elemente.

Osnove

Primer vhodne
vsebine elementov
naročnina Izberite naročnine, za katere želite plačati. Tudi če je brezplačna, jo morate vedno privezati na nekakšno naročnino.
Skupine virov Določa, v katero skupino virov je treba vključiti glasovno storitev, ki jo želite ustvariti. Če ga še niste ustvarili, ga ustvarite iz spodnjega »Novega«. Skupine virov lahko omejevate kot skupine, ko ustvarjate različne storitve.
Regija Izberite blizu kraja, kjer ga morda najpogosteje uporabljate. Vendar upoštevajte, da se cene lahko razlikujejo po regijah. Japonska vzhod
ime Ime za to glasovno storitev. Če ustvarjate več glasovnih storitev, se prepričajte, da je ime opisno. To ime je globalno in edinstveno, zato imena, ki se uporablja drugje, ne morete uporabiti. SpeechToText-Test
Cenovni tier Če ga želite brezplačno uporabljati, izberite »Free F0«. Če ga želite uporabiti za doplačilo, izberite drug načrt. Seveda obstajajo omejitve, če je brezplačna. Brezplačni F0

Ko vnesete, izberite Naprej: Omrežna > spodaj.

mreža

Primer vhodne
vsebine elementov
vrsta Določa obseg, iz katerega je ta glasovna storitev dostopna. Če želite imeti dostop od kjerkoli brez podrobnih nastavitev, izberite "Vključno z internetom...". "Lahko se dostopa od kjerkoli" pomeni tudi "vsakdo lahko dostopa do njega", v resnici pa samo tisti, ki imajo "ključ", ki ga je treba pridobiti po tem, lahko dostopajo do njega, tako da ni toliko problem v smislu varnosti. Vključno z internetom...

Ko jo vnesete, izberite Naprej: Identiteta > spodaj.

Identiteta

Primer vhodne
vsebine elementov
Sistemsko dodeljen upravljani ID Tokrat uporabljam samo glasovno storitev, zato jo je dobro izklopiti. Off
Uporabniku dodeljen upravljani ID Ni mi ga treba dodajati, ker tokrat ne ustvarim uporabnika. brez

Ko jo vnesete, izberite Naprej: > spodaj.

Tag

Ker se tag tokrat ne uporablja, ni nastavljen.

Ko vnesete, izberite Naprej: Preglej in ustvari > spodaj.

Pregled in ustvarjanje

Če ni težav z vnosno vsebino, se prikaže »Preverjanje veljavnosti je uspelo«. Če pride do težave, se prikaže sporočilo o napaki, zato se vrnite in ga znova nastavite.

Če ni težav z vnosno vsebino, kliknite gumb "Ustvari". Nato se bo začela uvajanje.

Čez nekaj časa je uvajanje končano in prikaže se naslednji zaslon. Ime uvajanja je dolgo, vendar vam ni treba skrbeti, ker je začasno v uvajanju.

Če želite preveriti, ali je bila glasovna storitev ustvarjena, lahko kliknete gumb Pojdi na vir.

Ustvarjanje in pridobivanje ključev

Za dostop do te glasovne storitve od odjemalca je potreben ključ za preverjanje pristnosti. Ker je dostopen le s programom, ki ima ta ključ, je treba preprečiti, da bi ta ključ ukradla tretja oseba.

»Odjemalec« se tukaj nanaša na vse programe, ki uporabljajo Microsoft Azure, kot so namizne aplikacije, aplikacije za pametne telefone in spletne aplikacije.

Če želite priti do ključa, pojdite na glasovno storitev, ki ste jo ustvarili. Do tega lahko dostopate iz nadzornih plošč, skupin virov in tako naprej.

Ko se odpre stran Glasovne storitve, v meniju na levi izberite Tipke & končne točke.

Nato se odpre stran »Ključ in končna točka« in prikažejo se elementi »Ključ 1«, »Ključ 2«, »Lokacija/regija« in »Končna točka«.

Oba elementa sta nujna, vendar je "Key 2" rezervni okvir, zato se v večini primerov ne uporablja.

Zabeleži vsako vrednost. Kot je navedeno v opisu, ne delite ključa z razvojno stranko nepričakovano.

Če ključ uhaja, kliknite »Obnovi ključ 1« zgoraj, da izdate nov ključ. Seveda se zavedajte, da v tem primeru prejšnji ključ ne bo več izposoljiv.

Uporaba govorne storitve iz programa za izvleček besedila iz govora

Od zdaj naprej se bo uporaba glasovne storitve spremenila glede na uporabljen program. Tokrat bom do tega dostopal iz namizne aplikacije .NET, če pa uporabljate drug okvir, ga poskusite uporabiti na internetu. Uradna spletna stran ima tudi navodila, kako jo uporabljati v več jezikih.

Tokrat v programu Visual Studio 2022 ustvarjamo namizno aplikacijo WPF. V primeru kode Visual Studio je to nekoliko težavno, ker ni oblikovalca, če pa izvlečete le programski del, ga je mogoče uporabiti v konzolni aplikaciji ali spletni aplikaciji.

Ustvari projekt

Zaženite Visual Studio 2022.

Izberite Ustvari nov projekt.

Izberite Program WPF.

Ime in lokacija projekta sta samovoljni. Ko ste vnesli, izberite Naprej.

Različica se imenuje ". NET 6,0". Ko nastavite, kliknite gumb "Ustvari".

Nastavitve NuGet

Dostop do API-ja za Microsoft Azure lahko ustvarite od začetka, vendar ga je lažje uporabiti, ker že imate uradno knjižnico.

Z desno tipko miške kliknite Odvisnosti za rešitev in izberite Upravljanje paketov NuGet.

Izberite zavihek »Prebrskaj«, v polje za vnos iskanja vnesite »Microsoft.CognitiveServices.Speech« in prikazal se bo seznam, zato izberite »Microsoft.CognitiveServices.Speech« in kliknite gumb Namesti.

Kliknite gumb V redu.

Izberite Strinjam se.

Ko boste končali, bo dodan v paket.

Ustvarjanje UI

Tokrat bomo določili WAV datoteko, ki vsebuje zvok, in vsebino pogovora izvlečemo v besedilo z govornim API-jem in ga prikažemo. Za zdaj pustite okolje odvisno od vnosnega polja, tako da lahko šifro uporabite s kopiranjem in lepljenjem.

Zaslon mora izgledati takole: Ker je vključen le najmanjši znesek, če želite dodati na primer gumb za sklic na datoteko, ga sami implementirate.

MainWindow.xaml je naslednja:

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

Ustvarjanje procesa

ExecuteButton_Click Program je zavit v metode. Če jo želite uporabiti v drugih okvirih, ponovno napiši to kodo kot osnovo.

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

Ker je pojasnilo skoraj zapisano v kodeksu, ne bom podrobno razložil, če pa dvignete pomemben del, bo takole.

  • SpeechConfig Konfiguriranje glasovnih storitev v
  • AudioConfig Nastavitev glasovnih podatkov v
  • SpeechRecognizer Ustvari razred obdelave v
  • Govorni podatki se analizirajo enega za enim, SpeechRecognizer.Recognized dokončano besedilo pa se v dogodku prenaša od časa do časa.
  • Če je obdelava iz nekega razloga končana, SpeechRecognizer.Canceled se dogodek imenuje
  • Začetek obdelave SpeechRecognizer.StartContinuousRecognitionAsync se imenuje metoda, SpeechRecognizer.StopContinuousRecognitionAsync dokončanje obdelave pa se imenuje metoda.

Preverjanje delovanja

Ko ustvarite program, ga izvršite, vnesite potrebne elemente in pritisnite gumb za izvajanje. Če ste določili pravilno zvočno datoteko, naj se zvok predvaja, besedilo pa je treba izvleči enega za drugim z uporabo glasovne storitve Microsoft Azure v ozadju.

Sistem ekstrakcije ni popoln, ker je odvisen od glasovne storitve Microsoft Azure, Če je glas tih in govori jasno, mislim, da bo izvleček z veliko natančnostjo. Ker gre za storitev v oblaku, tudi če točnost zdaj ni tako visoka, je morda bolje, preden jo poznate, zato je na tem področju enostavno ne storiti ničesar.