Použití služby Microsoft Azure Speech k extrahování textu ze zvukového souboru

Stránky aktualizovány :
Datum vytvoření stránky :

Prostředí pro kontrolu provozu

Hlasové služby Microsoft Azure
  • Vydání z července 2022
Vizuální sada
  • Vizuální sada 2022
Rozhraní .NET
  • 6.0

předpoklad

Než budete moci ověřit, zda tyto tipy fungují, musíte:

O vzorových materiálech

Zvukové soubory si půjčujeme z následujícího webu. Není součástí ukázkového kódu.

Externí odkazy

Nejprve

Například za účelem zaznamenání obsahu schůzky atd. Je zaznamenán obsah konverzace a později za účelem vytvoření zápisu ze schůzky je zaznamenaný zvuk slyšen a přepsán do textu. Je však snadné si představit, že je velmi obtížné zapsat obsah konverzace do věty.

Tady je postup, jak pomocí služby Microsoft Azure Speech automaticky exportovat a vysílat data řeči do textu. V předchozím příkladu se jedná o záznam schůzky, ale v tomto Tipy je extrahován ze zvukového souboru, takže jej lze použít na cokoli, co obsahuje obsah konverzace.

Také tentokrát mluvíme o přepisu na text, Během nahrávání můžete také použít hlasovou službu Microsoft Azure k převodu a překladu.

O poplatcích

Tentokrát použijeme bezplatný plán, takže i když se pokusíte operovat, nebude vám účtován poplatek. Bezplatný plán má však časové a charakterové limity, takže pokud potřebujete další konverzi po jeho skutečném provozu, přejděte na placený plán.

Ceny naleznete na následující oficiální stránce. Vzhledem k tomu, že se jedná o cloudovou službu, může poplatek kolísat v závislosti na ročním období.

Přístup k portálu Microsoft Azure

Ve webovém prohlížeči přejděte na následující adresu URL:

Pokud jste již přihlášeni, jste hotovi. Pokud ještě nejste přihlášeni, zobrazí se následující obrazovka, proto se prosím přihlaste.

Po přihlášení se zobrazí následující obrazovka. V závislosti na designu, který nastavujete, se displej může lišit.

Vytvoření hlasové služby v Microsoft Azure

Pokud do vyhledávacího pole nad portálem zadáte "hlas", vyjde "hlasová služba", takže ji vyberte.

「Cognitive Services | Po zobrazení obrazovky "Hlasová služba" vyberte možnost "Vytvořit".

Otevře se obrazovka "Vytvořit hlasové služby", takže zadejte potřebné položky.

Základy

Příklad vstupního
obsahu položek
předplatné Vyberte předplatná, za která chcete zaplatit. I když je to zdarma, vždy je třeba je spojit s nějakým druhem předplatného.
Skupiny prostředků Určuje, do které skupiny prostředků má být hlasová služba, která má být vytvořena, zahrnuta. Pokud jste jej ještě nevytvořili, vytvořte jej z níže uvedeného seznamu "Nový". Skupiny prostředků si můžete představit jako seskupení při vytváření různých služeb.
Oblast Vyberte si v blízkosti místa, kde byste ji mohli používat nejčastěji. Upozorňujeme však, že ceny se mohou v jednotlivých regionech lišit. Japonsko – východ
Jméno Libovolný název této hlasové služby. Pokud vytváříte více než jednu hlasovou službu, ujistěte se, že název je popisný. Tento název je globální a jedinečný, takže nemůžete použít název, který se používá jinde. SpeechToText-Test
Cenová úroveň Pokud jej chcete používat zdarma, zvolte "Free F0". Pokud jej chcete použít za poplatek, vyberte si jiný plán. Samozřejmě existují omezení, pokud je zdarma. Zdarma F0

Po zadání vyberte další: Síťová > níže.

síť

Příklad vstupního
obsahu položek
laskavý Určuje rozsah, ze kterého je tato hlasová služba přístupná. Pokud k němu chcete mít přístup odkudkoli bez podrobného nastavení, vyberte "Včetně Internetu...". "Lze k němu přistupovat odkudkoli" také znamená "kdokoli k němu má přístup", ale ve skutečnosti k němu mají přístup pouze ti, kteří mají "klíč", který má být získán poté, takže to není tak velký problém z hlediska bezpečnosti. Včetně internetu...

Po zadání vyberte níže Další: > identity.

Identita

Příklad vstupního
obsahu položek
Spravované ID přiřazené systémem Tentokrát používám hlasovou službu samotnou, takže je dobré ji vypnout. pryč
Spravované ID přiřazené uživatelem Nemusím ho přidávat, protože tentokrát nevytvářím uživatele. bez

Po zadání vyberte níže další: > značek.

značka

Vzhledem k tomu, že značka není tentokrát použita, není nastavena.

Po zadání vyberte Další: Zkontrolovat a vytvořit > níže.

Kontrola a vytvoření

Pokud nejsou žádné problémy se vstupním obsahem, zobrazí se zpráva "Ověření proběhlo úspěšně". Pokud se vyskytne problém, zobrazí se chybová zpráva, takže se vraťte a nastavte ji znovu.

Pokud není problém se vstupním obsahem, klikněte na tlačítko "Vytvořit". Poté začne nasazení.

Po chvíli je nasazení dokončeno a zobrazí se následující obrazovka. Název nasazení je dlouhý, ale nemusíte se o něj starat, protože je v nasazení dočasný.

Kliknutím na tlačítko Přejít na prostředek můžete ověřit, zda byla hlasová služba vytvořena.

Generování a načítání klíčů

Pro přístup k této hlasové službě z klienta je vyžadován ověřovací klíč. Vzhledem k tomu, že je přístupný pouze programem, který má tento klíč, je nutné zabránit tomu, aby byl tento klíč odcizen třetí stranou.

"Klient" zde odkazuje na všechny programy, které používají Microsoft Azure, jako jsou desktopové aplikace, aplikace pro smartphony a webové aplikace.

Chcete-li získat klíč, přejděte na hlasovou službu, kterou jste vytvořili. Je přístupný z řídicích panelů, skupin prostředků atd.

Když se otevře stránka Hlasové služby, vyberte v nabídce vlevo Klíče a koncové body.

Poté se otevře stránka "Klíč a koncový bod" a zobrazí se položky "Klíč 1", "Klíč 2", "Umístění/oblast" a "Koncový bod".

Obě položky jsou nezbytné, ale "Key 2" je náhradní rám, takže se ve většině případů nepoužívá.

Poznamenejte si každou hodnotu. Jak je uvedeno v popisu, nesdílejte klíč s vývojovými stranami neočekávaně.

Pokud klíč neunikne, klikněte na "Znovu vygenerovat klíč 1" výše a vydáte nový klíč. Samozřejmě si uvědomte, že v tomto případě již nebude předchozí klíč použitelný.

Použití hlasové služby z programu k extrahování textu z řeči

Od této chvíle se používání hlasové služby bude měnit v závislosti na použitém programu. Tentokrát k němu přistoupím z desktopové aplikace .NET, ale pokud používáte jinou architekturu, zkuste ji použít na internetu. Oficiální webové stránky mají také pokyny, jak jej používat v několika jazycích.

Tentokrát vytváříme desktopovou aplikaci WPF v sadě Visual Studio 2022. V případě Visual Studio Code je to trochu nepříjemné, protože neexistuje žádný návrhář, ale pokud extrahujete pouze část programu, je možné ji použít v konzolové aplikaci nebo webové aplikaci.

Vytvořit projekt

Spusťte aplikaci Visual Studio 2022.

Vyberte Vytvořit nový projekt.

Vyberte Možnost Aplikace WPF.

Název projektu a umístění jsou libovolné. Po zadání vyberte Další.

Verze se nazývá ". NET 6.0". Po nastavení klikněte na tlačítko "Vytvořit".

Nastavení NuGet

Přístup k rozhraní Microsoft Azure API můžete vytvořit od začátku, ale je jednodušší ho používat, protože už máte oficiální knihovnu.

Klikněte pravým tlačítkem na závislosti pro řešení a vyberte Spravovat balíčky NuGet.

Vyberte kartu "Procházet", do pole pro zadání vyhledávání zadejte "Microsoft.CognitiveServices.Speech" a zobrazí se seznam, takže vyberte "Microsoft.CognitiveServices.Speech" a klikněte na tlačítko Instalovat.

Klikněte na ikonu OK knoflík.

Vyberte Souhlasím.

Až budete hotovi, bude přidán do balíčku.

Vytvoření uživatelského rozhraní

Tentokrát určíme soubor WAV obsahující zvuk a extrahujeme obsah konverzace do textu pomocí rozhraní Speech API a zobrazíme jej. Prozatím ponechte prostředí závislé na vstupním poli, abyste mohli kód použít kopírováním a vkládáním.

Obrazovka by měla vypadat takto: Vzhledem k tomu, že je zahrnuta pouze minimální částka, pokud chcete například přidat referenční tlačítko pro soubor, implementujte jej sami.

MainWindow.xaml je následující:

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

Vytvoření procesu

Program ExecuteButton_Click je zabalen do metod. Pokud ho chcete použít v jiných architekturách, přepište tento kód jako základ.

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

Vzhledem k tomu, že vysvětlení je téměř napsáno v kódu, nebudu podrobně vysvětlovat, ale pokud zvednete důležitou část, bude to následující.

  • SpeechConfig Konfigurace hlasových služeb v
  • AudioConfig Nastavení hlasových dat v
  • SpeechRecognizer Generovat třídu zpracování v
  • Data řeči jsou analyzována jeden po druhém a dokončený text SpeechRecognizer.Recognized je čas od času předán v události.
  • Pokud je zpracování z nějakého důvodu dokončeno, SpeechRecognizer.Canceled je volána událost
  • Začátek zpracování se nazývá SpeechRecognizer.StartContinuousRecognitionAsync metoda a dokončení zpracování se nazývá SpeechRecognizer.StopContinuousRecognitionAsync metoda.

Kontrola provozu

Po vytvoření programu jej spusťte, zadejte potřebné položky a stiskněte tlačítko spustit. Pokud jste zadali správný zvukový soubor, měl by se zvuk přehrát a text by měl být extrahován jeden po druhém pomocí hlasové služby Microsoft Azure na pozadí.

Systém extrakce není dokonalý, protože závisí na hlasové službě Microsoft Azure, Pokud je hlas tichý a mluví jasně, myslím, že bude extrahován se značnou přesností. Vzhledem k tomu, že se jedná o cloudovou službu, i když přesnost není nyní tak vysoká, může se zlepšit, než si to uvědomíte, takže je snadné v této oblasti nic nedělat.