Wyodrębnianie tekstu z pliku audio za pomocą usługi Microsoft Azure Speech
Środowisko sprawdzania operacji
- Usługi głosowe Microsoft Azure
-
- Edycja z lipca 2022 r.
- Visual Studio
-
- Program Visual Studio 2022
- Platforma .NET
-
- 6.0
Warunek wstępny
Zanim będzie można sprawdzić, czy te wskazówki działają, należy:
- Tworzenie konta Microsoft (ilustracja: Tworzenie konta Microsoft)
- Tworzenie konta Microsoft Azure (odniesienie: Tworzenie konta Microsoft Azure)
Informacje o przykładowych materiałach
Pliki audio wypożyczamy z poniższej strony. Nie jest on uwzględniony w przykładowym kodzie.
Linki zewnętrzne
Na początku
Na przykład, aby nagrać zawartość spotkania itp., Treść rozmowy jest nagrywana, a później w celu utworzenia protokołu spotkania nagrany dźwięk jest słyszany i transkrybowany na tekst. Łatwo jednak sobie wyobrazić, że bardzo kłopotliwe jest zapisanie treści rozmowy w zdaniu.
Poniżej opisano, jak używać usługi Microsoft Azure Speech do automatycznego eksportowania i wyprowadzania danych mowy do tekstu. W poprzednim przykładzie jest to nagranie spotkania, ale w tej poradzie jest wyodrębniane z pliku audio, dzięki czemu można je zastosować do wszystkiego, co zawiera zawartość konwersacji.
Również tym razem mówimy o transkrypcji na tekst, Możesz także użyć usługi głosowej Microsoft Azure do konwersji i tłumaczenia podczas nagrywania.
Informacje o opłatach
Tym razem skorzystamy z planu Free, więc nawet jeśli spróbujesz działać, nie zostaniesz obciążony. Jednak bezpłatny plan ma limity czasu i znaków, więc jeśli potrzebujesz więcej konwersji po faktycznym uruchomieniu, zmień na płatny plan.
Zapoznaj się z poniższą oficjalną stroną w celu uzyskania cen. Ponieważ jest to usługa w chmurze, opłata może się zmieniać w zależności od sezonu.
Uzyskiwanie dostępu do witryny Microsoft Azure Portal
Uzyskaj dostęp do następującego adresu URL w przeglądarce internetowej:
Jeśli jesteś już zalogowany, wszystko jest gotowe. Jeśli nie jesteś jeszcze zalogowany, zostanie wyświetlony następujący ekran, więc zaloguj się.
Po zalogowaniu zostanie wyświetlony następujący ekran. W zależności od ustawionego projektu wyświetlacz może się różnić.
Tworzenie usługi głosowej na platformie Microsoft Azure
Jeśli wpiszesz "głos" w polu wprowadzania wyszukiwania nad portalem, pojawi się "usługa głosowa", więc wybierz ją.
「| usług Cognitive Services Po wyświetleniu ekranu "Usługa głosowa" wybierz "Utwórz".
Zostanie otwarty ekran "Create Speech Services", więc wprowadź niezbędne elementy.
Podstawy
Przykład wejściowejzawartości | elementów | |
---|---|---|
subskrypcja | Wybierz subskrypcje, za które chcesz zapłacić. Nawet jeśli jest bezpłatny, zawsze musisz powiązać go z jakąś subskrypcją. | |
Grupy zasobów | Określa, do której grupy zasobów ma należeć usługa głosowa, która ma zostać utworzona. Jeśli jeszcze go nie utworzyłeś, utwórz go z "Nowego" poniżej. Grupy zasobów można traktować jako grupy podczas tworzenia różnych usług. | |
Region | Wybierz w pobliżu miejsca, w którym możesz go używać najczęściej. Należy jednak pamiętać, że ceny mogą się różnić w zależności od regionu. | Japonia Wschodnia |
nazwa | Dowolna nazwa tej usługi głosowej. Jeśli tworzysz więcej niż jedną usługę głosową, upewnij się, że nazwa jest opisowa. Ta nazwa jest globalna i unikatowa, więc nie można używać nazwy używanej w innym miejscu. | SpeechToText-Test |
Warstwa cenowa | Jeśli chcesz go używać za darmo, wybierz "Free F0". Jeśli chcesz go używać za opłatą, wybierz inny plan. Oczywiście istnieją ograniczenia, jeśli jest bezpłatny. | Darmowe F0 |
Po wprowadzeniu wybierz Dalej: Sieć > poniżej.
sieć
Przykład wejściowejzawartości | elementów | |
---|---|---|
rodzaj | Określa zakres, z którego ta usługa głosowa jest dostępna. Jeśli chcesz mieć dostęp do niego z dowolnego miejsca bez żadnych szczegółowych ustawień, wybierz "W tym Internet...". "Można uzyskać dostęp z dowolnego miejsca" oznacza również "każdy może uzyskać do niego dostęp", ale w rzeczywistości tylko ci, którzy mają "klucz" do nabycia po tym, mogą uzyskać do niego dostęp, więc nie jest to tak duży problem pod względem bezpieczeństwa. | Łącznie z Internetem... |
Po wprowadzeniu go wybierz Dalej: Tożsamość > poniżej.
Tożsamość
Przykład wejściowejzawartości | elementów | |
---|---|---|
Identyfikator zarządzany przypisany do systemu | Tym razem korzystam z samej usługi głosowej, więc dobrze ją wyłączyć. | od |
Identyfikator zarządzany przypisany przez użytkownika | Nie muszę go dodawać, ponieważ tym razem nie tworzę użytkownika. | bez |
Po wprowadzeniu go wybierz Dalej: Oznacz > poniżej.
znacznik
Ponieważ tag nie jest używany tym razem, nie jest ustawiany.
Po wprowadzeniu wybierz Dalej: Przejrzyj i utwórz > poniżej.
Przejrzyj i utwórz
Jeśli nie ma problemów z zawartością wejściową, wyświetlany jest komunikat "Walidacja powiodła się". Jeśli wystąpi problem, zostanie wyświetlony komunikat o błędzie, więc wróć i ustaw go ponownie.
Jeśli nie ma problemu z zawartością wejściową, kliknij przycisk "Utwórz". Następnie rozpocznie się wdrażanie.
Po chwili wdrożenie zostanie zakończone i zostanie wyświetlony następujący ekran. Nazwa wdrożenia jest długa, ale nie musisz się o nią martwić, ponieważ jest tymczasowa we wdrożeniu.
Możesz kliknąć przycisk Przejdź do zasobu, aby sprawdzić, czy usługa głosowa została utworzona.
Generowanie i pobieranie kluczy
Klucz uwierzytelniania jest wymagany do uzyskania dostępu do tej usługi głosowej z klienta. Ponieważ jest on dostępny tylko dla programu, który ma ten klucz, konieczne jest zapobieganie kradzieży tego klucza przez stronę trzecią.
"Klient" odnosi się tutaj do wszystkich programów korzystających z platformy Microsoft Azure, takich jak aplikacje klasyczne, aplikacje na smartfony i aplikacje internetowe.
Aby uzyskać klucz, przejdź do utworzonej usługi głosowej. Dostęp do niego można uzyskać z pulpitów nawigacyjnych, grup zasobów i tak dalej.
Po otwarciu strony Usługi głosowe wybierz pozycję Klucze i punkty końcowe z menu po lewej stronie.
Następnie otworzy się strona "Klucz i punkt końcowy" i zostaną wyświetlone elementy "Klucz 1", "Klucz 2", "Lokalizacja / region" i "Punkt końcowy".
Oba elementy są konieczne, ale "Key 2" jest ramką zapasową, więc nie jest używany w większości przypadków.
Zanotuj każdą wartość. Jak wspomniano w opisie, proszę nie dzielić się kluczem ze stronami deweloperskimi niespodziewanie.
Jeśli klucz wycieknie, kliknij "Ponownie wygeneruj klucz 1" powyżej, aby wydać nowy klucz. Oczywiście należy pamiętać, że w takim przypadku poprzedni klucz nie będzie już użyteczny.
Używanie usługi mowy z programu do wyodrębniania tekstu z mowy
Od teraz korzystanie z usługi głosowej będzie się zmieniać w zależności od używanego programu. Tym razem uzyskam do niego dostęp z aplikacji klasycznej .NET, ale jeśli używasz innej struktury, spróbuj użyć jej w Internecie. Oficjalna strona internetowa zawiera również instrukcje, jak z niej korzystać w kilku językach.
Tym razem tworzymy aplikację klasyczną WPF w programie Visual Studio 2022. W przypadku Visual Studio Code jest to trochę kłopotliwe, ponieważ nie ma projektanta, ale jeśli wyodrębnisz tylko część programu, możliwe jest użycie go w aplikacji konsolowej lub aplikacji internetowej.
Utwórz projekt
Uruchom program Visual Studio 2022.
Wybierz pozycję Utwórz nowy projekt.
Wybierz opcję Aplikacja WPF.
Nazwa i lokalizacja projektu są dowolne. Po wprowadzeniu wybierz Dalej.
Wersja nazywa się ". NET 6,0". Po ustawieniu kliknij przycisk "Utwórz".
Ustawienia NuGet
Możesz utworzyć dostęp do interfejsu API platformy Microsoft Azure od podstaw, ale łatwiej jest z niego korzystać, ponieważ masz już oficjalną bibliotekę.
Kliknij prawym przyciskiem myszy pozycję Zależności dla rozwiązania i wybierz polecenie Zarządzaj pakietami NuGet.
Wybierz kartę "Przeglądaj", wprowadź "Microsoft.CognitiveServices.Speech" w polu wprowadzania wyszukiwania, a zostanie wyświetlona lista, więc wybierz "Microsoft.CognitiveServices.Speech" i kliknij przycisk Zainstaluj.
Kliknij przycisk OK.
Wybierz opcję Zgadzam się.
Gdy skończysz, zostanie on dodany do pakietu.
Tworzenie interfejsu użytkownika
Tym razem określimy plik WAV zawierający dźwięk i wyodrębnimy zawartość konwersacji na tekst za pomocą interfejsu API mowy i wyświetlimy go. Na razie pozostaw środowisko zależne od pola wejściowego, abyś mógł użyć kodu poprzez kopiowanie i wklejanie.
Ekran powinien wyglądać tak: Ponieważ uwzględniona jest tylko minimalna kwota, jeśli chcesz na przykład dodać przycisk odwołania do pliku, zaimplementuj go samodzielnie.
MainWindow.xaml
jest następujący:
<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>
Tworzenie procesu
Program ExecuteButton_Click
jest opakowany w metody. Jeśli chcesz go używać w innych frameworkach, przepisz ten kod jako podstawę.
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("処理が終了しました。");
}
}
}
Ponieważ wyjaśnienie jest prawie napisane w kodzie, nie wyjaśnię szczegółowo, ale jeśli podniesiesz ważną część, będzie ona następująca.
SpeechConfig
Konfigurowanie usług głosowych wAudioConfig
Konfigurowanie danych głosowych wSpeechRecognizer
Generowanie klasy przetwarzania w- Dane mowy są analizowane jeden po drugim, a ukończony tekst
SpeechRecognizer.Recognized
jest przekazywany w zdarzeniu od czasu do czasu. - Jeśli przetwarzanie zostanie zakończone z jakiegoś powodu,
SpeechRecognizer.Canceled
wywoływane jest zdarzenie - Rozpoczęcie przetwarzania
SpeechRecognizer.StartContinuousRecognitionAsync
nazywa się metodą, a zakończenie przetwarzaniaSpeechRecognizer.StopContinuousRecognitionAsync
nazywa się metodą.
Kontrola operacji
Po utworzeniu programu wykonaj go, wprowadź niezbędne elementy i naciśnij przycisk wykonywania. Jeśli określono poprawny plik audio, dźwięk powinien być odtwarzany, a tekst powinien być wyodrębniany jeden po drugim przy użyciu usługi głosowej Microsoft Azure za kulisami.
System ekstrakcji nie jest doskonały, ponieważ zależy od usługi głosowej Microsoft Azure, Jeśli głos jest cichy i mówi wyraźnie, myślę, że zostanie wydobyty ze znaczną dokładnością. Ponieważ jest to usługa w chmurze, nawet jeśli dokładność nie jest teraz tak wysoka, może być coraz lepiej, zanim się zorientujesz, więc łatwo jest nie robić nic w tym obszarze.