Helifailist teksti ekstraktimiseks teenuse Microsoft Azure Speech kasutamine

Lehekülg uuendatud :
Lehe loomise kuupäev :

Toimingu kontrollimise keskkond

Microsoft Azure Voice Services
  • Juuli 2022 väljaanne
Visuaalne Stuudio
  • Visual Studio 2022
.NET
  • 6.0

eeltingimus

Enne kui saate kontrollida, kas see näpunäide töötab, peate tegema järgmist.

Proovimaterjalide kohta

Laename helifaile järgmiselt saidilt. See ei sisaldu näidiskoodis.

Välised lingid

Alguses

Näiteks koosoleku sisu jms salvestamiseks salvestatakse vestluse sisu ja hiljem koosoleku protokolli koostamiseks kuulatakse salvestatud heli ja transkribeeritakse tekstiks. Siiski on lihtne ette kujutada, et vestluse sisu on väga tülikas lausesse kirjutada.

Siit saate teada, kuidas kasutada Microsoft Azure'i kõneteenust kõneandmete automaatseks eksportimiseks ja tekstiks väljastamiseks. Eelmises näites on see koosoleku salvestus, kuid selles näpunäites ekstraheeritakse see helifailist, nii et seda saab rakendada kõigele, mis sisaldab vestluse sisu.

Samuti räägime seekord teksti ümberkirjutamisest, Salvestamise ajal teisendamiseks ja tõlkimiseks saate kasutada ka Microsoft Azure'i häälteenust.

Tasude kohta

Seekord kasutame tasuta paketti, nii et isegi kui proovite tegutseda, ei võeta teilt tasu. Tasuta plaanil on aga aja- ja tähemärgipiirangud, nii et kui vajate pärast selle tegelikku käitamist rohkem konversiooni, minge üle tasulisele plaanile.

Palun vaadake hinnakujunduse kohta järgmist ametlikku lehte. Kuna tegemist on pilveteenusega, võib tasu sõltuvalt aastaajast kõikuda.

Juurdepääs Microsoft Azure'i portaalile

Juurdepääs järgmisele URL-ile veebibrauseris:

Kui olete juba sisse logitud, olete valmis. Kui te pole veel sisse logitud, kuvatakse järgmine ekraan, seega logige sisse.

Sisselogimisel kuvatakse järgmine ekraan. Sõltuvalt seadistatavast kujundusest võib ekraan olla erinev.

Kõneteenuse loomine Microsoft Azure'is

Kui sisestate portaali kohal olevale otsingu sisendväljale "hääl", ilmub välja "häälteenus", nii et valige see.

「Kognitiivsete teenuste | Kui kuvatakse ekraan "Voice Service", valige "Create".

Avaneb ekraan "Loo kõneteenused", seega sisestage vajalikud elemendid.

Peamised

Üksuste sisendsisu näide
tellimus Valige tellimused, mille eest soovite maksta. Isegi kui see on tasuta, peate selle alati siduma mingisuguse tellimusega.
Ressursside rühmad Määrab, millisesse ressursigruppi loodav häälteenus kaasatakse. Kui te pole seda veel loonud, looge see allpool olevast jaotisest "Uus". Ressursirühmi saate mõelda rühmadena, kui loote erinevaid teenuseid.
Piirkond Valige koha lähedal, kus te seda kõige sagedamini kasutate. Pange tähele, et hinnad võivad piirkonniti erineda. Jaapanist ida suunas
Nimi Selle kõneteenuse mis tahes nimi. Kui loote rohkem kui ühte häälteenust, veenduge, et nimi oleks kirjeldav. See nimi on globaalne ja ainulaadne, nii et te ei saa kasutada mujal kasutatavat nime. SpeechToText-Test
Hinnatase Kui soovite seda tasuta kasutada, valige "Free F0". Kui soovite seda tasu eest kasutada, valige mõni muu pakett. Muidugi on piiranguid, kui see on tasuta. Tasuta F0

Kui olete sisestatud, valige allpool Next: Network >.

võrk

Üksuste sisendsisu näide
lahke – saate määrata vahemiku, millest alates sellele kõneteenusele juurde pääseb. Kui soovite, et pääseksite sellele juurde kõikjalt ilma üksikasjalike seadistusteta, valige "Sealhulgas Internet ...". "Saab juurde pääseda kõikjalt" tähendab ka "igaüks pääseb sellele juurde", kuid tegelikult pääsevad sellele juurde ainult need, kellel on pärast seda omandatav "võti", nii et see pole turvalisuse seisukohast nii suur probleem. Sealhulgas Internet...

Kui olete selle sisestanud, valige allpool Next: Identity >.

Identiteet

Üksuste sisendsisu näide
Süsteemile määratud hallatud ID Seekord kasutan kõneteenust üksi, seega on hea see välja lülitada. maha
Kasutajale määratud hallatud ID Ma ei pea seda lisama, sest ma ei loo seekord kasutajat. ilma

Kui olete selle sisestanud, valige allpool Nupp Edasi: tag >.

Tag

Kuna silti seekord ei kasutata, pole seda määratud.

Kui olete sisestatud, valige Allpool Järgmine: Vaadake üle ja looge >.

Ülevaatamine ja loomine

Kui sisendi sisuga probleeme ei ole, kuvatakse "Valideerimine õnnestus". Probleemi korral kuvatakse veateade, nii et minge tagasi ja seadke see uuesti.

Kui sisendsisuga pole probleeme, klõpsake nuppu "Loo". Seejärel algab juurutamine.

Mõne aja pärast on juurutamine lõpule viidud ja kuvatakse järgmine ekraan. Juurutuse nimi on pikk, kuid te ei pea selle pärast muretsema, kuna see on juurutamisel ajutine.

Võite klõpsata nuppu Mine ressursile, et kontrollida, kas kõneteenus on loodud.

Võtmete genereerimine ja toomine

Kliendilt sellele kõneteenusele juurdepääsuks on vaja autentimisvõtit. Kuna sellele pääseb juurde ainult programm, millel on see võti, on vaja vältida selle võtme varastamist kolmanda osapoole poolt.

"Klient" viitab siin kõigile Programmidele, mis kasutavad Microsoft Azure'i, näiteks töölauarakendused, nutitelefonirakendused ja veebirakendused.

Võtme saamiseks minge loodud häälteenusesse. Sellele pääseb juurde armatuurlaudadelt, ressursirühmadelt jne.

Kui avaneb leht Voice Services (Kõneteenused), valige vasakpoolsest menüüst Klahvid ja lõpp-punktid.

Seejärel avaneb leht "Võti ja lõpp-punkt" ning kuvatakse üksused "Võti 1", "Võti 2", "Asukoht/piirkond" ja "Lõpp-punkt".

Mõlemad elemendid on vajalikud, kuid "Key 2" on varuraam, mistõttu seda enamikul juhtudel ei kasutata.

Märkige iga väärtus üles. Nagu kirjelduses mainitud, siis palun ärge jagage võtit arendus osapooltega ootamatult.

Kui võti on lekkinud, klõpsake uue võtme väljastamiseks ülalpool nuppu "Regenereerige võti 1". Muidugi pidage meeles, et sel juhul ei ole eelmine võti enam kasutatav.

Kõneteenuse kasutamine kõnest teksti eraldamiseks kõnest

Nüüdsest muutub kõneteenuse kasutamine sõltuvalt kasutatavast programmist. Seekord pääsen sellele juurde .NET-i töölauarakendusest, kuid kui kasutate mõnda muud raamistikku, proovige seda kasutada Internetis. Ametlikul veebisaidil on ka juhised selle kasutamiseks mitmes keeles.

Seekord loome Visual Studio 2022-s WPF-i töölauarakenduse. Visual Studio Code puhul on see veidi tülikas, sest disainerit pole, kuid kui eraldate ainult programmiosa, on seda võimalik kasutada konsoolirakenduses või veebirakenduses.

Projecti loomine

Käivitage Visual Studio 2022.

Valige Loo uus projekt.

Valige WPF-rakendus.

Projekti nimi ja asukoht on meelevaldsed. Pärast sisestamist valige Edasi.

Versiooni nimetatakse ". NETO 6,0". Kui olete seadistatud, klõpsake nuppu "Loo".

NuGeti seaded

Saate luua juurdepääsu Microsoft Azure API-le nullist, kuid seda on lihtsam kasutada, kuna teil on juba ametlik teek.

Paremklõpsake lahenduse jaoks sõltuvusi ja valige Halda NuGeti pakette.

Valige vahekaart "Sirvi", sisestage otsingu sisestusväljale "Microsoft.CognitiveServices.Speech" ja kuvatakse loend, seega valige "Microsoft.CognitiveServices.Speech" ja klõpsake nuppu Installi.

Klõpsake nuppu OK.

Vali Nõustun.

Kui olete lõpetanud, lisatakse see pakendile.

Kasutajaliidese loomine

Seekord määrame heli sisaldava WAV-faili ja ekstraktime vestluse sisu Speech API abil tekstiks ning muudame selle kuvatavaks. Esialgu jätke keskkond sisendväljast sõltuvaks, et saaksite koodi kopeerimise ja kleepimise teel kasutada.

Ekraan peaks välja nägema selline: Kuna hinna sees on ainult minimaalne summa, siis kui soovite lisada näiteks failiviite nupu, siis palun rakendage see ise.

MainWindow.xaml on järgmine:

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

Protsessi loomine

Programm ExecuteButton_Click on kõik pakitud meetoditesse. Kui soovite seda kasutada teistes raamistikes, kirjutage see kood alusena ümber.

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

Kuna selgitus on koodis peaaegu kirjutatud, ei selgita ma üksikasjalikult, kuid kui tõstate olulise osa, on see järgmine.

  • SpeechConfig Kõneteenuste konfigureerimine
  • AudioConfig Häälandmete häälestamine
  • SpeechRecognizer Genereeri töötlemisklass
  • Kõneandmeid analüüsitakse ükshaaval ja lõpetatud tekst SpeechRecognizer.Recognized edastatakse sündmuses aeg-ajalt.
  • Kui töötlemine on mingil põhjusel lõppenud, SpeechRecognizer.Canceled nimetatakse sündmust
  • Töötlemise algust nimetatakse SpeechRecognizer.StartContinuousRecognitionAsync meetodiks ja töötlemise lõpetamist nimetatakse SpeechRecognizer.StopContinuousRecognitionAsync meetodiks.

Toimimise kontroll

Pärast programmi loomist käivitage see, sisestage vajalikud elemendid ja vajutage käivitusnuppu. Kui olete määranud õige helifaili, peaks heli esitama ja tekst tuleks ükshaaval ekstraktida, kasutades kulisside taga olevat Microsoft Azure'i kõneteenust.

Ekstraheerimissüsteem ei ole täiuslik, sest see sõltub Microsoft Azure'i kõneteenusest, Kui hääl on vaikne ja räägib selgelt, siis ma arvan, et see võetakse välja märkimisväärse täpsusega. Kuna see on pilveteenus, isegi kui täpsus pole praegu nii kõrge, võib see enne, kui seda teate, paremaks muutuda, nii et selles piirkonnas on lihtne mitte midagi teha.