Utilitzar el servei de veu del Microsoft Azure per extreure text d'un fitxer d'àudio

Pàgina actualitzada :
Data de creació de la pàgina :

Entorn de comprovació de l'operació

Serveis de veu del Microsoft Azure
  • Edició juliol 2022
Estudi Visual
  • Visual Studio 2022
.NET
  • 6.0

Precondició

Per poder verificar que aquests Consells funcionen, heu de:

Sobre els materials de mostra

Demanem prestat fitxers d'àudio del lloc següent. No s'inclou en el codi d'exemple.

Enllaços externs

Al principi

A tall d'exemple, per gravar el contingut de la reunió, etc., es graven els continguts de la conversa i, posteriorment, per crear l'acta de la reunió, s'escolta l'àudio gravat i es transcriu en text. Tanmateix, és fàcil imaginar que és molt problemàtic escriure el contingut de la conversa en una frase.

A continuació s'explica com utilitzar el servei Microsoft Azure Speech per exportar i emetre automàticament dades de veu a text. En l'exemple anterior, es tracta d'un enregistrament de la reunió, però en aquest Consells, s'extreu de l'arxiu d'àudio, de manera que es pot aplicar a qualsevol cosa que contingui contingut de conversa.

A més, aquesta vegada estem parlant de transcriure a text, També podeu utilitzar el servei de veu Microsoft Azure per convertir i traduir durant la gravació.

Sobre les tarifes

Aquesta vegada, utilitzarem el pla gratuït, de manera que, fins i tot si intenteu operar, no se us cobrarà. Tanmateix, el pla gratuït té límits de temps i caràcters, de manera que si necessiteu més conversions després d'operar-lo, canvieu a un pla de pagament.

Consulteu la pàgina oficial següent per obtenir preus. Com que es tracta d'un servei al núvol, la tarifa pot fluctuar en funció de la temporada.

Accediu al portal microsoft Azure

Accedeixi a la següent URL en un navegador web:

Si ja heu iniciat la sessió, ja heu acabat. Si encara no heu iniciat la sessió, es mostrarà la pantalla següent, així que inicieu la sessió.

Quan inicieu la sessió, es mostrarà la pantalla següent. Depenent del disseny que configureu, la pantalla pot ser diferent.

Crear un servei de veu al Microsoft Azure

Si introduïu "veu" al camp d'entrada de cerca que hi ha a sobre del portal, sortirà "servei de veu", així que seleccioneu-lo.

「| de Serveis Cognitius Quan es mostri la pantalla "Servei de veu", seleccioneu "Crea".

S'obre la pantalla "Crea serveis de veu", de manera que introduïu els elements necessaris.

Informació bàsica

Exemple de
contingut d'entrada d'elements
subscripció Selecciona les subscripcions per les quals vols pagar. Fins i tot si és gratuït, sempre heu de vincular-lo a algun tipus de subscripció.
Grups de recursos Especifica en quin grup de recursos s'ha d'incloure el servei de veu que s'ha de crear. Si encara no n'heu creat cap, creeu-ne un des de "Nou" a continuació. Podeu pensar en grups de recursos com a agrupacions quan creeu diversos serveis.
Regió Trieu a prop d'un lloc on és possible que l'utilitzeu més sovint. Tanmateix, tingueu en compte que els preus poden variar segons la regió. Japó Est
nom Qualsevol nom per a aquest servei de veu. Si esteu creant més d'un servei de veu, assegureu-vos que el nom sigui descriptiu. Aquest nom és global i únic, de manera que no podeu utilitzar un nom que s'utilitzi en altres llocs. SpeechToText-Test
Nivell de preus Si voleu utilitzar-lo gratuïtament, trieu "Free F0". Si voleu utilitzar-lo per una tarifa, trieu un altre pla. Per descomptat, hi ha restriccions si és gratuït. Gratuït F0

Un cop introduït, seleccioneu Següent: Xarxa > a continuació.

xarxa

Exemple de
contingut d'entrada d'elements
amable Especifica l'interval des del qual és accessible aquest servei de veu. Si voleu poder accedir-hi des de qualsevol lloc sense cap configuració detallada, seleccioneu "Incloent Internet...". "Es pot accedir des de qualsevol lloc" també significa "qualsevol persona hi pot accedir", però de fet només hi poden accedir aquells que tinguin la "clau" que s'adquirirà després d'això, de manera que no és tant un problema en termes de seguretat. Incloent Internet ...

Un cop l'hàgiu introduït, seleccioneu Següent: Identitat > a continuació.

Identitat

Exemple de
contingut d'entrada d'elements
Identificador gestionat assignat al sistema Aquesta vegada utilitzo el servei de veu sol, així que és bo desactivar-lo. apagat
Identificador gestionat assignat per l'usuari No necessito afegir-lo perquè aquesta vegada no creo un usuari. sense

Un cop l'hagis introduït, selecciona Següent: Etiqueta > a continuació.

etiqueta

Com que l'etiqueta no s'utilitza aquesta vegada, no està configurada.

Un cop introduït, seleccioneu Següent: Reviseu i creeu > a continuació.

Revisa i crea

Si no hi ha problemes amb el contingut d'entrada, es mostrarà "Validació reeixida". Si hi ha un problema, es mostrarà un missatge d'error, així que torneu enrere i torneu-lo a configurar.

Si no hi ha cap problema amb el contingut d'entrada, feu clic al botó "Crea". Aleshores començarà el desplegament.

Al cap d'un temps, la implementació es completa i es mostra la pantalla següent. El nom de la implementació és llarg, però no us heu de preocupar perquè és temporal en desplegament.

Podeu fer clic al botó Vés al recurs per verificar que s'ha creat el servei de veu.

Generació i recuperació de claus

Es requereix una clau d'autenticació per accedir a aquest servei de veu des del client. Com que només és accessible pel programa que té aquesta clau, cal evitar que aquesta clau sigui robada per un tercer.

"Client" aquí fa referència a tots els programes que utilitzen Microsoft Azure, com ara aplicacions d'escriptori, aplicacions per a telèfons intel·ligents i aplicacions web.

Per obtenir la clau, aneu al servei de veu que heu creat. S'hi pot accedir des de quadres de comandament, grups de recursos, etc.

Quan s'obri la pàgina Serveis de veu, seleccioneu Tecles i punts finals al menú de l'esquerra.

A continuació, s'obrirà la pàgina "Clau i punt final" i es mostraran els elements "Clau 1", "Clau 2", "Ubicació/Regió" i "Punt final".

Tots dos elements són necessaris, però "Clau 2" és un marc de recanvi, de manera que no s'utilitza en la majoria dels casos.

Anoteu cada valor. Com s'esmenta a la descripció, no compartiu la clau amb les parts de desenvolupament inesperadament.

Si es filtra la clau, feu clic a "Regenerar la clau 1" anterior per emetre una nova clau. Per descomptat, tingueu en compte que, en aquest cas, la clau anterior ja no serà utilitzable.

Utilitzar un servei de veu d'un programa per extreure text de la parla

A partir d'ara, l'ús del servei de veu canviarà en funció del programa utilitzat. Aquesta vegada, hi accediré des d'una aplicació d'escriptori .NET, però si utilitzeu un altre marc, proveu d'utilitzar-lo a Internet. El lloc web oficial també té instruccions sobre com utilitzar-lo en diversos idiomes.

Aquesta vegada, estem creant una aplicació d'escriptori WPF al Visual Studio 2022. En el cas de Visual Studio Code, és una mica problemàtic perquè no hi ha dissenyador, però si extraieu només la part del programa, és possible utilitzar-la en una aplicació de consola o en una aplicació web.

Crea un projecte

Inicieu Visual Studio 2022.

Seleccioneu Crea un projecte nou.

Seleccioneu Aplicació WPF.

El nom i la ubicació del projecte són arbitraris. Un cop introduït, seleccioneu Següent.

La versió es diu ". XARXA 6.0". Un cop configurat, feu clic al botó "Crea".

Configuració de NuGet

Podeu crear accés a l'API de Microsoft Azure des de zero, però és més fàcil utilitzar-la perquè ja teniu una biblioteca oficial.

Feu clic amb el botó dret a Dependències per a la solució i seleccioneu Administra els paquets NuGet.

Seleccioneu la pestanya "Navega", introduïu "Microsoft.CognitiveServices.Speech" al camp d'entrada de cerca i es mostrarà una llista, de manera que seleccioneu "Microsoft.CognitiveServices.Speech" i feu clic al botó Instal·la.

Feu clic al botó D'acord.

Seleccioneu Estic d'acord.

Quan hàgiu acabat, s'afegirà al paquet.

Creació de la interfície d'usuari

Aquesta vegada, especificarem un fitxer WAV que conté àudio i extraurem el contingut de la conversa en text amb l'API de veu i el mostrarem. De moment, deixeu l'entorn dependent del camp d'entrada perquè pugueu utilitzar el codi copiant i enganxant.

La pantalla hauria de tenir aquest aspecte: Com que només s'inclou l'import mínim, si voleu afegir un botó de referència de fitxer, per exemple, implementeu-lo vosaltres mateixos.

MainWindow.xaml és la següent:

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

Creació d'un procés

El ExecuteButton_Click programa està tot embolicat en mètodes. Si voleu utilitzar-lo en altres marcs, torneu a escriure aquest codi com a 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("処理が終了しました。");
    }
  }
}

Com que l'explicació està gairebé escrita en el codi, no ho explicaré detalladament, però si plantegeu la part important, serà la següent.

  • SpeechConfig Configuració dels serveis de veu a
  • AudioConfig Configuració de dades de veu a
  • SpeechRecognizer Genereu classe de processament a
  • Les dades de veu s'analitzen un per un i el text SpeechRecognizer.Recognized completat es passa de tant en tant.
  • Si el processament s'acaba per algun motiu, SpeechRecognizer.Canceled es convoca un esdeveniment
  • L'inici del processament s'anomena SpeechRecognizer.StartContinuousRecognitionAsync mètode i la finalització del processament s'anomena SpeechRecognizer.StopContinuousRecognitionAsync mètode.

Comprovació de l'operació

Després de crear el programa, executeu-lo, introduïu els elements necessaris i premeu el botó Executar. Si heu especificat el fitxer d'àudio correcte, l'àudio s'hauria de reproduir i el text s'hauria d'extreure un a un mitjançant el servei de veu Microsoft Azure entre bastidors.

El sistema d'extracció no és perfecte perquè depèn del servei de veu de Microsoft Azure, Si la veu està tranquil·la i parla clar, crec que s'extraurà amb una precisió considerable. Com que és un servei al núvol, fins i tot si la precisió no és tan alta ara, pot ser que millori abans de conèixer-lo, de manera que és fàcil no fer res en aquesta zona.