Usare il servizio Riconoscimento vocale di Microsoft Azure per estrarre testo da un file audio

Pagina aggiornata :
Data di creazione della pagina :

Ambiente di controllo del funzionamento

Servizi vocali di Microsoft Azure
  • Edizione luglio 2022
Visual Studio
  • Visual Studio 2022
.NET
  • 6.0

precondizione

Prima di poter verificare che questo Suggerimenti funzioni, è necessario:

Informazioni sui materiali campione

Prendiamo in prestito file audio dal seguente sito. Non è incluso nel codice di esempio.

Collegamenti esterni

Dapprima

Ad esempio, al fine di registrare il contenuto della riunione, ecc., I contenuti della conversazione vengono registrati e successivamente per creare i verbali della riunione, l'audio registrato viene ascoltato e trascritto in testo. Tuttavia, è facile immaginare che sia molto fastidioso scrivere il contenuto della conversazione in una frase.

Ecco come usare il servizio Riconoscimento vocale di Microsoft Azure per esportare e inviare automaticamente i dati vocali in testo. Nell'esempio precedente, è una registrazione della riunione, ma in questo Suggerimenti viene estratta dal file audio, quindi può essere applicata a tutto ciò che contiene contenuti di conversazione.

Inoltre, questa volta stiamo parlando di trascrivere in testo, È inoltre possibile usare il servizio vocale di Microsoft Azure per convertire e tradurre durante la registrazione.

Informazioni sulle tariffe

Questa volta, useremo il piano gratuito, quindi anche se provi a operare, non ti verrà addebitato alcun costo. Tuttavia, il piano gratuito ha limiti di tempo e caratteri, quindi se hai bisogno di più conversione dopo averlo effettivamente utilizzato, passa a un piano a pagamento.

Si prega di fare riferimento alla seguente pagina ufficiale per i prezzi. Poiché si tratta di un servizio cloud, la tariffa può variare a seconda della stagione.

Accedere al portale di Microsoft Azure

Accedere al seguente URL in un browser Web:

Se hai già effettuato l'accesso, il gioco è fatto. Se non hai già effettuato l'accesso, verrà visualizzata la seguente schermata, quindi accedi.

Quando si effettua l'accesso, verrà visualizzata la seguente schermata. A seconda del design che si sta impostando, il display potrebbe essere diverso.

Creare un servizio vocale in Microsoft Azure

Se inserisci "voce" nel campo di input di ricerca sopra il portale, uscirà "servizio vocale", quindi selezionalo.

「Servizi cognitivi | Quando viene visualizzata la schermata "Voice Service", selezionare "Crea".

Si apre la schermata "Crea servizi vocali", quindi inserisci gli elementi necessari.

Informazioni di base

Esempio di
contenuto di input di elementi
abbonamento Seleziona gli abbonamenti per i quali desideri pagare. Anche se è gratuito, devi sempre legarlo a qualche tipo di abbonamento.
Gruppi di risorse Specifica in quale gruppo di risorse deve essere incluso il servizio vocale da creare. Se non ne hai ancora creato uno, creane uno da "Nuovo" di seguito. È possibile pensare ai gruppi di risorse come raggruppamenti quando si creano vari servizi.
Regione Scegli vicino a un luogo in cui potresti usarlo più spesso. Tuttavia, si prega di notare che i prezzi possono variare in base alla regione. Giappone Est
nome Qualsiasi nome per questo servizio vocale. Se stai creando più di un servizio vocale, assicurati che il nome sia descrittivo. Questo nome è globale e univoco, pertanto non è possibile utilizzare un nome utilizzato altrove. SpeechToText-Test
Piano tariffario Se vuoi usarlo gratuitamente, scegli "Free F0". Se si desidera utilizzarlo a pagamento, si prega di scegliere un altro piano. Naturalmente, ci sono restrizioni se è gratuito. F0 gratis

Una volta inserito, seleziona Avanti: > di rete di seguito.

rete

Esempio di
contenuto di input di elementi
gentile Specifica l'intervallo da cui è accessibile il servizio vocale. Se vuoi potervi accedere da qualsiasi luogo senza alcuna impostazione dettagliata, seleziona "Incluso Internet ...". "Accessibile da qualsiasi luogo" significa anche "chiunque può accedervi", ma in realtà solo chi ha la "chiave" da acquisire dopo questo può accedervi, quindi non è tanto un problema in termini di sicurezza. Compreso Internet...

Dopo averlo inserito, seleziona Avanti: Identità > di seguito.

Identità

Esempio di
contenuto di input di elementi
ID gestito assegnato dal sistema Questa volta uso il servizio vocale da solo, quindi è bene spegnerlo. spento
ID gestito assegnato dall'utente Non ho bisogno di aggiungerlo perché questa volta non creo un utente. senza

Dopo averlo inserito, seleziona Avanti: tagga > di seguito.

cartellino

Poiché il tag non viene utilizzato questa volta, non è impostato.

Una volta inserito, seleziona Avanti: rivedi e crea > di seguito.

Rivedere e creare

Se non ci sono problemi con il contenuto di input, viene visualizzato "Convalida riuscita". Se si verifica un problema, verrà visualizzato un messaggio di errore, quindi torna indietro e impostalo di nuovo.

Se non ci sono problemi con il contenuto di input, fare clic sul pulsante "Crea". Quindi inizierà la distribuzione.

Dopo un po ', la distribuzione viene completata e viene visualizzata la schermata seguente. Il nome della distribuzione è lungo, ma non è necessario preoccuparsene perché è temporaneo nella distribuzione.

È possibile fare clic sul pulsante Vai a risorsa per verificare che il servizio vocale sia stato creato.

Generazione e recupero di chiavi

Per accedere a questo servizio vocale dal client è necessaria una chiave di autenticazione. Poiché è accessibile solo dal programma che ha questa chiave, è necessario impedire che questa chiave venga rubata da una terza parte.

"Client" qui si riferisce a tutti i programmi che usano Microsoft Azure, ad esempio app desktop, app per smartphone e app Web.

Per ottenere la chiave, vai al servizio vocale che hai creato. È possibile accedervi da dashboard, gruppi di risorse e così via.

Quando si apre la pagina Servizi vocali, seleziona Tasti ed endpoint dal menu a sinistra.

Quindi, si aprirà la pagina "Chiave ed endpoint" e verranno visualizzati gli elementi "Chiave 1", "Chiave 2", "Posizione / Regione" e "Endpoint".

Entrambi gli elementi sono necessari, ma "Key 2" è un telaio di riserva, quindi non viene utilizzato nella maggior parte dei casi.

Prendi nota di ogni valore. Come indicato nella descrizione, si prega di non condividere la chiave con le parti di sviluppo inaspettatamente.

Se la chiave è trapelata, fai clic su "Rigenera chiave 1" sopra per emettere una nuova chiave. Naturalmente, tieni presente che in questo caso, la chiave precedente non sarà più utilizzabile.

Usare un servizio vocale da un programma per estrarre testo dalla sintesi vocale

D'ora in poi, l'utilizzo del servizio vocale cambierà a seconda del programma utilizzato. Questa volta, vi accederò da un'applicazione desktop .NET, ma se stai usando un altro framework, prova a usarlo su Internet. Il sito ufficiale ha anche istruzioni su come usarlo in diverse lingue.

Questa volta stiamo creando un'app desktop WPF in Visual Studio 2022. Nel caso di Visual Studio Code, è un po 'problematico perché non esiste una finestra di progettazione, ma se si estrae solo la parte del programma, è possibile usarla in un'app console o in un'app Web.

Crea progetto

Avviare Visual Studio 2022.

Seleziona Crea nuovo progetto.

Selezionare Applicazione WPF.

Il nome e la posizione del progetto sono arbitrari. Una volta inserito, seleziona Avanti.

La versione si chiama ". NET 6.0". Una volta impostato, fai clic sul pulsante "Crea".

Impostazioni NuGet

È possibile creare l'accesso all'API di Microsoft Azure da zero, ma è più facile usarlo perché si dispone già di una libreria ufficiale.

Fare clic con il pulsante destro del mouse su Dipendenze per la soluzione e selezionare Gestisci pacchetti NuGet.

Seleziona la scheda "Sfoglia", inserisci "Microsoft.CognitiveServices.Speech" nel campo di input della ricerca e verrà visualizzato un elenco, quindi seleziona "Microsoft.CognitiveServices.Speech" e fai clic sul pulsante Installa.

Fare clic sul pulsante OK.

Seleziona Accetto.

Al termine, verrà aggiunto al pacchetto.

Creazione dell'interfaccia utente

Questa volta, specificheremo un file WAV contenente audio ed estrarremo il contenuto della conversazione in testo con l'API Speech e lo faremo visualizzare. Per il momento, lasciare l'ambiente dipendente dal campo di input in modo da poter utilizzare il codice copiando e incollando.

Lo schermo dovrebbe essere simile al seguente: Poiché è incluso solo l'importo minimo, se si desidera aggiungere un pulsante di riferimento del file, ad esempio, implementarlo manualmente.

MainWindow.xaml è il seguente:

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

Creazione di un processo

Il ExecuteButton_Click programma è tutto racchiuso in metodi. Se si desidera utilizzarlo in altri framework, riscrivere questo codice come 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("処理が終了しました。");
    }
  }
}

Poiché la spiegazione è quasi scritta nel codice, non spiegherò in dettaglio, ma se sollevi la parte importante, sarà la seguente.

  • SpeechConfig Configurazione dei servizi vocali in
  • AudioConfig Configurazione dei dati vocali in
  • SpeechRecognizer Genera classe di elaborazione in
  • I dati vocali vengono analizzati uno per uno e il testo SpeechRecognizer.Recognized completato viene passato nell'evento di volta in volta.
  • Se l'elaborazione è terminata per qualche motivo, SpeechRecognizer.Canceled viene chiamato un evento
  • L'inizio dell'elaborazione è SpeechRecognizer.StartContinuousRecognitionAsync chiamato metodo e il completamento dell'elaborazione è SpeechRecognizer.StopContinuousRecognitionAsync chiamato metodo.

Controllo del funzionamento

Dopo aver creato il programma, eseguilo, inserisci gli elementi necessari e premi il pulsante esegui. Se è stato specificato il file audio corretto, l'audio dovrebbe essere riprodotto e il testo dovrebbe essere estratto uno per uno usando il servizio vocale di Microsoft Azure dietro le quinte.

Il sistema di estrazione non è perfetto perché dipende dal servizio vocale di Microsoft Azure, Se la voce è silenziosa e parla chiaramente, penso che verrà estratta con notevole precisione. Poiché si tratta di un servizio cloud, anche se la precisione non è così elevata ora, potrebbe migliorare prima che tu te ne accorga, quindi è facile non fare nulla in quell'area.