Tekstin poimiminen äänitiedostosta Microsoft Azuren puhepalvelun avulla

Sivu päivitetty :
Sivun luontipäivämäärä :

Käyttötarkastuksen ympäristö

Microsoft Azuren äänipalvelut
  • Heinäkuun 2022 painos
Visuaalinen studio
  • Visual Studio 2022
.NET
  • 6.0

edellytys

Ennen kuin voit varmistaa, että nämä vinkit toimivat, sinun on:

Tietoja näytemateriaaleista

Lainaamme äänitiedostoja seuraavalta sivustolta. Se ei sisälly näytekoodiin.

Aiheesta muualla

Alun perin

Esimerkiksi kokouksen sisällön tallentamiseksi jne., Keskustelun sisältö tallennetaan, ja myöhemmin kokouksen pöytäkirjan luomiseksi tallennettu ääni kuullaan ja litteroidaan tekstiksi. On kuitenkin helppo kuvitella, että on erittäin hankalaa kirjoittaa keskustelun sisältö lauseeseen.

Näin voit käyttää Microsoft Azure Speech -palvelua puhetietojen automaattiseen viemiseen ja tulostamiseen tekstiin. Edellisessä esimerkissä se on kokouksen tallenne, mutta tässä vinkissä se on poimittu äänitiedostosta, joten sitä voidaan soveltaa mihin tahansa, joka sisältää keskustelun sisältöä.

Tällä kertaa puhumme myös tekstiin transkriptiosta, Voit myös käyttää Microsoft Azure -äänipalvelua muuntamiseen ja kääntämiseen tallennuksen aikana.

Tietoja maksuista

Tällä kertaa käytämme ilmaista suunnitelmaa, joten vaikka yrittäisit toimia, sinua ei veloiteta. Ilmaisessa suunnitelmassa on kuitenkin aika- ja merkkirajoituksia, joten jos tarvitset enemmän konversiota sen tosiasiallisen käytön jälkeen, vaihda maksulliseen suunnitelmaan.

Katso hinnoittelu seuraavalta viralliselta sivulta. Koska kyseessä on pilvipalvelu, maksu voi vaihdella vuodenajasta riippuen.

Microsoft Azure -portaalin käyttäminen

Käytä seuraavaa URL-osoitetta verkkoselaimessa:

Jos olet jo kirjautunut sisään, olet valmis. Jos et ole vielä kirjautunut sisään, seuraava näyttö tulee näkyviin, joten kirjaudu sisään.

Kun kirjaudut sisään, seuraava näyttö tulee näkyviin. Asettamastasi suunnittelusta riippuen näyttö voi olla erilainen.

Äänipalvelun luominen Microsoft Azuressa

Jos kirjoitat "ääni" portaalin yläpuolella olevaan hakukenttään, "äänipalvelu" tulee ulos, joten valitse se.

「Kognitiiviset palvelut | Kun "Äänipalvelu" -näyttö tulee näkyviin, valitse "Luo".

"Luo puhepalvelut" -näyttö avautuu, joten kirjoita tarvittavat kohteet.

Perusasiat

Esimerkki
kohteiden syötesisällöstä
tilaus Valitse tilaukset, joista haluat maksaa. Vaikka se olisi ilmainen, sinun on aina sidottava se jonkinlaiseen tilaukseen.
Resurssiryhmät Määrittää, mihin resurssiryhmään luotava äänipalvelu sisällytetään. Jos et ole vielä luonut sellaista, luo sellainen alla olevasta "Uudesta". Voit ajatella resurssiryhmiä ryhmittelyinä, kun luot erilaisia palveluita.
Alue Valitse lähellä paikkaa, jossa saatat käyttää sitä useimmin. Huomaa kuitenkin, että hinnat voivat vaihdella alueittain. Japani itään
Nimi Mikä tahansa tämän äänipalvelun nimi. Jos olet luomassa useampaa kuin yhtä äänipalvelua, varmista, että nimi on kuvaava. Tämä nimi on globaali ja ainutlaatuinen, joten et voi käyttää nimeä, jota käytetään muualla. SpeechToText-testi
Hinnoittelun taso Jos haluat käyttää sitä ilmaiseksi, valitse "Ilmainen F0". Jos haluat käyttää sitä maksua vastaan, valitse toinen suunnitelma. Tietenkin on olemassa rajoituksia, jos se on ilmainen. Ilmainen F0

Kun olet syöttänyt, valitse seuraava: Verkko > alla.

verkko

Esimerkki
kohteiden syötesisällöstä
tyyppi Määrittää alueen, jolta tämä äänipalvelu on käytettävissä. Jos haluat käyttää sitä mistä tahansa ilman yksityiskohtaisia asetuksia, valitse "Mukaan lukien Internet...". "Voidaan käyttää mistä tahansa" tarkoittaa myös "kuka tahansa voi käyttää sitä", mutta itse asiassa vain ne, joilla on tämän jälkeen hankittava "avain", voivat käyttää sitä, joten se ei ole niin suuri ongelma turvallisuuden kannalta. Mukaan lukien Internet...

Kun olet syöttänyt sen, valitse seuraava: Käyttäjätiedot > alla.

Identiteetti

Esimerkki
kohteiden syötesisällöstä
Järjestelmän määrittämä hallittu tunnus Tällä kertaa käytän yksin äänipalvelua, joten se on hyvä sammuttaa. pois
Käyttäjän määrittämä hallittu tunnus Minun ei tarvitse lisätä sitä, koska en luo käyttäjää tällä kertaa. ilman

Kun olet syöttänyt sen, valitse seuraava: Merkitse > alla.

tag

Koska tunnistetta ei käytetä tällä kertaa, sitä ei ole asetettu.

Kun olet syöttänyt, valitse Seuraava: Tarkista ja luo > alla.

Tarkista ja luo

Jos syötteen sisällössä ei ole ongelmia, näyttöön tulee "Vahvistus onnistui". Jos ongelma ilmenee, näyttöön tulee virheilmoitus, joten palaa takaisin ja aseta se uudelleen.

Jos syötteen sisällössä ei ole ongelmia, napsauta "Luo" -painiketta. Sitten käyttöönotto alkaa.

Jonkin ajan kuluttua käyttöönotto on valmis ja seuraava näyttö tulee näkyviin. Käyttöönoton nimi on pitkä, mutta sinun ei tarvitse huolehtia siitä, koska se on väliaikaista käyttöönotossa.

Voit napsauttaa Siirry resurssiin -painiketta varmistaaksesi, että äänipalvelu on luotu.

Avainten luominen ja hakeminen

Todennusavain vaaditaan tämän äänipalvelun käyttämiseen asiakkaalta. Koska siihen pääsee vain ohjelma, jolla on tämä avain, on välttämätöntä estää kolmas osapuoli varastamasta tätä avainta.

"Asiakas" viittaa tässä kaikkiin Microsoft Azurea käyttäviin ohjelmiin, kuten työpöytäsovelluksiin, älypuhelinsovelluksiin ja verkkosovelluksiin.

Saat avaimen siirtymällä luomaasi äänipalveluun. Sitä voidaan käyttää koontinäytöistä, resurssiryhmistä ja niin edelleen.

Kun Äänipalvelut-sivu avautuu, valitse vasemmalla olevasta valikosta Avaimet ja päätepisteet.

Sitten "Avain ja päätepiste" -sivu avautuu ja kohteet "Avain 1", "Avain 2", "Sijainti / alue" ja "Päätepiste" tulevat näkyviin.

Molemmat kohteet ovat välttämättömiä, mutta "Key 2" on varakehys, joten sitä ei käytetä useimmissa tapauksissa.

Kirjoita muistiin jokainen arvo. Kuten kuvauksessa mainittiin, älä jaa avainta kehitysosapuolten kanssa odottamatta.

Jos avain on vuotanut, napsauta yllä olevaa "Regenerate Key 1" -painiketta antaaksesi uuden avaimen. Huomaa tietysti, että tässä tapauksessa edellinen avain ei ole enää käyttökelpoinen.

Käytä puhepalvelua ohjelmasta tekstin poimimiseen puheesta

Tästä lähtien äänipalvelun käyttö muuttuu käytetyn ohjelman mukaan. Tällä kertaa käytän sitä .NET-työpöytäsovelluksesta, mutta jos käytät toista kehystä, yritä käyttää sitä Internetissä. Virallisella verkkosivustolla on myös ohjeet sen käytöstä useilla kielillä.

Tällä kertaa luomme WPF-työpöytäsovelluksen Visual Studio 2022:ssa. Visual Studio Coden tapauksessa se on hieman hankalaa, koska suunnittelijaa ei ole, mutta jos purat vain ohjelmaosan, on mahdollista käyttää sitä konsolisovelluksessa tai verkkosovelluksessa.

Luo projekti

Käynnistä Visual Studio 2022.

Valitse Luo uusi projekti.

Valitse WPF-sovellus.

Projektin nimi ja sijainti ovat mielivaltaisia. Kun olet syöttänyt, valitse Seuraava.

Versiota kutsutaan ". NETTO 6,0". Kun olet asettanut, napsauta "Luo" -painiketta.

NuGet-asetukset

Voit luoda Microsoft Azure -ohjelmointirajapinnan käyttöoikeuden alusta alkaen, mutta sitä on helpompi käyttää, koska sinulla on jo virallinen kirjasto.

Napsauta hiiren kakkospainikkeella Ratkaisun riippuvuudet -kohtaa ja valitse NuGet-pakettien hallinta.

Valitse "Selaa" -välilehti, kirjoita hakusyötekenttään "Microsoft.CognitiveServices.Speech", niin näkyviin tulee luettelo, joten valitse "Microsoft.CognitiveServices.Speech" ja napsauta Asenna-painiketta.

Napsauta OK-painiketta.

Valitse Hyväksyn.

Kun olet valmis, se lisätään pakettiin.

Käyttöliittymän luominen

Tällä kertaa määritämme WAV-tiedoston, joka sisältää ääntä, ja puramme keskustelun sisällön tekstiksi Speech API: n avulla ja teemme sen näkyviin. Jätä toistaiseksi ympäristö riippuvaiseksi syöttökentästä, jotta voit käyttää koodia kopioimalla ja liittämällä.

Näytön pitäisi näyttää tältä: Koska vain vähimmäismäärä on mukana, jos haluat lisätä esimerkiksi tiedostoviitepainikkeen, ota se käyttöön itse.

MainWindow.xaml on seuraava:

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

Prosessin luominen

Ohjelma ExecuteButton_Click on kaikki kääritty menetelmiin. Jos haluat käyttää sitä muissa kehyksissä, kirjoita tämä koodi uudelleen perustaksi.

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

Koska selitys on melkein kirjoitettu koodiin, en selitä yksityiskohtaisesti, mutta jos nostat tärkeän osan, se on seuraava.

  • SpeechConfig Äänipalveluiden määrittäminen
  • AudioConfig Äänidatan määrittäminen
  • SpeechRecognizer Luo käsittelyluokka
  • Puhetiedot analysoidaan yksitellen, ja valmis teksti SpeechRecognizer.Recognized välitetään tapahtumassa aika ajoin.
  • Jos käsittely on jostain syystä valmis, SpeechRecognizer.Canceled tapahtuman nimi on
  • Käsittelyn alkua kutsutaan SpeechRecognizer.StartContinuousRecognitionAsync menetelmäksi, ja käsittelyn loppuun saattamista kutsutaan SpeechRecognizer.StopContinuousRecognitionAsync menetelmäksi.

Toiminnan tarkistus

Kun olet luonut ohjelman, suorita se, kirjoita tarvittavat kohteet ja paina suorituspainiketta. Jos olet määrittänyt oikean äänitiedoston, äänen pitäisi toistua ja teksti tulisi purkaa yksitellen Microsoft Azure -äänipalvelun avulla kulissien takana.

Poimintajärjestelmä ei ole täydellinen, koska se riippuu Microsoft Azure -äänipalvelusta, Jos ääni on hiljainen ja puhuu selvästi, uskon, että se poimitaan huomattavan tarkasti. Koska se on pilvipalvelu, vaikka tarkkuus ei olisikaan nyt niin korkea, se saattaa parantua ennen kuin huomaatkaan, joten on helppo olla tekemättä mitään tällä alueella.