Pakalpojuma Microsoft Azure Speech izmantošana, lai izvilktu tekstu no audio faila

Lapa atjaunota :
Lapas izveides datums :

Darbības pārbaudes vide

Microsoft Azure balss pakalpojumi
  • 2022. gada jūlija izdevums (angļu val.)
Vizuālā studija
  • Visual Studio 2022
.NET
  • 6.0

Priekšnosacījumu

Lai varētu pārbaudīt, vai šie padomi darbojas, jums:

Par paraugu materiāliem

Mēs aizņemamies audio failus no šīs vietnes. Tas nav iekļauts parauga kodā.

Ārējās saites

Sākumā

Piemēram, lai ierakstītu sapulces saturu utt., Sarunas saturs tiek ierakstīts, un vēlāk, lai izveidotu sanāksmes protokolu, ierakstītais audio tiek dzirdēts un transkribēts tekstā. Tomēr ir viegli iedomāties, ka ir ļoti apgrūtinoši pierakstīt sarunas saturu teikumā.

Tālāk ir aprakstīts, kā izmantot Microsoft Azure runas ievades pakalpojumu, lai automātiski eksportētu un izvadītu runas datus uz tekstu. Iepriekšējā piemērā tas ir sapulces ieraksts, bet šajos padomos tas tiek izvilkts no audio faila, tāpēc to var lietot jebkam, kas satur sarunas saturu.

Arī šoreiz mēs runājam par teksta pārrakstīšanu, Varat arī izmantot Microsoft Azure balss pakalpojumu, lai konvertētu un tulkotu ierakstīšanas laikā.

Par maksām

Šoreiz mēs izmantosim bezmaksas plānu, tāpēc pat tad, ja jūs mēģināt darboties, jums netiks iekasēta maksa. Tomēr bezmaksas plānam ir laika un rakstzīmju ierobežojumi, tādēļ, ja jums ir nepieciešams vairāk reklāmguvumu pēc tā faktiskās darbības, lūdzu, mainiet uz apmaksātu plānu.

Lūdzu, skatiet šo oficiālo lapu, lai uzzinātu par cenām. Tā kā tas ir mākoņpakalpojums, maksa var svārstīties atkarībā no sezonas.

Piekļuve Microsoft Azure portālam

Piekļūstiet šādam vietrādim URL tīmekļa pārlūkprogrammā:

Ja esat jau pierakstījies, esat pabeidzis. Ja vēl neesat pierakstījies, tiks parādīts šāds ekrāns, tāpēc, lūdzu, pierakstieties.

Kad piesakāties, tiks parādīts šāds ekrāns. Atkarībā no iestatītā noformējuma displejs var atšķirties.

Balss pakalpojuma izveide pakalpojumā Microsoft Azure

Ja meklēšanas ievades laukā virs portāla ievadīsiet "balss", iznāks "balss pakalpojums", tāpēc atlasiet to.

「Kognitīvo pakalpojumu | Kad tiek parādīts ekrāns "Balss pakalpojums", atlasiet "Izveidot".

Tiek atvērts ekrāns "Izveidot runas pakalpojumus", tāpēc ievadiet nepieciešamos vienumus.

Pamatinformācija

piemērs
Vienumu ievades satura
abonēšana Atlasiet abonementus, par kuriem vēlaties maksāt. Pat ja tas ir bezmaksas, jums tas vienmēr ir jāsaista ar kādu abonementu.
Resursu grupas Norāda, kurā resursu grupā ir jāiekļauj izveidojamais balss pakalpojums. Ja vēl neesat to izveidojis, lūdzu, izveidojiet to no "Jauns" zemāk. Jūs varat domāt par resursu grupām kā par grupām, kad veidojat dažādus pakalpojumus.
Reģions Izvēlieties netālu no vietas, kur jūs, iespējams, to izmantojat visbiežāk. Tomēr, lūdzu, ņemiet vērā, ka cenas var atšķirties atkarībā no reģiona. Japānas austrumi
vārds Jebkurš šī balss pakalpojuma nosaukums. Ja veidojat vairāk nekā vienu balss pakalpojumu, lūdzu, pārliecinieties, vai nosaukums ir aprakstošs. Šis nosaukums ir globāls un unikāls, tāpēc jūs nevarat izmantot nosaukumu, kas tiek izmantots citur. SpeechToText-Test
Cenu līmenis Ja vēlaties to izmantot bez maksas, izvēlieties "Free F0". Ja vēlaties to izmantot par maksu, lūdzu, izvēlieties citu plānu. Protams, ir ierobežojumi, ja tas ir bezmaksas. Bezmaksas F0

Kad esat ievadījis, atlasiet Tālāk: tīkla > zemāk.

tīkls

piemērs
Vienumu ievades satura
laipns Norāda diapazonu, no kura šis balss pakalpojums ir pieejams. Ja vēlaties, lai tam varētu piekļūt no jebkuras vietas bez detalizētiem iestatījumiem, atlasiet "Ieskaitot internetu...". "Var piekļūt no jebkuras vietas" nozīmē arī "ikviens var tam piekļūt", bet patiesībā tai var piekļūt tikai tie, kuriem ir "atslēga", kas jāiegādājas pēc tam, tāpēc tā nav tik daudz problēma drošības ziņā. Ieskaitot internetu...

Kad esat to ievadījis, atlasiet Tālāk: identitāte > tālāk.

Identitāti

piemērs
Vienumu ievades satura
Sistēmai piešķirts pārvaldīts ID Šoreiz es izmantoju tikai balss pakalpojumu, tāpēc ir labi to izslēgt. Pie
Lietotājam piešķirts pārvaldītais ID Man tas nav jāpievieno, jo šoreiz es neveidoju lietotāju. bez

Kad esat tajā ievadījis, atlasiet Tālāk: atzīmēt > zemāk.

birka

Tā kā tags šoreiz netiek izmantots, tas nav iestatīts.

Kad esat ievadījis, atlasiet Tālāk: pārskatīt un izveidot > zemāk.

Pārskatīšana un izveide

Ja nav problēmu ar ievades saturu, tiek parādīts "Validācija izdevās". Ja rodas problēma, tiks parādīts kļūdas ziņojums, tāpēc dodieties atpakaļ un iestatiet to vēlreiz.

Ja nav problēmu ar ievades saturu, noklikšķiniet uz pogas "Izveidot". Tad sāksies izvietošana.

Pēc kāda laika izvietošana ir pabeigta un tiek parādīts nākamais ekrāns. Izvietošanas nosaukums ir garš, taču jums par to nav jāuztraucas, jo tā izvietošana ir īslaicīga.

Varat noklikšķināt uz pogas Doties uz resursu, lai pārbaudītu, vai balss pakalpojums ir izveidots.

Atslēgu ģenerēšana un izgūšana

Lai piekļūtu šim klienta balss pakalpojumam, ir nepieciešama autentifikācijas atslēga. Tā kā tas ir pieejams tikai programmai, kurai ir šī atslēga, ir jānovērš tas, ka šo atslēgu nozog trešā puse.

"Klients" šeit attiecas uz visām programmām, kas izmanto Microsoft Azure, piemēram, darbvirsmas programmām, viedtālruņu programmām un tīmekļa programmām.

Lai iegūtu atslēgu, dodieties uz izveidoto balss pakalpojumu. Tam var piekļūt no informācijas paneļiem, resursu grupām utt.

Kad tiek atvērta lapa Balss pakalpojumi, kreisās puses izvēlnē atlasiet Taustiņi un galapunkti.

Pēc tam tiks atvērta lapa "Atslēga un galapunkts" un tiks parādīti vienumi "Key 1", "Key 2", "Location/Region" un "Endpoint".

Abi priekšmeti ir nepieciešami, bet "Key 2" ir rezerves rāmis, tāpēc vairumā gadījumu to neizmanto.

Pierakstiet katru vērtību. Kā minēts aprakstā, lūdzu, negaidīti nedalieties ar atslēgu ar attīstības pusēm.

Ja atslēga ir nopludināta, noklikšķiniet uz "Atjaunot atslēgu 1" iepriekš, lai izdotu jaunu atslēgu. Protams, ņemiet vērā, ka šajā gadījumā iepriekšējā atslēga vairs nebūs izmantojama.

Runas pakalpojuma izmantošana no programmas, lai izvilktu tekstu no runas

No šī brīža balss pakalpojuma izmantošana mainīsies atkarībā no izmantotās programmas. Šoreiz es tam piekļūšu no .NET darbvirsmas lietojumprogrammas, bet, ja izmantojat citu ietvaru, mēģiniet to izmantot internetā. Oficiālajā vietnē ir arī norādījumi par to, kā to izmantot vairākās valodās.

Šoreiz mēs veidojam WPF darbvirsmas lietotni programmā Visual Studio 2022. Visual Studio Code gadījumā tas ir nedaudz apgrūtinoši, jo nav dizainera, bet, ja jūs izvelkat tikai programmas daļu, to ir iespējams izmantot konsoles lietotnē vai tīmekļa lietotnē.

Izveidot projektu

Sāciet Visual Studio 2022.

Atlasiet Izveidot jaunu projektu.

Atlasiet WPF lietojumprogramma.

Projekta nosaukums un atrašanās vieta ir patvaļīgi. Kad esat ievadījis, atlasiet Tālāk.

Versiju sauc par ". NETO 6.0". Pēc iestatīšanas noklikšķiniet uz pogas "Izveidot".

NuGet iestatījumi

Varat izveidot piekļuvi Microsoft Azure API no nulles, taču to ir vieglāk izmantot, jo jums jau ir oficiāla bibliotēka.

Ar peles labo pogu noklikšķiniet uz Risinājuma atkarības un atlasiet Pārvaldīt NuGet pakotnes.

Atlasiet cilni "Pārlūkot", meklēšanas ievades laukā ievadiet "Microsoft.CognitiveServices.Speech", un tiks parādīts saraksts, tāpēc atlasiet "Microsoft.CognitiveServices.Speech" un noklikšķiniet uz pogas Instalēt.

Noklikšķiniet uz pogas Labi.

Izvēlieties Es piekrītu.

Kad esat pabeidzis, tas tiks pievienots iepakojumam.

Lietotāja saskarnes izveide

Šoreiz mēs norādīsim WAV failu, kas satur audio, un izgūsim sarunas saturu tekstā, izmantojot Speech API, un parādīsim to. Pagaidām atstājiet vidi atkarīgu no ievades lauka, lai kodu varētu izmantot, kopējot un ielīmējot.

Ekrānam vajadzētu izskatīties šādi: Tā kā ir iekļauta tikai minimālā summa, ja vēlaties pievienot, piemēram, faila atsauces pogu, lūdzu, ieviesiet to pats.

MainWindow.xaml ir šāds:

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

Procesa izveide

Programma ExecuteButton_Click ir iesaiņota metodēs. Ja vēlaties to izmantot citos ietvaros, pārrakstiet šo kodu kā pamatu.

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

Tā kā paskaidrojums ir gandrīz ierakstīts kodā, es nepaskaidrošu detalizēti, bet, ja jūs pacelsiet svarīgo daļu, tas būs šāds.

  • SpeechConfig Balss pakalpojumu konfigurēšana
  • AudioConfig Balss datu iestatīšana
  • SpeechRecognizer Ģenerēt apstrādes klasi
  • Runas dati tiek analizēti pa vienam, un pabeigtais teksts SpeechRecognizer.Recognized laiku pa laikam tiek nodots notikumā.
  • Ja apstrāde kāda iemesla dēļ ir pabeigta, SpeechRecognizer.Canceled tiek izsaukts notikums
  • Apstrādes SpeechRecognizer.StartContinuousRecognitionAsync sākumu sauc par metodi, un apstrādes pabeigšanu sauc SpeechRecognizer.StopContinuousRecognitionAsync par metodi.

Darbības pārbaude

Pēc programmas izveidošanas izpildiet to, ievadiet nepieciešamos vienumus un nospiediet izpildes pogu. Ja esat norādījis pareizo audio failu, audio ir jāatskaņo un teksts ir jāizvelk pa vienam, izmantojot Microsoft Azure balss pakalpojumu aizkulisēs.

Ekstrakcijas sistēma nav perfekta, jo tā ir atkarīga no Microsoft Azure balss pakalpojuma, Ja balss ir klusa un runā skaidri, es domāju, ka tā tiks iegūta ar ievērojamu precizitāti. Tā kā tas ir mākoņpakalpojums, pat ja precizitāte tagad nav tik augsta, tas var kļūt labāks, pirms jūs to zināt, tāpēc šajā jomā ir viegli neko nedarīt.