Uporaba storitve Microsoft Azure Speech za izvleček besedila iz zvočne datoteke
Okolje za preverjanje delovanja
- Glasovne storitve Microsoft Azure
-
- Julij 2022 izdaja
- Vizualni studio
-
- Vizualni studio 2022
- .NET
-
- 6.0
Pogoj
Preden lahko preverite, ali ti nasveti delujejo, morate:
- Ustvarjanje Microsoftovega računa (sklic: Ustvarjanje Microsoftovega računa)
- Ustvarjanje računa Microsoft Azure (sklic: Ustvarjanje računa Za Microsoft Azure)
O vzorčnih materialih
Zvočne datoteke si izposojamo na naslednjem mestu. Ni vključena v vzorčno kodo.
Zunanje povezave
Sprva
Kot primer, za snemanje vsebine srečanja itd., se vsebina pogovora zabeleži, kasneje pa se za ustvarjanje zapisnika srečanja zasliša in prepiše posneti zvok v besedilo. Lahko pa si predstavljamo, da je zelo težavno vsebino pogovora zapisati v stavek.
Če želite samodejno izvoziti in izvažati govorne podatke v besedilo, uporabite storitev Microsoft Azure Speech. V prejšnjem primeru gre za posnetek srečanja, vendar se v tem Nasvetu izvleče iz zvočne datoteke, tako da se lahko uporabi za vse, kar vsebuje vsebino pogovora.
Prav tako, tokrat govorimo o prenosu besedila, Glasovno storitev Microsoft Azure lahko uporabite tudi za pretvarjanje in prevajanje med snemanjem.
O pristojbinah
Tokrat bomo uporabili Brezplačni načrt, zato tudi če boste poskušali delovati, vam ne bodo zaračunali. Vendar pa ima brezplačni načrt časovne omejitve in omejitve znakov, zato če potrebujete več pretvorbe, potem ko ga dejansko upravljate, spremenite v plačljivem načrtu.
Za določanje cen glejte naslednjo uradno stran. Ker gre za storitev v oblaku, lahko pristojbina niha glede na sezono.
Dostop do portala Microsoft Azure
Dostop do tega URL-ja v spletnem brskalniku:
Če ste že prijavljeni, ste končali. Če še niste prijavljeni, se prikaže naslednji zaslon, zato se prijavite.
Ko se prijavite, se prikaže naslednji zaslon. Glede na načrt, ki ga nastavljate, je zaslon morda drugačen.
Ustvarjanje glasovne storitve v storitvi Microsoft Azure
Če v polje za vnos iskanja nad portalom vnesete »glas«, bo prišla »glasovna storitev«, zato ga izberite.
-Kognitivne storitve | Ko se prikaže zaslon »Glasovna storitev«, izberite »Ustvari«.
Odpre se zaslon »Ustvari govorne storitve«, zato vnesite potrebne elemente.
Osnove
Primer vhodnevsebine | elementov | |
---|---|---|
naročnina | Izberite naročnine, za katere želite plačati. Tudi če je brezplačna, jo morate vedno privezati na nekakšno naročnino. | |
Skupine virov | Določa, v katero skupino virov je treba vključiti glasovno storitev, ki jo želite ustvariti. Če ga še niste ustvarili, ga ustvarite iz spodnjega »Novega«. Skupine virov lahko omejevate kot skupine, ko ustvarjate različne storitve. | |
Regija | Izberite blizu kraja, kjer ga morda najpogosteje uporabljate. Vendar upoštevajte, da se cene lahko razlikujejo po regijah. | Japonska vzhod |
ime | Ime za to glasovno storitev. Če ustvarjate več glasovnih storitev, se prepričajte, da je ime opisno. To ime je globalno in edinstveno, zato imena, ki se uporablja drugje, ne morete uporabiti. | SpeechToText-Test |
Cenovni tier | Če ga želite brezplačno uporabljati, izberite »Free F0«. Če ga želite uporabiti za doplačilo, izberite drug načrt. Seveda obstajajo omejitve, če je brezplačna. | Brezplačni F0 |
Ko vnesete, izberite Naprej: Omrežna > spodaj.
mreža
Primer vhodnevsebine | elementov | |
---|---|---|
vrsta | Določa obseg, iz katerega je ta glasovna storitev dostopna. Če želite imeti dostop od kjerkoli brez podrobnih nastavitev, izberite "Vključno z internetom...". "Lahko se dostopa od kjerkoli" pomeni tudi "vsakdo lahko dostopa do njega", v resnici pa samo tisti, ki imajo "ključ", ki ga je treba pridobiti po tem, lahko dostopajo do njega, tako da ni toliko problem v smislu varnosti. | Vključno z internetom... |
Ko jo vnesete, izberite Naprej: Identiteta > spodaj.
Identiteta
Primer vhodnevsebine | elementov | |
---|---|---|
Sistemsko dodeljen upravljani ID | Tokrat uporabljam samo glasovno storitev, zato jo je dobro izklopiti. | Off |
Uporabniku dodeljen upravljani ID | Ni mi ga treba dodajati, ker tokrat ne ustvarim uporabnika. | brez |
Ko jo vnesete, izberite Naprej: > spodaj.
Tag
Ker se tag tokrat ne uporablja, ni nastavljen.
Ko vnesete, izberite Naprej: Preglej in ustvari > spodaj.
Pregled in ustvarjanje
Če ni težav z vnosno vsebino, se prikaže »Preverjanje veljavnosti je uspelo«. Če pride do težave, se prikaže sporočilo o napaki, zato se vrnite in ga znova nastavite.
Če ni težav z vnosno vsebino, kliknite gumb "Ustvari". Nato se bo začela uvajanje.
Čez nekaj časa je uvajanje končano in prikaže se naslednji zaslon. Ime uvajanja je dolgo, vendar vam ni treba skrbeti, ker je začasno v uvajanju.
Če želite preveriti, ali je bila glasovna storitev ustvarjena, lahko kliknete gumb Pojdi na vir.
Ustvarjanje in pridobivanje ključev
Za dostop do te glasovne storitve od odjemalca je potreben ključ za preverjanje pristnosti. Ker je dostopen le s programom, ki ima ta ključ, je treba preprečiti, da bi ta ključ ukradla tretja oseba.
»Odjemalec« se tukaj nanaša na vse programe, ki uporabljajo Microsoft Azure, kot so namizne aplikacije, aplikacije za pametne telefone in spletne aplikacije.
Če želite priti do ključa, pojdite na glasovno storitev, ki ste jo ustvarili. Do tega lahko dostopate iz nadzornih plošč, skupin virov in tako naprej.
Ko se odpre stran Glasovne storitve, v meniju na levi izberite Tipke & končne točke.
Nato se odpre stran »Ključ in končna točka« in prikažejo se elementi »Ključ 1«, »Ključ 2«, »Lokacija/regija« in »Končna točka«.
Oba elementa sta nujna, vendar je "Key 2" rezervni okvir, zato se v večini primerov ne uporablja.
Zabeleži vsako vrednost. Kot je navedeno v opisu, ne delite ključa z razvojno stranko nepričakovano.
Če ključ uhaja, kliknite »Obnovi ključ 1« zgoraj, da izdate nov ključ. Seveda se zavedajte, da v tem primeru prejšnji ključ ne bo več izposoljiv.
Uporaba govorne storitve iz programa za izvleček besedila iz govora
Od zdaj naprej se bo uporaba glasovne storitve spremenila glede na uporabljen program. Tokrat bom do tega dostopal iz namizne aplikacije .NET, če pa uporabljate drug okvir, ga poskusite uporabiti na internetu. Uradna spletna stran ima tudi navodila, kako jo uporabljati v več jezikih.
Tokrat v programu Visual Studio 2022 ustvarjamo namizno aplikacijo WPF. V primeru kode Visual Studio je to nekoliko težavno, ker ni oblikovalca, če pa izvlečete le programski del, ga je mogoče uporabiti v konzolni aplikaciji ali spletni aplikaciji.
Ustvari projekt
Zaženite Visual Studio 2022.
Izberite Ustvari nov projekt.
Izberite Program WPF.
Ime in lokacija projekta sta samovoljni. Ko ste vnesli, izberite Naprej.
Različica se imenuje ". NET 6,0". Ko nastavite, kliknite gumb "Ustvari".
Nastavitve NuGet
Dostop do API-ja za Microsoft Azure lahko ustvarite od začetka, vendar ga je lažje uporabiti, ker že imate uradno knjižnico.
Z desno tipko miške kliknite Odvisnosti za rešitev in izberite Upravljanje paketov NuGet.
Izberite zavihek »Prebrskaj«, v polje za vnos iskanja vnesite »Microsoft.CognitiveServices.Speech« in prikazal se bo seznam, zato izberite »Microsoft.CognitiveServices.Speech« in kliknite gumb Namesti.
Kliknite gumb V redu.
Izberite Strinjam se.
Ko boste končali, bo dodan v paket.
Ustvarjanje UI
Tokrat bomo določili WAV datoteko, ki vsebuje zvok, in vsebino pogovora izvlečemo v besedilo z govornim API-jem in ga prikažemo. Za zdaj pustite okolje odvisno od vnosnega polja, tako da lahko šifro uporabite s kopiranjem in lepljenjem.
Zaslon mora izgledati takole: Ker je vključen le najmanjši znesek, če želite dodati na primer gumb za sklic na datoteko, ga sami implementirate.
MainWindow.xaml
je naslednja:
<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>
Ustvarjanje procesa
ExecuteButton_Click
Program je zavit v metode. Če jo želite uporabiti v drugih okvirih, ponovno napiši to kodo kot osnovo.
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("処理が終了しました。");
}
}
}
Ker je pojasnilo skoraj zapisano v kodeksu, ne bom podrobno razložil, če pa dvignete pomemben del, bo takole.
SpeechConfig
Konfiguriranje glasovnih storitev vAudioConfig
Nastavitev glasovnih podatkov vSpeechRecognizer
Ustvari razred obdelave v- Govorni podatki se analizirajo enega za enim,
SpeechRecognizer.Recognized
dokončano besedilo pa se v dogodku prenaša od časa do časa. - Če je obdelava iz nekega razloga končana,
SpeechRecognizer.Canceled
se dogodek imenuje - Začetek obdelave
SpeechRecognizer.StartContinuousRecognitionAsync
se imenuje metoda,SpeechRecognizer.StopContinuousRecognitionAsync
dokončanje obdelave pa se imenuje metoda.
Preverjanje delovanja
Ko ustvarite program, ga izvršite, vnesite potrebne elemente in pritisnite gumb za izvajanje. Če ste določili pravilno zvočno datoteko, naj se zvok predvaja, besedilo pa je treba izvleči enega za drugim z uporabo glasovne storitve Microsoft Azure v ozadju.
Sistem ekstrakcije ni popoln, ker je odvisen od glasovne storitve Microsoft Azure, Če je glas tih in govori jasno, mislim, da bo izvleček z veliko natančnostjo. Ker gre za storitev v oblaku, tudi če točnost zdaj ni tako visoka, je morda bolje, preden jo poznate, zato je na tem področju enostavno ne storiti ničesar.