Szöveg kinyerése a Microsoft Azure Speech service használatával egy hangfájlból

Oldal frissítve :
Oldal létrehozásának dátuma :

Művelet-ellenőrzési környezet

Microsoft Azure Voice Services
  • 2022. júliusi kiadás
Visual Stúdió
  • Visual Studio 2022
.NET (angolul)
  • 6.0

előfeltétel

Mielőtt ellenőrizné, hogy ez a tipp működik-e, a következőket kell tennie:

A mintaanyagokról

Hangfájlokat kölcsönözünk a következő webhelyről. A mintakód nem tartalmazza.

Külső hivatkozások

Először

Például az értekezlet tartalmának stb. rögzítéséhez rögzítik a beszélgetés tartalmát, majd később az értekezlet jegyzőkönyveinek elkészítéséhez a rögzített hangot meghallgatják és szövegbe írják át. Könnyen elképzelhető azonban, hogy nagyon zavaró a beszélgetés tartalmát egy mondatba írni.

A következőképpen használhatja a Microsoft Azure Speech szolgáltatást a beszédadatok szöveggé történő automatikus exportálásához és kimenetéhez. Az előző példában ez az értekezlet felvétele, de ebben a tippekben a hangfájlból kerül kibontásra, így bármire alkalmazható, ami beszélgetés tartalmát tartalmazza.

Ezúttal a szövegbe való átírásról beszélünk, A Microsoft Azure hangszolgáltatással is konvertálhat és lefordíthat felvétel közben.

A díjakról

Ezúttal az Ingyenes csomagot fogjuk használni, így még ha meg is próbál működni, nem számítunk fel díjat. Az ingyenes csomagnak azonban van idő- és karakterkorlátja, ezért ha több átalakításra van szüksége, miután ténylegesen működtette, kérjük, váltson fizetős csomagra.

Kérjük, olvassa el a következő hivatalos oldalt az árakért. Mivel ez egy felhőszolgáltatás, a díj a szezontól függően ingadozhat.

A Microsoft Azure portál elérése

A következő URL-cím elérése egy webböngészőben:

Ha már be van jelentkezve, akkor kész. Ha még nem jelentkezett be, a következő képernyő jelenik meg, ezért kérjük, jelentkezzen be.

Amikor bejelentkezik, a következő képernyő jelenik meg. A beállított kialakítástól függően a kijelző eltérő lehet.

Hangszolgáltatás létrehozása a Microsoft Azure-ban

Ha a portál feletti keresési beviteli mezőbe beírja a "hang" szót, akkor a "hangszolgáltatás" megjelenik, ezért válassza ki.

「Cognitive Services | Amikor megjelenik a "Hangszolgáltatás" képernyő, válassza a "Létrehozás" lehetőséget.

Megnyílik a "Speech Services létrehozása" képernyő, ezért adja meg a szükséges elemeket.

Alapkifejezések

Példa az bemeneti
elemektartalmára
előfizetés Válassza ki azokat az előfizetéseket, amelyekért fizetni szeretne. Még akkor is, ha ingyenes, mindig valamilyen előfizetéshez kell kötnie.
Erőforráscsoportok Megadja, hogy a létrehozandó hangszolgáltatás melyik erőforráscsoportba kerüljön. Ha még nem hozott létre egyet, kérjük, hozzon létre egyet az alábbi "Új" oldalról. Az erőforráscsoportokra csoportosításként is felfoghatja, amikor különböző szolgáltatásokat hoz létre.
Régió Válasszon egy olyan hely közelében, ahol esetleg a leggyakrabban használja. Felhívjuk azonban figyelmét, hogy az árak régiónként változhatnak. Kelet-Japán
név A hangszolgáltatás bármilyen neve. Ha egynél több hangszolgáltatást hoz létre, győződjön meg arról, hogy a név leíró jellegű. Ez a név globális és egyedi, ezért nem használhat máshol használt nevet. SpeechToText-teszt
Tarifacsomag Ha ingyen szeretné használni, válassza az "Ingyenes F0" lehetőséget. Ha díj ellenében szeretné használni, kérjük, válasszon másik tervet. Természetesen vannak korlátozások, ha ingyenes. Ingyenes F0

A beírás után válassza a Tovább: Hálózati > alább lehetőséget.

hálózat

Példa az bemeneti
elemektartalmára
fajta Megadja azt a tartományt, ahonnan a hangszolgáltatás elérhető. Ha azt szeretné, hogy bárhonnan, részletes beállítások nélkül hozzáférhessen hozzá, válassza az "Internetet is beleértve...". A "Bárhonnan elérhető" lehetőséget, azt is jelenti, hogy "bárki hozzáférhet hozzá", de valójában csak azok férhetnek hozzá, akik rendelkeznek az ezt követően megszerezendő "kulccsal", így ez nem annyira probléma a biztonság szempontjából. Beleértve az internetet is...

Miután megadta, válassza a Tovább: Identitás > alább lehetőséget.

Azonosság

Példa az bemeneti
elemektartalmára
Rendszer által hozzárendelt felügyelt azonosító Ezúttal egyedül használom a hangszolgáltatást, ezért jó kikapcsolni. ki
Felhasználó által hozzárendelt felügyelt azonosító Nem kell hozzáadnom, mert ezúttal nem hozok létre felhasználót. nélkül

Miután megadtad, válaszd a Tovább: Címke > alább lehetőséget.

címke

Mivel a címkét ezúttal nem használják, nincs beállítva.

A megírás után válassza a Tovább: Áttekintés és létrehozás > lehetőséget alább.

Áttekintés és létrehozás

Ha nincs probléma a bemeneti tartalommal, akkor az "Érvényesítés sikeres" üzenet jelenik meg. Ha probléma merül fel, hibaüzenet jelenik meg, ezért menjen vissza, és állítsa be újra.

Ha nincs probléma a bemeneti tartalommal, kattintson a "Létrehozás" gombra. Ezután megkezdődik az üzembe helyezés.

Egy idő után az üzembe helyezés befejeződik, és a következő képernyő jelenik meg. Az üzembe helyezés neve hosszú, de nem kell aggódnia miatta, mert ideiglenes az üzembe helyezés során.

Az Ugrás az erőforráshoz gombra kattintva ellenőrizheti, hogy a hangszolgáltatás létrejött-e.

Kulcsok létrehozása és lekérése

A hangszolgáltatás ügyfélről való eléréséhez hitelesítési kulcsra van szükség. Mivel csak az a program férhet hozzá, amely rendelkezik ezzel a kulccsal, meg kell akadályozni, hogy ezt a kulcsot egy harmadik fél ellopja.

Az "ügyfél" itt a Microsoft Azure-t használó összes programra vonatkozik, például asztali alkalmazásokra, okostelefon-alkalmazásokra és webalkalmazásokra.

A kulcs lekéréséhez nyissa meg a létrehozott hangszolgáltatást. Irányítópultokról, erőforráscsoportokból stb. érhető el.

Amikor megnyílik a Hangszolgáltatások lap, válassza a kulcsok > végpontokat a bal oldali menüből.

Ezután megnyílik a "Kulcs és végpont" oldal, és megjelennek az "1. kulcs", a "2. kulcs", a "Hely/régió" és a "Végpont" elemek.

Mindkét elem szükséges, de a "2. kulcs" egy tartalék keret, így a legtöbb esetben nem használják.

Jegyezze fel az egyes értékeket. Amint azt a leírásban is említettük, kérjük, ne ossza meg a kulcsot váratlanul a fejlesztő felekkel.

Ha a kulcs kiszivárgott, kattintson a fenti "1. kulcs regenerálása" gombra egy új kulcs kiadásához. Természetesen vegye figyelembe, hogy ebben az esetben az előző kulcs már nem lesz használható.

Beszédszolgáltatás használata egy programból szöveg kinyeréséhez a beszédből

Mostantól a hangszolgáltatás használata a használt programtól függően változik. Ezúttal egy .NET asztali alkalmazásból fogom elérni, de ha másik keretrendszert használ, próbálja meg használni az interneten. A hivatalos honlapon is vannak utasítások arra vonatkozóan, hogyan kell több nyelven használni.

Ezúttal egy WPF asztali alkalmazást hozunk létre a Visual Studio 2022-ben. A Visual Studio Code esetében ez egy kicsit zavaró, mert nincs tervező, de ha csak a programrészt nyeri ki, akkor konzolalkalmazásban vagy webalkalmazásban is használható.

Projekt létrehozása

Indítsa el a Visual Studio 2022-t.

Válassza az Új projekt létrehozása lehetőséget.

Válassza a WPF alkalmazás lehetőséget.

A projekt neve és helye tetszőleges. A beírás után válassza a Tovább lehetőséget.

A verziót ". NET 6,0". A beállítás után kattintson a "Létrehozás" gombra.

NuGet-beállítások

A Microsoft Azure API-hoz való hozzáférést létrehozhatja a semmiből, de egyszerűbb a használata, mert már rendelkezik hivatalos kódtárral.

Kattintson a jobb gombbal a megoldás függőségei elemre, és válassza a NuGet-csomagok kezelése lehetőséget.

Válassza a "Tallózás" fület, írja be a "Microsoft.CognitiveServices.Speech" szót a keresési beviteli mezőbe, és megjelenik egy lista, ezért válassza a "Microsoft.CognitiveServices.Speech" lehetőséget, majd kattintson a Telepítés gombra.

Kattints a OK gombot.

Válassza az Elfogadom lehetőséget.

Ha végzett, a rendszer hozzáadja a csomaghoz.

A felhasználói felület létrehozása

Ezúttal megadunk egy hangot tartalmazó WAV-fájlt, és a Beszélgetés tartalmát szöveggé alakítjuk a Speech API-val, és megjelenítjük. Egyelőre hagyja a környezetet a beviteli mezőtől függően, hogy másolással és beillesztéssel használhassa a kódot.

A képernyőnek így kell kinéznie: Mivel csak a minimális összeget tartalmazza, ha például fájlhivatkozás gombot szeretne hozzáadni, kérjük, hajtsa végre saját maga.

MainWindow.xaml a következő:

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

Folyamat létrehozása

A ExecuteButton_Click program mind módszerekbe van csomagolva. Ha más keretrendszerekben szeretné használni, írja át ezt a kódot alapként.

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

Mivel a magyarázat szinte a kódban van írva, nem magyarázom el részletesen, de ha felveti a fontos részt, akkor a következő lesz.

  • SpeechConfig A Hangszolgáltatások konfigurálása
  • AudioConfig Hangadatok beállítása a
  • SpeechRecognizer Feldolgozási osztály létrehozása
  • A beszédadatokat egyenként elemezzük, és a befejezett szöveget SpeechRecognizer.Recognized időről időre továbbítjuk az eseményen.
  • Ha a feldolgozás valamilyen okból befejeződik, SpeechRecognizer.Canceled a rendszer eseményt hív meg
  • A feldolgozás SpeechRecognizer.StartContinuousRecognitionAsync kezdetét módszernek nevezik, és a feldolgozás SpeechRecognizer.StopContinuousRecognitionAsync befejezését módszernek nevezik.

Működés ellenőrzése

A program létrehozása után hajtsa végre, írja be a szükséges elemeket, és nyomja meg a végrehajtás gombot. Ha megadta a megfelelő hangfájlt, a hangot le kell játszani, és a szöveget egyenként ki kell bontani a Microsoft Azure hangszolgáltatással a színfalak mögött.

A kinyerési rendszer nem tökéletes, mert a Microsoft Azure hangszolgáltatástól függ, Ha a hang halk és tisztán beszél, azt hiszem, jelentős pontossággal fogják kinyerni. Mivel ez egy felhőszolgáltatás, még akkor is, ha a pontosság most nem olyan magas, lehet, hogy egyre jobb lesz, mielőtt megismerné, így könnyű nem tenni semmit ezen a területen.