Använda Microsoft Azure Speech-tjänsten för att extrahera text från en ljudfil
Miljö för driftskontroll
- Microsoft Azure rösttjänster
-
- Juli 2022-upplagan
- Visual Studio
-
- Visual Studio 2022
- .NET
-
- 6.0
förutsättning
Innan du kan verifiera att dessa tips fungerar måste du:
- Skapa ett Microsoft-konto (referens: Skapa ett Microsoft-konto)
- Skapa ett Microsoft Azure-konto (referens: Skapa ett Microsoft Azure konto)
Om provmaterial
Vi lånar ljudfiler från följande webbplats. Den ingår inte i exempelkoden.
Externa länkar
Först
Som ett exempel, för att spela in innehållet i mötet etc., spelas innehållet i konversationen in, och senare för att skapa mötesprotokollet hörs det inspelade ljudet och transkriberas till text. Det är dock lätt att föreställa sig att det är mycket besvärligt att skriva ner innehållet i konversationen i en mening.
Så här använder du Microsoft Azure Speech-tjänsten för att automatiskt exportera och mata ut taldata till text. I föregående exempel är det en inspelning av mötet, men i detta Tips extraheras det från ljudfilen så att det kan tillämpas på allt som innehåller konversationsinnehåll.
Den här gången talar vi också om att transkribera till text, Du kan också använda Microsoft Azure rösttjänst för att konvertera och översätta under inspelning.
Om avgifter
Den här gången kommer vi att använda gratisplanen, så även om du försöker använda kommer du inte att debiteras. Gratisplanen har dock tids- och karaktärsgränser, så om du behöver mer konvertering efter att du faktiskt har använt den, vänligen ändra till en betald plan.
Se följande officiella sida för prissättning. Eftersom det är en molntjänst kan avgiften variera beroende på säsong.
Få åtkomst till Microsoft Azure-portalen
Få åtkomst till följande URL i en webbläsare:
Om du redan är inloggad är du klar. Om du inte redan är inloggad visas följande skärm, så logga in.
När du loggar in visas följande skärm. Beroende på vilken design du ställer in kan skärmen vara annorlunda.
Skapa en rösttjänst i Microsoft Azure
Om du anger "röst" i sökinmatningsfältet ovanför portalen kommer "rösttjänst" ut, så välj det.
「Cognitive Services | När skärmen "Voice Service" visas väljer du "Skapa".
Skärmen "Skapa taltjänster" öppnas, så ange nödvändiga objekt.
Grundfraser
Exempel påindatainnehåll för | objekt | |
---|---|---|
abonnemang | Välj de prenumerationer som du vill betala för. Även om det är gratis måste du alltid knyta det till någon form av prenumeration. | |
Resursgrupper | Anger i vilken resursgrupp rösttjänsten som ska skapas ska inkluderas. Om du inte har skapat en ännu, vänligen skapa en från "Ny" nedan. Du kan tänka på resursgrupper som grupperingar när du skapar olika tjänster. | |
Region | Välj nära en plats där du kanske använder den oftast. Observera dock att priserna kan variera beroende på region. | Japan, östra |
Namn | Alla namn för den här rösttjänsten. Om du skapar mer än en rösttjänst kontrollerar du att namnet är beskrivande. Det här namnet är globalt och unikt, så du kan inte använda ett namn som används någon annanstans. | SpeechToText-Test |
Prisnivå | Om du vill använda den gratis väljer du "Free F0". Om du vill använda den mot en avgift, välj en annan plan. Naturligtvis finns det begränsningar om det är gratis. | Gratis F0 |
När du har angett väljer du Nästa: > nedan.
nätverk
Exempel påindatainnehåll för | objekt | |
---|---|---|
sort | Anger det intervall från vilket den här rösttjänsten är tillgänglig. Om du vill kunna komma åt den var som helst utan några detaljerade inställningar, välj "Inklusive Internet ...". "Kan nås var som helst" betyder också "vem som helst kan komma åt den", men i själva verket bara de som har "nyckeln" som ska förvärvas efter detta kan komma åt den, så det är inte så mycket ett problem när det gäller säkerhet. | Inklusive Internet ... |
När du har angett det väljer du Nästa: > nedan.
Identitet
Exempel påindatainnehåll för | objekt | |
---|---|---|
Systemtilldelat hanterat ID | Den här gången använder jag rösttjänsten ensam, så det är bra att stänga av den. | bort |
Användartilldelat hanterat ID | Jag behöver inte lägga till den eftersom jag inte skapar en användare den här gången. | utan |
När du har angett det väljer du Nästa: Tagga > nedan.
tagg
Eftersom taggen inte används den här gången är den inte inställd.
När du har angett väljer du Nästa: Granska och skapa > nedan.
Granska och skapa
Om det inte finns några problem med indatainnehållet visas "Valideringen lyckades". Om det finns ett problem visas ett felmeddelande, så gå tillbaka och ställ in det igen.
Om det inte finns några problem med inmatningsinnehållet klickar du på knappen "Skapa". Sedan börjar distributionen.
Efter ett tag är distributionen klar och följande skärm visas. Distributionsnamnet är långt, men du behöver inte oroa dig för det eftersom det är tillfälligt i distributionen.
Du kan klicka på knappen Gå till resurs för att kontrollera att rösttjänsten har skapats.
Generera och hämta nycklar
En autentiseringsnyckel krävs för att komma åt den här rösttjänsten från klienten. Eftersom det endast är tillgängligt för programmet som har den här nyckeln är det nödvändigt att förhindra att den här nyckeln blir stulen av en tredje part.
"Klient" här avser alla program som använder Microsoft Azure, till exempel skrivbordsappar, smartphone-appar och webbappar.
För att få nyckeln, gå till rösttjänsten du skapade. Den kan nås från instrumentpaneler, resursgrupper och så vidare.
När sidan Rösttjänster öppnas väljer du Nycklar & slutpunkter på menyn till vänster.
Sedan öppnas sidan "Nyckel och slutpunkt" och objekten "Nyckel 1", "Nyckel 2", "Plats / region" och "Slutpunkt" visas.
Båda föremålen är nödvändiga, men "Key 2" är en reservram, så den används inte i de flesta fall.
Anteckna varje värde. Som nämnts i beskrivningen, vänligen dela inte nyckeln med utvecklingsländerna oväntat.
Om nyckeln läcker ut klickar du på "Återskapa nyckel 1" ovan för att utfärda en ny nyckel. Naturligtvis, var medveten om att i det här fallet kommer den tidigare nyckeln inte längre att kunna användas.
Använda en taltjänst från ett program för att extrahera text från tal
Från och med nu kommer användningen av rösttjänsten att ändras beroende på vilket program som används. Den här gången kommer jag åt den från ett .NET-skrivbordsprogram, men om du använder ett annat ramverk kan du försöka använda det på Internet. Den officiella webbplatsen har också instruktioner om hur man använder den på flera språk.
Den här gången skapar vi en WPF-skrivbordsapp i Visual Studio 2022. När det gäller Visual Studio Code är det lite besvärligt eftersom det inte finns någon designer, men om du bara extraherar programdelen är det möjligt att använda den i en konsolapp eller en webbapp.
Skapa projekt
Starta Visual Studio 2022.
Välj Skapa nytt projekt.
Välj WPF-program.
Projektnamnet och platsen är godtyckliga. När du har angett väljer du Nästa.
Versionen heter ". NETTO 6,0". När du har ställt in klickar du på knappen "Skapa".
NuGet-inställningar
Du kan skapa åtkomst till Microsoft Azure API från grunden, men det är enklare att använda det eftersom du redan har ett officiellt bibliotek.
Högerklicka på Beroenden för lösningen och välj Hantera NuGet-paket.
Välj fliken "Bläddra", ange "Microsoft.CognitiveServices.Speech" i sökinmatningsfältet och en lista visas, så välj "Microsoft.CognitiveServices.Speech" och klicka på Installera-knappen.
Klicka på OK knapp.
Välj Jag godkänner.
När du är klar läggs det till i paketet.
Skapa användargränssnittet
Den här gången anger vi en WAV-fil som innehåller ljud och extraherar konversationsinnehållet till text med Speech API och gör att det visas. Låt för tillfället miljön vara beroende av inmatningsfältet så att du kan använda koden genom att kopiera och klistra in.
Skärmen ska se ut så här: Eftersom endast minimibeloppet ingår, om du till exempel vill lägga till en filreferensknapp, vänligen implementera det själv.
MainWindow.xaml
är följande:
<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>
Skapa en process
Programmet ExecuteButton_Click
är allt inslaget i metoder. Om du vill använda den i andra ramverk skriver du om den här koden som bas.
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("処理が終了しました。");
}
}
}
Eftersom förklaringen nästan är skriven i koden kommer jag inte att förklara i detalj, men om du tar upp den viktiga delen kommer det att vara enligt följande.
SpeechConfig
Konfigurera rösttjänster iAudioConfig
Ställa in röstdata iSpeechRecognizer
Generera bearbetningsklass i- Taldata analyseras en efter en, och den färdiga texten
SpeechRecognizer.Recognized
skickas i händelsen från tid till annan. - Om bearbetningen är klar av någon anledning
SpeechRecognizer.Canceled
anropas en händelse - Bearbetningsstart
SpeechRecognizer.StartContinuousRecognitionAsync
kallas metoden, och slutförandet av behandlingen kallasSpeechRecognizer.StopContinuousRecognitionAsync
metoden.
Kontroll av drift
När du har skapat programmet, kör det, ange nödvändiga objekt och tryck på exekveringsknappen. Om du har angett rätt ljudfil ska ljudet spelas upp och texten extraheras en efter en med hjälp av Microsoft Azure rösttjänsten bakom kulisserna.
Systemet för extrahering är inte perfekt eftersom det beror på Microsoft Azure rösttjänst, Om rösten är tyst och talar tydligt tror jag att den kommer att extraheras med stor noggrannhet. Eftersom det är en molntjänst, även om noggrannheten inte är så hög nu, kan det bli bättre innan du vet ordet av det, så det är lätt att inte göra någonting inom det området.