Helifailist teksti ekstraktimiseks teenuse Microsoft Azure Speech kasutamine
Toimingu kontrollimise keskkond
- Microsoft Azure Voice Services
-
- Juuli 2022 väljaanne
- Visuaalne Stuudio
-
- Visual Studio 2022
- .NET
-
- 6.0
eeltingimus
Enne kui saate kontrollida, kas see näpunäide töötab, peate tegema järgmist.
- Microsofti konto loomine (viide: Microsofti konto loomine)
- Microsoft Azure'i konto loomine (viide: Microsoft Azure'i konto loomine)
Proovimaterjalide kohta
Laename helifaile järgmiselt saidilt. See ei sisaldu näidiskoodis.
Välised lingid
Alguses
Näiteks koosoleku sisu jms salvestamiseks salvestatakse vestluse sisu ja hiljem koosoleku protokolli koostamiseks kuulatakse salvestatud heli ja transkribeeritakse tekstiks. Siiski on lihtne ette kujutada, et vestluse sisu on väga tülikas lausesse kirjutada.
Siit saate teada, kuidas kasutada Microsoft Azure'i kõneteenust kõneandmete automaatseks eksportimiseks ja tekstiks väljastamiseks. Eelmises näites on see koosoleku salvestus, kuid selles näpunäites ekstraheeritakse see helifailist, nii et seda saab rakendada kõigele, mis sisaldab vestluse sisu.
Samuti räägime seekord teksti ümberkirjutamisest, Salvestamise ajal teisendamiseks ja tõlkimiseks saate kasutada ka Microsoft Azure'i häälteenust.
Tasude kohta
Seekord kasutame tasuta paketti, nii et isegi kui proovite tegutseda, ei võeta teilt tasu. Tasuta plaanil on aga aja- ja tähemärgipiirangud, nii et kui vajate pärast selle tegelikku käitamist rohkem konversiooni, minge üle tasulisele plaanile.
Palun vaadake hinnakujunduse kohta järgmist ametlikku lehte. Kuna tegemist on pilveteenusega, võib tasu sõltuvalt aastaajast kõikuda.
Juurdepääs Microsoft Azure'i portaalile
Juurdepääs järgmisele URL-ile veebibrauseris:
Kui olete juba sisse logitud, olete valmis. Kui te pole veel sisse logitud, kuvatakse järgmine ekraan, seega logige sisse.
Sisselogimisel kuvatakse järgmine ekraan. Sõltuvalt seadistatavast kujundusest võib ekraan olla erinev.
Kõneteenuse loomine Microsoft Azure'is
Kui sisestate portaali kohal olevale otsingu sisendväljale "hääl", ilmub välja "häälteenus", nii et valige see.
「Kognitiivsete teenuste | Kui kuvatakse ekraan "Voice Service", valige "Create".
Avaneb ekraan "Loo kõneteenused", seega sisestage vajalikud elemendid.
Peamised
Üksuste | sisendsisu | näide |
---|---|---|
tellimus | Valige tellimused, mille eest soovite maksta. Isegi kui see on tasuta, peate selle alati siduma mingisuguse tellimusega. | |
Ressursside rühmad | Määrab, millisesse ressursigruppi loodav häälteenus kaasatakse. Kui te pole seda veel loonud, looge see allpool olevast jaotisest "Uus". Ressursirühmi saate mõelda rühmadena, kui loote erinevaid teenuseid. | |
Piirkond | Valige koha lähedal, kus te seda kõige sagedamini kasutate. Pange tähele, et hinnad võivad piirkonniti erineda. | Jaapanist ida suunas |
Nimi | Selle kõneteenuse mis tahes nimi. Kui loote rohkem kui ühte häälteenust, veenduge, et nimi oleks kirjeldav. See nimi on globaalne ja ainulaadne, nii et te ei saa kasutada mujal kasutatavat nime. | SpeechToText-Test |
Hinnatase | Kui soovite seda tasuta kasutada, valige "Free F0". Kui soovite seda tasu eest kasutada, valige mõni muu pakett. Muidugi on piiranguid, kui see on tasuta. | Tasuta F0 |
Kui olete sisestatud, valige allpool Next: Network >.
võrk
Üksuste | sisendsisu | näide |
---|---|---|
lahke | – saate määrata vahemiku, millest alates sellele kõneteenusele juurde pääseb. Kui soovite, et pääseksite sellele juurde kõikjalt ilma üksikasjalike seadistusteta, valige "Sealhulgas Internet ...". "Saab juurde pääseda kõikjalt" tähendab ka "igaüks pääseb sellele juurde", kuid tegelikult pääsevad sellele juurde ainult need, kellel on pärast seda omandatav "võti", nii et see pole turvalisuse seisukohast nii suur probleem. | Sealhulgas Internet... |
Kui olete selle sisestanud, valige allpool Next: Identity >.
Identiteet
Üksuste | sisendsisu | näide |
---|---|---|
Süsteemile määratud hallatud ID | Seekord kasutan kõneteenust üksi, seega on hea see välja lülitada. | maha |
Kasutajale määratud hallatud ID | Ma ei pea seda lisama, sest ma ei loo seekord kasutajat. | ilma |
Kui olete selle sisestanud, valige allpool Nupp Edasi: tag >.
Tag
Kuna silti seekord ei kasutata, pole seda määratud.
Kui olete sisestatud, valige Allpool Järgmine: Vaadake üle ja looge >.
Ülevaatamine ja loomine
Kui sisendi sisuga probleeme ei ole, kuvatakse "Valideerimine õnnestus". Probleemi korral kuvatakse veateade, nii et minge tagasi ja seadke see uuesti.
Kui sisendsisuga pole probleeme, klõpsake nuppu "Loo". Seejärel algab juurutamine.
Mõne aja pärast on juurutamine lõpule viidud ja kuvatakse järgmine ekraan. Juurutuse nimi on pikk, kuid te ei pea selle pärast muretsema, kuna see on juurutamisel ajutine.
Võite klõpsata nuppu Mine ressursile, et kontrollida, kas kõneteenus on loodud.
Võtmete genereerimine ja toomine
Kliendilt sellele kõneteenusele juurdepääsuks on vaja autentimisvõtit. Kuna sellele pääseb juurde ainult programm, millel on see võti, on vaja vältida selle võtme varastamist kolmanda osapoole poolt.
"Klient" viitab siin kõigile Programmidele, mis kasutavad Microsoft Azure'i, näiteks töölauarakendused, nutitelefonirakendused ja veebirakendused.
Võtme saamiseks minge loodud häälteenusesse. Sellele pääseb juurde armatuurlaudadelt, ressursirühmadelt jne.
Kui avaneb leht Voice Services (Kõneteenused), valige vasakpoolsest menüüst Klahvid ja lõpp-punktid.
Seejärel avaneb leht "Võti ja lõpp-punkt" ning kuvatakse üksused "Võti 1", "Võti 2", "Asukoht/piirkond" ja "Lõpp-punkt".
Mõlemad elemendid on vajalikud, kuid "Key 2" on varuraam, mistõttu seda enamikul juhtudel ei kasutata.
Märkige iga väärtus üles. Nagu kirjelduses mainitud, siis palun ärge jagage võtit arendus osapooltega ootamatult.
Kui võti on lekkinud, klõpsake uue võtme väljastamiseks ülalpool nuppu "Regenereerige võti 1". Muidugi pidage meeles, et sel juhul ei ole eelmine võti enam kasutatav.
Kõneteenuse kasutamine kõnest teksti eraldamiseks kõnest
Nüüdsest muutub kõneteenuse kasutamine sõltuvalt kasutatavast programmist. Seekord pääsen sellele juurde .NET-i töölauarakendusest, kuid kui kasutate mõnda muud raamistikku, proovige seda kasutada Internetis. Ametlikul veebisaidil on ka juhised selle kasutamiseks mitmes keeles.
Seekord loome Visual Studio 2022-s WPF-i töölauarakenduse. Visual Studio Code puhul on see veidi tülikas, sest disainerit pole, kuid kui eraldate ainult programmiosa, on seda võimalik kasutada konsoolirakenduses või veebirakenduses.
Projecti loomine
Käivitage Visual Studio 2022.
Valige Loo uus projekt.
Valige WPF-rakendus.
Projekti nimi ja asukoht on meelevaldsed. Pärast sisestamist valige Edasi.
Versiooni nimetatakse ". NETO 6,0". Kui olete seadistatud, klõpsake nuppu "Loo".
NuGeti seaded
Saate luua juurdepääsu Microsoft Azure API-le nullist, kuid seda on lihtsam kasutada, kuna teil on juba ametlik teek.
Paremklõpsake lahenduse jaoks sõltuvusi ja valige Halda NuGeti pakette.
Valige vahekaart "Sirvi", sisestage otsingu sisestusväljale "Microsoft.CognitiveServices.Speech" ja kuvatakse loend, seega valige "Microsoft.CognitiveServices.Speech" ja klõpsake nuppu Installi.
Klõpsake nuppu OK.
Vali Nõustun.
Kui olete lõpetanud, lisatakse see pakendile.
Kasutajaliidese loomine
Seekord määrame heli sisaldava WAV-faili ja ekstraktime vestluse sisu Speech API abil tekstiks ning muudame selle kuvatavaks. Esialgu jätke keskkond sisendväljast sõltuvaks, et saaksite koodi kopeerimise ja kleepimise teel kasutada.
Ekraan peaks välja nägema selline: Kuna hinna sees on ainult minimaalne summa, siis kui soovite lisada näiteks failiviite nupu, siis palun rakendage see ise.
MainWindow.xaml
on järgmine:
<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>
Protsessi loomine
Programm ExecuteButton_Click
on kõik pakitud meetoditesse. Kui soovite seda kasutada teistes raamistikes, kirjutage see kood alusena ümber.
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("処理が終了しました。");
}
}
}
Kuna selgitus on koodis peaaegu kirjutatud, ei selgita ma üksikasjalikult, kuid kui tõstate olulise osa, on see järgmine.
SpeechConfig
Kõneteenuste konfigureerimineAudioConfig
Häälandmete häälestamineSpeechRecognizer
Genereeri töötlemisklass- Kõneandmeid analüüsitakse ükshaaval ja lõpetatud tekst
SpeechRecognizer.Recognized
edastatakse sündmuses aeg-ajalt. - Kui töötlemine on mingil põhjusel lõppenud,
SpeechRecognizer.Canceled
nimetatakse sündmust - Töötlemise algust nimetatakse
SpeechRecognizer.StartContinuousRecognitionAsync
meetodiks ja töötlemise lõpetamist nimetatakseSpeechRecognizer.StopContinuousRecognitionAsync
meetodiks.
Toimimise kontroll
Pärast programmi loomist käivitage see, sisestage vajalikud elemendid ja vajutage käivitusnuppu. Kui olete määranud õige helifaili, peaks heli esitama ja tekst tuleks ükshaaval ekstraktida, kasutades kulisside taga olevat Microsoft Azure'i kõneteenust.
Ekstraheerimissüsteem ei ole täiuslik, sest see sõltub Microsoft Azure'i kõneteenusest, Kui hääl on vaikne ja räägib selgelt, siis ma arvan, et see võetakse välja märkimisväärse täpsusega. Kuna see on pilveteenus, isegi kui täpsus pole praegu nii kõrge, võib see enne, kui seda teate, paremaks muutuda, nii et selles piirkonnas on lihtne mitte midagi teha.