Naudokite "Microsoft Azure Speech" paslaugą, kad ištrauktumėte tekstą iš garso failo

Puslapis atnaujintas :
Puslapio sukūrimo data :

Veikimo tikrinimo aplinka

"Microsoft Azure" balso paslaugos
  • 2022 m. liepos mėnesio leidimas
"Visual Studio"
  • "Visual Studio 2022"
.NET
  • 6.0

Prielaida

Kad galėtumėte patikrinti, ar šie patarimai veikia, turite:

Apie pavyzdines medžiagas

Mes pasiskoliname garso failus iš šios svetainės. Jis nėra įtrauktas į pavyzdinį kodą.

Nuorodos

Iš pradžių

Pavyzdžiui, norint įrašyti susitikimo turinį ir pan., Pokalbio turinys įrašomas, o vėliau, norint sukurti susitikimo protokolą, įrašytas garsas išgirstamas ir transkribuojamas į tekstą. Tačiau nesunku įsivaizduoti, kad labai vargina pokalbio turinį užrašyti į sakinį.

Štai kaip naudoti "Microsoft Azure Speech" paslaugą, kad automatiškai eksportuotumėte ir išvestumėte kalbos duomenis į tekstą. Ankstesniame pavyzdyje tai yra susitikimo įrašas, tačiau šiame patarime jis išgaunamas iš garso failo, todėl jį galima pritaikyti viskam, kas yra pokalbio turinys.

Be to, šį kartą kalbame apie perrašymą į tekstą, Taip pat galite naudoti "Microsoft Azure" balso paslaugą, kad konvertuotumėte ir išverstumėte įrašydami.

Apie mokesčius

Šį kartą naudosime nemokamą planą, todėl net jei bandysite veikti, nebūsite apmokestinti. Tačiau nemokamas planas turi laiko ir simbolių apribojimus, todėl, jei jums reikia daugiau konversijų po to, kai iš tikrųjų jį naudojate, pakeiskite į mokamą planą.

Kainos ieškokite šiame oficialiame puslapyje. Kadangi tai yra debesies paslauga, mokestis gali svyruoti priklausomai nuo sezono.

Pasiekite "Microsoft Azure" portalą

Žiniatinklio naršyklėje pasiekite šį URL:

Jei jau esate prisijungę, viskas. Jei dar nesate prisijungę, bus rodomas šis ekranas, todėl prisijunkite.

Kai prisijungsite, bus rodomas šis ekranas. Priklausomai nuo nustatomo dizaino, ekranas gali skirtis.

Balso paslaugos kūrimas "Microsoft Azure"

Jei paieškos įvesties lauke virš portalo įvesite "balsas", išeis "balso paslauga", todėl pasirinkite ją.

「Kognityvinių paslaugų | Kai rodomas ekranas "Balso paslauga", pasirinkite "Sukurti".

Atidaromas ekranas "Sukurti kalbos paslaugas", todėl įveskite reikiamus elementus.

Pagrindinė informacija

pavyzdys
Elementų įvesties turinio
Prenumerata Pasirinkite prenumeratas, už kurias norite mokėti. Net jei tai nemokama, visada turite susieti jį su tam tikra prenumerata.
Išteklių grupės Nurodo, į kurią išteklių grupę turi būti įtraukta balso paslauga, kurią reikia sukurti. Jei dar nesukūrėte, sukurkite jį iš toliau pateikto "Naujo". Kurdami įvairias paslaugas galite galvoti apie išteklių grupes kaip apie grupes.
Regionas Pasirinkite netoli vietos, kur galbūt jį naudojate dažniausiai. Tačiau atkreipkite dėmesį, kad kainos gali skirtis priklausomai nuo regiono. Japonijos rytai
vardas, pavadinimas Bet koks šios balso paslaugos pavadinimas. Jei kuriate daugiau nei vieną balso paslaugą, įsitikinkite, kad pavadinimas yra aprašomasis. Šis pavadinimas yra visuotinis ir unikalus, todėl negalite naudoti kitur naudojamo pavadinimo. SpeechToText-Test
Kainodaros pakopa Jei norite jį naudoti nemokamai, pasirinkite "Free F0". Jei norite jį naudoti už tam tikrą mokestį, pasirinkite kitą planą. Žinoma, yra apribojimų, jei jis yra nemokamas. Nemokama F0

Įvedę pasirinkite Kitas: Tinklo > žemiau.

tinklas

pavyzdys
Elementų įvesties turinio
rūšis Nurodo diapazoną, iš kurio pasiekiama ši balso paslauga. Jei norite turėti galimybę jį pasiekti iš bet kurios vietos be jokių išsamių nustatymų, pasirinkite "Įskaitant internetą...". "Galima pasiekti iš bet kurios vietos" taip pat reiškia "bet kas gali jį pasiekti", tačiau iš tikrųjų tik tie, kurie turi "raktą", kurį reikia įsigyti po to, gali jį pasiekti, todėl tai nėra tiek daug problemų saugumo požiūriu. Įskaitant internetą...

Įvedę jį, toliau pasirinkite Pirmyn: Tapatybė >.

Tapatybės

pavyzdys
Elementų įvesties turinio
Sistemai priskirtas valdomas ID Šį kartą naudojuosi vien balso paslauga, todėl gera ją išjungti. Išjungti
Vartotojo priskirtas valdomas ID Man nereikia jo pridėti, nes šį kartą nesukuriu vartotojo. be

Įvedę jį, toliau pasirinkite Pirmyn: pažymėti >.

žymė

Kadangi žyma šį kartą nenaudojama, ji nėra nustatyta.

Įvedę pasirinkite Kitas: Peržiūrėti ir sukurti > žemiau.

Peržiūrėkite ir sukurkite

Jei nėra problemų dėl įvesties turinio, rodomas "Patvirtinimas pavyko". Jei kyla problemų, bus rodomas klaidos pranešimas, todėl grįžkite atgal ir nustatykite jį dar kartą.

Jei nėra problemų dėl įvesties turinio, spustelėkite mygtuką "Sukurti". Tada prasidės diegimas.

Po kurio laiko diegimas baigiamas ir rodomas šis ekranas. Diegimo pavadinimas yra ilgas, bet jums nereikia dėl to jaudintis, nes diegimas yra laikinas.

Galite spustelėti mygtuką Eiti į išteklių, kad patikrintumėte, ar balso paslauga buvo sukurta.

Raktų generavimas ir gavimas

Norint pasiekti šią balso paslaugą iš kliento, reikalingas autentifikavimo raktas. Kadangi jį pasiekia tik programa, turinti šį raktą, būtina užkirsti kelią tam, kad šį raktą pavogtų trečioji šalis.

"Klientas" čia reiškia visas programas, kurios naudoja "Microsoft Azure", pvz., darbalaukio programas, išmaniųjų telefonų programas ir žiniatinklio programas.

Norėdami gauti raktą, eikite į sukurtą balso paslaugą. Jį galima pasiekti iš ataskaitų sričių, išteklių grupių ir pan.

Kai atsidarys puslapis Balso paslaugos, kairėje esančiame meniu pasirinkite Raktai ir galiniai punktai.

Tada atsidarys puslapis "Raktas ir galinis taškas" ir bus rodomi elementai "1 raktas", "2 raktas", "Vieta / regionas" ir "Galinis taškas".

Abu elementai yra būtini, tačiau "Key 2" yra atsarginis rėmas, todėl daugeliu atvejų jis nenaudojamas.

Užsirašykite kiekvieną reikšmę. Kaip minėta aprašyme, prašome nesidalyti raktu su plėtros šalimis netikėtai.

Jei raktas nutekėjo, spustelėkite "Atkurti 1 raktą", kad išleistumėte naują raktą. Žinoma, atminkite, kad šiuo atveju ankstesnis raktas nebebus tinkamas naudoti.

Kalbėjimo paslaugos naudojimas iš programos, norint išgauti tekstą iš kalbos

Nuo šiol balso paslaugos naudojimas keisis priklausomai nuo naudojamos programos. Šį kartą jį pasieksiu iš .NET darbalaukio programos, bet jei naudojate kitą sistemą, pabandykite ją naudoti internete. Oficialioje svetainėje taip pat yra instrukcijos, kaip ją naudoti keliomis kalbomis.

Šį kartą kuriame WPF darbalaukio programą "Visual Studio 2022". "Visual Studio Code" atveju tai šiek tiek vargina, nes nėra dizainerio, tačiau jei ištrauksite tik programos dalį, ją galima naudoti konsolės programoje arba žiniatinklio programoje.

"Project" kūrimas

Paleiskite "Visual Studio 2022".

Pasirinkite Kurti naują projektą.

Pasirinkite WPF programa.

Projekto pavadinimas ir vieta yra savavališki. Įvedę pasirinkite Pirmyn.

Versija vadinama ". NET 6.0". Nustatę spustelėkite mygtuką "Sukurti".

NuGet nustatymai

Galite sukurti prieigą prie "Microsoft Azure" API nuo nulio, bet ją lengviau naudoti, nes jau turite oficialią biblioteką.

Dešiniuoju pelės mygtuku spustelėkite Sprendimo priklausomybės ir pasirinkite Tvarkyti "NuGet" paketus.

Pasirinkite skirtuką "Naršyti", paieškos įvesties lauke įveskite "Microsoft.CognitiveServices.Speech" ir bus rodomas sąrašas, todėl pasirinkite "Microsoft.CognitiveServices.Speech" ir spustelėkite mygtuką Įdiegti.

Spustelėkite mygtuką Gerai (OK).

Pasirinkite Sutinku.

Kai baigsite, jis bus įtrauktas į paketą.

Vartotojo sąsajos kūrimas

Šį kartą nurodysime WAV failą, kuriame yra garso įrašas, ir ištrauksime pokalbio turinį į tekstą naudodami kalbos API ir padarysime jį rodomą. Kol kas palikite aplinką priklausomą nuo įvesties lauko, kad galėtumėte naudoti kodą kopijuodami ir įklijuodami.

Ekranas turėtų atrodyti taip: Kadangi įtraukta tik minimali suma, jei norite pridėti, pavyzdžiui, failo nuorodos mygtuką, įdiekite jį patys.

MainWindow.xaml yra toks:

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

Proceso kūrimas

Visa ExecuteButton_Click programa yra suvyniota į metodus. Jei norite jį naudoti kitose sistemose, perrašykite šį kodą kaip pagrindą.

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

Kadangi paaiškinimas beveik parašytas kode, aš išsamiai nepaaiškinsiu, bet jei iškelsite svarbią dalį, tai bus taip.

  • SpeechConfig Balso paslaugų konfigūravimas
  • AudioConfig Balso duomenų nustatymas
  • SpeechRecognizer Generuoti apdorojimo klasę
  • Kalbos duomenys analizuojami po vieną, o baigtas tekstas SpeechRecognizer.Recognized kartais perduodamas renginyje.
  • Jei dėl kokių nors priežasčių apdorojimas baigtas, SpeechRecognizer.Canceled įvykis vadinamas
  • Apdorojimo pradžia vadinama SpeechRecognizer.StartContinuousRecognitionAsync metodu, o apdorojimo užbaigimas vadinamas SpeechRecognizer.StopContinuousRecognitionAsync metodu.

Veikimo patikrinimas

Sukūrę programą, vykdykite ją, įveskite reikiamus elementus ir paspauskite vykdymo mygtuką. Jei nurodėte tinkamą garso failą, garsas turėtų būti paleistas ir tekstas turėtų būti ištraukiamas po vieną naudojant "Microsoft Azure" balso paslaugą užkulisiuose.

Ištraukimo sistema nėra tobula, nes ji priklauso nuo "Microsoft Azure" balso paslaugos, Jei balsas tylus ir aiškiai kalbantis, manau, kad jis bus išgautas gana tiksliai. Kadangi tai yra debesies paslauga, net jei tikslumas dabar nėra toks didelis, ji gali pagerėti, kol to nežinote, todėl lengva nieko nedaryti toje srityje.