Szöveg kinyerése a Microsoft Azure Speech service használatával egy hangfájlból
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:
- Microsoft-fiók létrehozása (hivatkozás: Microsoft-fiók létrehozása)
- Microsoft Azure-fiók létrehozása (referencia: Microsoft Azure-fiók létrehozása)
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 bemenetielemek | tartalmá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 bemenetielemek | tartalmá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 bemenetielemek | tartalmá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ásaAudioConfig
Hangadatok beállítása aSpeechRecognizer
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ásSpeechRecognizer.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.