Utilizarea serviciului Microsoft Azure Speech pentru a extrage text dintr-un fișier audio

Pagina actualizată :
Data creării paginii :

Mediul de verificare a operațiunilor

Servicii de voce Microsoft Azure
  • Ediția iulie 2022
Visual Studio
  • Visual Studio 2022
.NET
  • 6.0

Condiție prealabilă

Înainte de a putea verifica dacă aceste sfaturi funcționează, trebuie să:

Despre materialele eșantion

Împrumutăm fișiere audio de pe următorul site. Acesta nu este inclus în codul eșantionului.

Link-uri externe

La început

De exemplu, pentru a înregistra conținutul întâlnirii etc., conținutul conversației este înregistrat, iar mai târziu, pentru a crea procesul-verbal al întâlnirii, sunetul înregistrat este auzit și transcris în text. Cu toate acestea, este ușor să ne imaginăm că este foarte supărător să notați conținutul conversației într-o propoziție.

Iată cum să utilizați serviciul Vorbire Microsoft Azure pentru a exporta și a afișa automat date de vorbire în text. În exemplul anterior, este o înregistrare a întâlnirii, dar în acest Sfaturi, este extrasă din fișierul audio, astfel încât să poată fi aplicată la orice conține conținut de conversație.

De asemenea, de data aceasta vorbim despre transcrierea la text, De asemenea, puteți utiliza serviciul de voce Microsoft Azure pentru a efectua conversia și traducerea în timpul înregistrării.

Despre taxe

De data aceasta, vom folosi planul gratuit, astfel încât, chiar dacă încercați să operați, nu veți fi taxat. Cu toate acestea, planul gratuit are limite de timp și de caractere, deci dacă aveți nevoie de mai multă conversie după ce îl operați efectiv, vă rugăm să treceți la un plan plătit.

Vă rugăm să consultați următoarea pagină oficială pentru prețuri. Deoarece este un serviciu cloud, taxa poate fluctua în funcție de sezon.

Accesați portalul Microsoft Azure

Accesați următoarea adresă URL într-un browser web:

Dacă v-ați conectat deja, ați terminat. Dacă nu sunteți deja conectat, va fi afișat următorul ecran, așa că vă rugăm să vă conectați.

Când vă conectați, se va afișa următorul ecran. În funcție de designul pe care îl setați, afișajul poate fi diferit.

Crearea unui serviciu de voce în Microsoft Azure

Dacă introduceți "voce" în câmpul de introducere a căutării de deasupra portalului, "serviciu de voce" va ieși, așa că selectați-l.

「Servicii cognitive | Când se afișează ecranul "Serviciu vocal", selectați "Creare".

Se deschide ecranul "Creare servicii de vorbire", așa că introduceți elementele necesare.

Cunoștințe de bază

Exemplu de
conținut de intrare al elementelor
abonament Selectați abonamentele pentru care doriți să plătiți. Chiar dacă este gratuit, trebuie întotdeauna să-l legați de un fel de abonament.
Grupuri de resurse Specifică în ce grup de resurse trebuie să includă serviciul de voce care urmează să fie creat. Dacă nu ați creat încă unul, vă rugăm să creați unul din "Nou" de mai jos. Vă puteți gândi la grupurile de resurse ca la grupări atunci când creați diverse servicii.
Regiune Alegeți lângă un loc în care l-ați putea folosi cel mai des. Cu toate acestea, vă rugăm să rețineți că prețurile pot varia în funcție de regiune. Japonia de Est
nume Orice nume pentru acest serviciu de voce. Dacă creați mai multe servicii de voce, asigurați-vă că numele este descriptiv. Acest nume este global și unic, deci nu puteți utiliza un nume care este utilizat în altă parte. SpeechToText-Test
Nivelul de stabilire a prețurilor Dacă doriți să-l utilizați gratuit, alegeți "F0 gratuit". Dacă doriți să-l utilizați contra cost, vă rugăm să alegeți un alt plan. Desigur, există restricții dacă este gratuit. F0 gratuit

Odată introdus, selectați Următorul: Rețea > mai jos.

rețea

Exemplu de
conținut de intrare al elementelor
fel Specifică intervalul de la care este accesibil acest serviciu de voce. Dacă doriți să îl puteți accesa de oriunde, fără setări detaliate, selectați "Inclusiv internetul...". "Poate fi accesat de oriunde" înseamnă și "oricine îl poate accesa", dar, de fapt, numai cei care au "cheia" de achiziționat după aceasta o pot accesa, deci nu este atât de mult o problemă în ceea ce privește securitatea. Inclusiv internetul...

După ce l-ați introdus, selectați Următorul: Identitate > mai jos.

Identitate

Exemplu de
conținut de intrare al elementelor
ID-ul gestionat atribuit de sistem De data aceasta folosesc serviciul de voce singur, deci este bine să-l opriți. Off
ID gestionat atribuit de utilizator Nu am nevoie să-l adăugați pentru că nu am crea un utilizator de data aceasta. fără

După ce l-ați introdus, selectați Următorul: Etichetați > mai jos.

etichetă

Deoarece eticheta nu este utilizată de această dată, nu este setată.

Odată introdus, selectați Următorul: Revizuiți și creați > mai jos.

Revizuirea și crearea

Dacă nu există probleme cu conținutul de intrare, se afișează "Validare reușită". Dacă există o problemă, se va afișa un mesaj de eroare, așa că reveniți și setați-o din nou.

Dacă nu există nicio problemă cu conținutul de intrare, faceți clic pe butonul "Creare". Apoi va începe implementarea.

După un timp, implementarea este finalizată și se afișează următorul ecran. Numele implementării este lung, dar nu trebuie să vă faceți griji, deoarece este temporar în implementare.

Puteți face clic pe butonul Salt la resursă pentru a verifica dacă serviciul de voce a fost creat.

Generarea și regăsirea cheilor

Este necesară o cheie de autentificare pentru a accesa acest serviciu de voce de la client. Deoarece este accesibil numai prin programul care are această cheie, este necesar să se împiedice ca această cheie să fie furată de o terță parte.

"Client" se referă aici la toate programele care utilizează Microsoft Azure, cum ar fi aplicații desktop, aplicații pentru smartphone și aplicații web.

Pentru a obține cheia, accesați serviciul de voce pe care l-ați creat. Poate fi accesat din tablouri de bord, grupuri de resurse și așa mai departe.

Când se deschide pagina Servicii de voce, selectați Taste și puncte finale din meniul din stânga.

Apoi, se va deschide pagina "Cheie și punct final" și vor fi afișate elementele "Cheie 1", "Cheie 2", "Locație/Regiune" și "Punct final".

Ambele elemente sunt necesare, dar "Cheia 2" este un cadru de rezervă, deci nu este utilizat în majoritatea cazurilor.

Notați fiecare valoare. După cum se menționează în descriere, vă rugăm să nu împărtășiți cheia cu părțile de dezvoltare în mod neașteptat.

Dacă cheia este scursă, faceți clic pe "Regenerare cheie 1" de mai sus pentru a emite o cheie nouă. Desigur, rețineți că, în acest caz, cheia anterioară nu va mai fi utilizabilă.

Utilizarea unui serviciu de vorbire dintr-un program pentru a extrage text din vorbire

De acum înainte, utilizarea serviciului de voce se va schimba în funcție de programul utilizat. De data aceasta, îl voi accesa dintr-o aplicație desktop .NET, dar dacă utilizați un alt cadru, încercați să îl utilizați pe Internet. Site-ul oficial are, de asemenea, instrucțiuni despre cum să-l utilizați în mai multe limbi.

De data aceasta, creăm o aplicație desktop WPF în Visual Studio 2022. În cazul Visual Studio Code, este puțin supărător, deoarece nu există designer, dar dacă extrageți numai partea de program, este posibil să o utilizați într-o aplicație de consolă sau într-o aplicație web.

Crearea proiectului

Porniți Visual Studio 2022.

Selectați Creare proiect nou.

Selectați Aplicația WPF.

Numele proiectului și locația sunt arbitrare. Odată introdus, selectați Următorul.

Versiunea se numește ". NET 6.0 ". Odată setat, faceți clic pe butonul "Creare".

Setări NuGet

Puteți crea acces la API-ul Microsoft Azure de la zero, dar este mai ușor să îl utilizați, deoarece aveți deja o bibliotecă oficială.

Faceți clic dreapta pe Dependențe pentru soluție și selectați Gestionare pachete NuGet.

Selectați fila "Răsfoire", introduceți "Microsoft.CognitiveServices.Speech" în câmpul de introducere a căutării și se va afișa o listă, deci selectați "Microsoft.CognitiveServices.Speech" și faceți clic pe butonul Instalare.

Faceți clic pe ok butonul.

Selectați Sunt de acord.

Când ați terminat, acesta va fi adăugat la pachet.

Crearea interfeței de utilizator

De data aceasta, vom specifica un fișier WAV care conține audio și vom extrage conținutul conversației în text cu API-ul Speech și îl vom face afișat. Pentru moment, lăsați mediul dependent de câmpul de intrare, astfel încât să puteți utiliza codul prin copiere și lipire.

Ecranul ar trebui să arate astfel: Deoarece este inclusă numai suma minimă, dacă doriți să adăugați un buton de referință a fișierului, de exemplu, vă rugăm să îl implementați singur.

MainWindow.xaml este după cum urmează:

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

Crearea unui proces

Programul ExecuteButton_Click este înfășurat în toate în metode. Dacă doriți să-l utilizați în alte cadre, rescrieți acest cod ca bază.

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

Deoarece explicația este aproape scrisă în cod, nu voi explica în detaliu, dar dacă ridicați partea importantă, va fi după cum urmează.

  • SpeechConfig Configurarea serviciilor de voce în
  • AudioConfig Configurarea datelor vocale în
  • SpeechRecognizer Generați clasa de procesare în
  • Datele de vorbire sunt analizate unul câte unul, iar textul SpeechRecognizer.Recognized completat este transmis în cadrul evenimentului din când în când.
  • Dacă procesarea este terminată dintr-un anumit motiv, SpeechRecognizer.Canceled se numește un eveniment
  • Începerea procesării se numește SpeechRecognizer.StartContinuousRecognitionAsync metodă, iar finalizarea procesării se numește SpeechRecognizer.StopContinuousRecognitionAsync metodă.

Verificarea funcționării

După crearea programului, executați-l, introduceți elementele necesare și apăsați butonul executare. Dacă ați specificat fișierul audio corect, audio ar trebui să se redea și textul ar trebui să fie extrase unul câte unul utilizând serviciul de voce Microsoft Azure în spatele scenei.

Sistemul de extracție nu este perfect, deoarece depinde de serviciul de voce Microsoft Azure, Dacă vocea este liniștită și vorbește clar, cred că va fi extrasă cu o precizie considerabilă. Deoarece este un serviciu cloud, chiar dacă precizia nu este atât de mare acum, poate fi din ce în ce mai bine înainte de a-l cunoaște, deci este ușor să nu faceți nimic în acel domeniu.