Použitie služby Microsoft Azure Speech na extrahovanie textu zo zvukového súboru

Stránka aktualizovaná :
Dátum vytvorenia strany :

Prostredie kontroly prevádzky

Hlasové služby Microsoft Azure
  • Vydanie z júla 2022
Vizuálne štúdio
  • Vizuálne štúdio 2022
.NET
  • 6.0

Predpokladom

Skôr než budete môcť overiť, či tieto tipy fungujú, musíte:

O vzorkových materiáloch

Požičiavame si zvukové súbory z nasledujúcej stránky. Nie je zahrnutá vo vzorovom kóde.

Externé odkazy

Najskôr

Napríklad na zaznamenanie obsahu stretnutia atď. sa zaznamená obsah rozhovoru a neskôr sa vytvorí zápisnica zo stretnutia, zaznamenaný zvuk sa počuje a prepisuje do textu. Je však ľahké si predstaviť, že je veľmi nepríjemné zapísať obsah rozhovoru do vety.

Tu je postup, ako používať službu Microsoft Azure Speech na automatický export a výstup údajov reči do textu. V predchádzajúcom príklade ide o nahrávku schôdze, ale v týchto tipoch sa extrahuje zo zvukového súboru, takže ju možno použiť na čokoľvek, čo obsahuje obsah konverzácie.

Tentoraz hovoríme aj o prepise textu, Môžete tiež použiť hlasovú službu Microsoft Azure na konverziu a preklad počas nahrávania.

O poplatkoch

Tentokrát použijeme bezplatný plán, takže aj keď sa pokúsite o prevádzku, nebude vám účtovaný žiadny poplatok. Bezplatný plán má však časové a charakterové limity, takže ak potrebujete väčšiu konverziu po jeho skutočnej prevádzke, prejdite na platený plán.

Ceny nájdete na nasledujúcej oficiálnej stránke. Keďže ide o cloudovú službu, poplatok môže kolísať v závislosti od ročného obdobia.

Prístup k portálu Microsoft Azure

Vo webovom prehliadači prejdite na nasledujúcu adresu URL:

Ak ste už prihlásení, máte hotovo. Ak ešte nie ste prihlásení, zobrazí sa nasledujúca obrazovka, preto sa prihláste.

Keď sa prihlásite, zobrazí sa nasledujúca obrazovka. V závislosti od dizajnu, ktorý nastavujete, sa displej môže líšiť.

Vytvorenie hlasovej služby v službe Microsoft Azure

Ak do vyhľadávacieho vstupného poľa nad portálom zadáte "hlas", zobrazí sa "hlasová služba", takže ju vyberte.

「| kognitívnych služieb Keď sa zobrazí obrazovka "Hlasová služba", vyberte možnosť "Vytvoriť".

Otvorí sa obrazovka "Vytvoriť rečové služby", takže zadajte potrebné položky.

Základy

Príklad vstupného
obsahu položiek
predplatné Vyberte predplatné, za ktoré chcete zaplatiť. Aj keď je zadarmo, vždy ho musíte viazať na nejaký druh predplatného.
Skupiny zdrojov Určuje, do ktorej skupiny zdrojov má hlasová služba, ktorá sa má vytvoriť, zahrnúť. Ak ste ho ešte nevytvorili, vytvorte si ho z časti "Nové" nižšie. Pri vytváraní rôznych služieb si môžete skupiny zdrojov predstaviť ako zoskupenia.
Región Vyberte si v blízkosti miesta, kde ho môžete používať najčastejšie. Upozorňujeme však, že ceny sa môžu líšiť v závislosti od regiónu. Japonsko na východe
meno Akýkoľvek názov pre túto hlasovú službu. Ak vytvárate viac ako jednu hlasovú službu, uistite sa, že názov je popisný. Tento názov je globálny a jedinečný, takže nemôžete použiť názov, ktorý sa používa inde. SpeechToText-Test
Cenová úroveň Ak ho chcete používať zadarmo, vyberte "Free F0". Ak ho chcete použiť za poplatok, vyberte si iný plán. Samozrejme, existujú obmedzenia, ak je to zadarmo. F0 zadarmo

Po zadaní vyberte položku Next: Network > nižšie.

sieť

Príklad vstupného
obsahu položiek
láskavý Určuje rozsah, z ktorého je táto hlasová služba prístupná. Ak chcete mať prístup odkiaľkoľvek bez akýchkoľvek podrobných nastavení, vyberte možnosť "Vrátane internetu...". "Je možné k nemu pristupovať odkiaľkoľvek" tiež znamená "ktokoľvek má prístup k nemu", ale v skutočnosti k nemu majú prístup iba tí, ktorí majú "kľúč", ktorý sa má získať po tomto, takže z hľadiska bezpečnosti to nie je až taký problém. Vrátane internetu...

Po jeho zadaní vyberte položku Next: Identity > nižšie.

Identita

Príklad vstupného
obsahu položiek
Spravovaná identifikácia priradená systému Tentokrát používam hlasovú službu sám, takže je dobré ju vypnúť. preč
Spravovaná identifikácia priradená používateľom Nemusím ho pridávať, pretože tentoraz nevytvorím používateľa. bez

Po jeho zadaní vyberte položku Ďalej: Označiť > nižšie.

štítok

Keďže sa značka tentoraz nepoužíva, nie je nastavená.

Po zadaní vyberte položku Ďalej: Skontrolovať a vytvorte > nižšie.

Kontrola a tvorba

Ak sa nevyskytnú žiadne problémy s obsahom vstupu, zobrazí sa text "Overenie bolo úspešné". Ak sa vyskytne problém, zobrazí sa chybové hlásenie, takže sa vráťte a znova ho nastavte.

Ak nie je problém so vstupným obsahom, kliknite na tlačidlo "Vytvoriť". Potom sa začne nasadenie.

Po chvíli sa nasadenie dokončí a zobrazí sa nasledujúca obrazovka. Názov nasadenia je dlhý, ale nemusíte sa oň starať, pretože je dočasne nasadený.

Kliknutím na tlačidlo Prejsť na zdroj overíte, či bola hlasová služba vytvorená.

Generovanie a načítanie kľúčov

Na prístup k tejto hlasovej službe od klienta je potrebný overovací kľúč. Pretože je prístupný iba programu, ktorý má tento kľúč, je potrebné zabrániť odcudzeniu tohto kľúča treťou stranou.

"Klient" sa tu vzťahuje na všetky programy, ktoré používajú Microsoft Azure, ako sú počítačové aplikácie, aplikácie pre smartfóny a webové aplikácie.

Ak chcete získať kľúč, prejdite do hlasovej služby, ktorú ste vytvorili. Je prístupný z tabúľ, skupín zdrojov atď.

Keď sa otvorí stránka Hlasové služby, v ponuke vľavo vyberte položku Kľúče a koncové body.

Potom sa otvorí stránka "Kľúč a koncový bod" a zobrazia sa položky "Kľúč 1", "Kľúč 2", "Umiestnenie / región" a "Koncový bod".

Obe položky sú potrebné, ale "Kľúč 2" je náhradný rám, takže sa vo väčšine prípadov nepoužíva.

Poznačte si každú hodnotu. Ako je uvedené v popise, nezdieľajte kľúč s vývojovými stranami neočakávane.

Ak kľúč uniká, kliknite na "Regenerovať kľúč 1" vyššie a vydajte nový kľúč. Samozrejme, uvedomte si, že v tomto prípade predchádzajúci kľúč už nebude použiteľný.

Použitie rečovej služby z programu na extrahovanie textu z reči

Odteraz sa bude používanie hlasovej služby meniť v závislosti od použitého programu. Tentokrát k nemu pristupujem z počítačovej aplikácie .NET, ale ak používate iný framework, skúste ho použiť na internete. Oficiálna webová stránka obsahuje aj pokyny, ako ju používať v niekoľkých jazykoch.

Tentokrát vytvárame počítačovú aplikáciu WPF v Visual Studio 2022. V prípade kódu Visual Studio je to trochu nepríjemné, pretože neexistuje žiadny dizajnér, ale ak extrahujete iba časť programu, je možné ju použiť v konzolovej aplikácii alebo webovej aplikácii.

Vytvorenie projektu

Spustite Visual Studio 2022.

Vyberte položku Vytvoriť nový projekt.

Vyberte položku Aplikácia WPF.

Názov projektu a umiestnenie sú ľubovoľné. Po zadaní vyberte položku Ďalej.

Verzia sa nazýva ". NET 6,0". Po nastavení kliknite na tlačidlo "Vytvoriť".

NuGet nastavenia

Prístup k rozhraniu Api Microsoft Azure môžete vytvoriť od začiatku, ale jeho používanie je jednoduchšie, pretože už máte oficiálnu knižnicu.

Kliknite pravým tlačidlom myši na položku Závislosti pre riešenie a vyberte položku Spravovať balíky NuGet.

Vyberte kartu "Prehľadávať", do vyhľadávacieho vstupného poľa zadajte "Microsoft.CognitiveServices.Speech" a zobrazí sa zoznam, takže vyberte "Microsoft.CognitiveServices.Speech" a kliknite na tlačidlo Inštalovať.

Kliknite na tlačidlo OK.

Vyberte položku Súhlasím.

Po dokončení sa pridá do balíka.

Vytvorenie používateľského rozhrania

Tentokrát zadáme súbor WAV obsahujúci zvuk a extrahujeme obsah konverzácie do textu pomocou rozhrania Speech API a zobrazíme ho. Zatiaľ nechajte prostredie závislé od vstupného poľa, aby ste mohli kód použiť skopírovaním a prilepením.

Obrazovka by mala vyzerať takto: Keďže je zahrnutá iba minimálna suma, ak chcete pridať napríklad tlačidlo odkazu na súbor, implementujte ho sami.

MainWindow.xaml je nasledovná:

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

Vytvorenie procesu

Program ExecuteButton_Click je zabalený do metód. Ak ho chcete použiť v iných rámcoch, prepíšte tento kód ako základ.

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

Keďže vysvetlenie je takmer napísané v kódexe, nebudem podrobne vysvetľovať, ale ak nastolíte dôležitú časť, bude to nasledovné.

  • SpeechConfig Konfigurácia hlasových služieb v
  • AudioConfig Nastavenie hlasových údajov v
  • SpeechRecognizer Vygenerovať triedu spracovania v
  • Údaje o reči sa analyzujú jeden po druhom a dokončený text SpeechRecognizer.Recognized sa z času na čas odovzdáva v udalosti.
  • Ak je spracovanie z nejakého dôvodu dokončené, SpeechRecognizer.Canceled nazýva sa udalosť
  • Začiatok spracovania sa SpeechRecognizer.StartContinuousRecognitionAsync nazýva metóda a dokončenie spracovania sa SpeechRecognizer.StopContinuousRecognitionAsync nazýva metóda.

Kontrola prevádzky

Po vytvorení programu ho spustite, zadajte potrebné položky a stlačte tlačidlo spustiť. Ak ste zadali správny zvukový súbor, zvuk by sa mal prehrať a text by sa mal extrahovať jeden po druhom pomocou hlasovej služby Microsoft Azure v zákulisí.

Systém extrakcie nie je dokonalý, pretože závisí od hlasovej služby Microsoft Azure, Ak je hlas tichý a hovorí jasne, myslím si, že bude extrahovaný so značnou presnosťou. Keďže ide o cloudovú službu, aj keď presnosť teraz nie je taká vysoká, môže sa zlepšovať skôr, ako si to uvedomíte, takže je ľahké v tejto oblasti nič nerobiť.