ใช้บริการเสียงพูดของ Microsoft Azure เพื่อแยกข้อความจากไฟล์เสียง
สภาพแวดล้อมการตรวจสอบการทํางาน
- บริการเสียง Azure ของ Microsoft
-
- ฉบับเดือนกรกฎาคม 2022
- วิชวลสตูดิโอ
-
- วิชวลสตูดิโอ 2022
- .NET
-
- 6.0
เงื่อนไขเบื้องต้น
ก่อนที่คุณจะสามารถยืนยันได้ว่าทิปนี้ใช้งานได้หรือไม่ คุณจําเป็นต้องทําสิ่งต่อไปนี้ก่อนจึงจะตรวจสอบได้
- สร้างบัญชี Microsoft (การอ้างอิง: สร้างบัญชี Microsoft)
- สร้างบัญชี Microsoft Azure (อ้างอิง: สร้างบัญชี Microsoft Azure)
เกี่ยวกับวัสดุตัวอย่าง
เรายืมไฟล์เสียงจากเว็บไซต์ต่อไปนี้ ไม่รวมอยู่ในโค้ดตัวอย่าง
ลิงก์ภายนอก
ทีแรก
ตัวอย่างเช่นในการบันทึกเนื้อหาของการประชุม ฯลฯ เนื้อหาของการสนทนาจะถูกบันทึกและต่อมาเพื่อสร้างรายงานการประชุมเสียงที่บันทึกจะถูกได้ยินและถอดความเป็นข้อความ อย่างไรก็ตามมันเป็นเรื่องง่ายที่จะจินตนาการว่ามันยากมากที่จะเขียนเนื้อหาของการสนทนาลงในประโยค
ต่อไปนี้เป็นวิธีใช้บริการเสียงพูดของ Microsoft Azure เพื่อส่งออกและส่งออกข้อมูลคําพูดเป็นข้อความโดยอัตโนมัติ ในตัวอย่างก่อนหน้านี้เป็นการบันทึกการประชุม แต่ในเคล็ดลับนี้มันถูกดึงออกมาจากไฟล์เสียงดังนั้นจึงสามารถนําไปใช้กับอะไรก็ได้ที่มีเนื้อหาการสนทนา
นอกจากนี้คราวนี้เรากําลังพูดถึงการถอดความเป็นข้อความ คุณยังสามารถใช้บริการเสียง Microsoft Azure เพื่อแปลงและแปลขณะบันทึกได้อีกด้วย
เกี่ยวกับค่าธรรมเนียม
คราวนี้เราจะใช้แผนฟรีดังนั้นแม้ว่าคุณจะพยายามดําเนินการคุณจะไม่ถูกเรียกเก็บเงิน อย่างไรก็ตามแผนบริการฟรีมีเวลาและอักขระ จํากัด ดังนั้นหากคุณต้องการการแปลงเพิ่มเติมหลังจากใช้งานจริงโปรดเปลี่ยนเป็นแผนชําระเงิน
โปรดดูหน้าอย่างเป็นทางการต่อไปนี้สําหรับการกําหนดราคา เนื่องจากเป็นบริการคลาวด์ค่าธรรมเนียมอาจผันผวนขึ้นอยู่กับฤดูกาล
เข้าถึงพอร์ทัล Azure ของไมโครซอฟท์
เข้าถึง URL ต่อไปนี้ในเว็บเบราว์เซอร์:
หากคุณลงชื่อเข้าใช้แล้ว แสดงว่าคุณทําเสร็จแล้ว หากคุณยังไม่ได้ลงชื่อเข้าใช้หน้าจอต่อไปนี้จะปรากฏขึ้นดังนั้นโปรดลงชื่อเข้าใช้
เมื่อคุณเข้าสู่ระบบหน้าจอต่อไปนี้จะปรากฏขึ้น ขึ้นอยู่กับการออกแบบที่คุณกําลังตั้งค่าจอแสดงผลอาจแตกต่างกัน
สร้างบริการเสียงใน Microsoft Azure
หากคุณป้อน "เสียง" ในช่องป้อนข้อมูลการค้นหาเหนือพอร์ทัล "บริการเสียง" จะออกมาดังนั้นให้เลือก
「บริการความรู้ความเข้าใจ| เมื่อหน้าจอ "บริการเสียง" ปรากฏขึ้น ให้เลือก "สร้าง"
หน้าจอ "สร้างบริการเสียงพูด" จะเปิดขึ้นดังนั้นป้อนรายการที่จําเป็น
พื้นฐาน
ตัวอย่างของอินพุตเนื้อหา | ของ | รายการ |
---|---|---|
การสมัครสมาชิก | เลือกการสมัครใช้บริการที่คุณต้องการชําระเงิน แม้ว่าจะฟรี แต่คุณต้องผูกมันไว้กับการสมัครสมาชิกบางประเภทเสมอ | |
กลุ่มทรัพยากร | ระบุว่าจะรวมบริการเสียงลงในกลุ่มทรัพยากรใด หากคุณยังไม่ได้สร้างโปรดสร้างจาก "ใหม่" ด้านล่าง คุณสามารถคิดว่ากลุ่มทรัพยากรเป็นการจัดกลุ่มเมื่อคุณสร้างบริการต่างๆ | |
บริเวณ | เลือกใกล้กับสถานที่ที่คุณอาจใช้งานบ่อยที่สุด อย่างไรก็ตาม โปรดทราบว่าราคาอาจแตกต่างกันไปตามภูมิภาค | ญี่ปุ่นตะวันออก |
ชื่อ | ชื่อใด ๆ สําหรับบริการเสียงนี้ หากคุณกําลังสร้างบริการเสียงมากกว่าหนึ่งบริการ โปรดตรวจสอบให้แน่ใจว่าชื่อนั้นสื่อความหมาย ชื่อนี้เป็นชื่อสากลและไม่ซ้ํากัน ดังนั้นคุณจึงไม่สามารถใช้ชื่อที่ใช้ที่อื่นได้ | SpeechToText-Test |
ระดับราคา | หากคุณต้องการใช้งานฟรีให้เลือก"ฟรี F0" หากคุณต้องการใช้โดยมีค่าธรรมเนียมโปรดเลือกแผนอื่น แน่นอนว่ามีข้อ จํากัด หากฟรี | ฟรี F0 |
เมื่อป้อนแล้ว ให้เลือก ถัดไป: >เครือข่าย ด้านล่าง
เครือข่าย
ตัวอย่างของอินพุตเนื้อหา | ของ | รายการ |
---|---|---|
ชนิด | ระบุช่วงที่สามารถเข้าถึงบริการเสียงนี้ได้ หากคุณต้องการสามารถเข้าถึงได้จากทุกที่โดยไม่มีการตั้งค่าโดยละเอียดให้เลือก "รวมถึงอินเทอร์เน็ต ... "" "สามารถเข้าถึงได้จากที่ใดก็ได้" ยังหมายถึง "ทุกคนสามารถเข้าถึงได้" แต่ในความเป็นจริงเฉพาะผู้ที่มี "คีย์" ที่จะได้รับหลังจากนี้สามารถเข้าถึงได้ดังนั้นจึงไม่เป็นปัญหามากนักในแง่ของความปลอดภัย | รวมถึงอินเทอร์เน็ต... |
เมื่อคุณป้อนแล้ว ให้เลือก ถัดไป: >ข้อมูลประจําตัว ด้านล่าง
เอกลักษณ์
ตัวอย่างของอินพุตเนื้อหา | ของ | รายการ |
---|---|---|
รหัสที่มีการจัดการที่กําหนดโดยระบบ | คราวนี้ฉันใช้บริการเสียงเพียงอย่างเดียวดังนั้นจึงเป็นการดีที่จะปิด | ไป |
รหัสที่มีการจัดการที่ผู้ใช้กําหนด | ฉันไม่จําเป็นต้องเพิ่มเพราะฉันไม่ได้สร้างผู้ใช้ในครั้งนี้ | ปราศจาก |
เมื่อคุณป้อนแล้ว ให้เลือก ถัดไป: แท็ก >ด้านล่าง
ฉลาก
เนื่องจากแท็กไม่ได้ใช้ในครั้งนี้จึงไม่ได้ตั้งค่า
เมื่อป้อนแล้ว ให้เลือก ถัดไป: ตรวจสอบและสร้าง>ด้านล่าง
ตรวจสอบและสร้าง
ถ้าไม่มีปัญหากับเนื้อหาอินพุต "การตรวจสอบความถูกต้องสําเร็จ" จะปรากฏขึ้น หากมีปัญหาข้อความแสดงข้อผิดพลาดจะปรากฏขึ้นดังนั้นให้ย้อนกลับและตั้งค่าอีกครั้ง
หากไม่มีปัญหากับเนื้อหาที่ป้อนข้อมูลให้คลิกปุ่ม "สร้าง" จากนั้นการปรับใช้จะเริ่มขึ้น
หลังจากนั้นสักครู่การปรับใช้จะเสร็จสมบูรณ์และหน้าจอต่อไปนี้จะปรากฏขึ้น ชื่อการปรับใช้มีความยาว แต่คุณไม่จําเป็นต้องกังวลเกี่ยวกับชื่อนั้นเนื่องจากเป็นชื่อชั่วคราวในการปรับใช้
คุณสามารถคลิกปุ่ม ไปที่ทรัพยากร เพื่อตรวจสอบว่ามีการสร้างบริการเสียงแล้ว
การสร้างและการดึงข้อมูลคีย์
ต้องใช้คีย์การรับรองความถูกต้องเพื่อเข้าถึงบริการเสียงนี้จากไคลเอนต์ เนื่องจากสามารถเข้าถึงได้โดยโปรแกรมที่มีคีย์นี้เท่านั้นจึงจําเป็นต้องป้องกันไม่ให้คีย์นี้ถูกขโมยโดยบุคคลที่สาม
"ไคลเอ็นต์" ในที่นี้หมายถึงโปรแกรมทั้งหมดที่ใช้ Microsoft Azure เช่น แอปเดสก์ท็อป แอปสมาร์ทโฟน และเว็บแอป
หากต้องการรับคีย์ ให้ไปที่บริการเสียงที่คุณสร้างขึ้น สามารถเข้าถึงได้จากแดชบอร์ดกลุ่มทรัพยากรและอื่น ๆ
เมื่อหน้าบริการเสียงเปิดขึ้น ให้เลือก คีย์ & ปลายทาง จากเมนูทางด้านซ้าย
จากนั้นหน้า "คีย์และปลายทาง" จะเปิดขึ้นและรายการ "คีย์ 1", "คีย์ 2", "ตําแหน่ง / ภูมิภาค" และ "จุดสิ้นสุด" จะปรากฏขึ้น
ทั้งสองรายการมีความจําเป็น แต่ "Key 2" เป็นเฟรมสํารองดังนั้นจึงไม่ได้ใช้ในกรณีส่วนใหญ่
จดบันทึกค่าแต่ละค่า ดังที่ได้กล่าวไว้ในคําอธิบายโปรดอย่าแบ่งปันกุญแจกับฝ่ายพัฒนาโดยไม่คาดคิด
หากคีย์รั่วไหล ให้คลิก "สร้างคีย์ใหม่ 1" ด้านบนเพื่อออกคีย์ใหม่ แน่นอนโปรดทราบว่าในกรณีนี้คีย์ก่อนหน้าจะไม่สามารถใช้งานได้อีกต่อไป
ใช้บริการเสียงจากโปรแกรมเพื่อแยกข้อความจากคําพูด
จากนี้ไปการใช้บริการเสียงจะเปลี่ยนไปขึ้นอยู่กับโปรแกรมที่ใช้ คราวนี้ฉันจะเข้าถึงได้จากแอปพลิเคชันเดสก์ท็อป. NET แต่ถ้าคุณใช้เฟรมเวิร์กอื่นให้ลองใช้บนอินเทอร์เน็ต เว็บไซต์อย่างเป็นทางการยังมีคําแนะนําเกี่ยวกับวิธีการใช้งานในหลายภาษา
คราวนี้ เรากําลังสร้างแอปเดสก์ท็อป WPF ใน Visual Studio 2022 ในกรณีของ Visual Studio Code มันค่อนข้างลําบากเพราะไม่มีตัวออกแบบ แต่ถ้าคุณแยกเฉพาะส่วนโปรแกรมคุณสามารถใช้มันในแอปคอนโซลหรือเว็บแอปได้
สร้างโครงการ
เริ่มการทํางานของ Visual Studio 2022
เลือก "สร้างโครงการใหม่"
เลือกแอปพลิเคชัน WPF
ชื่อโครงการและที่ตั้งเป็นไปตามอําเภอใจ เมื่อป้อนแล้ว ให้เลือก ถัดไป
รุ่นนี้เรียกว่า ". เน็ต 6.0". เมื่อตั้งค่าแล้วให้คลิกปุ่ม "สร้าง"
การตั้งค่า NuGet
คุณสามารถสร้างการเข้าถึง Microsoft Azure API ตั้งแต่เริ่มต้น แต่ใช้งานได้ง่ายขึ้นเนื่องจากคุณมีไลบรารีอย่างเป็นทางการอยู่แล้ว
คลิกขวาที่ การขึ้นต่อกัน สําหรับโซลูชัน และเลือก จัดการแพคเกจ NuGet
เลือกแท็บ "เรียกดู" ป้อน "Microsoft.CognitiveServices.Speech" ในช่องป้อนข้อมูลการค้นหาและรายการจะปรากฏขึ้นดังนั้นเลือก "Microsoft.CognitiveServices.Speech" แล้วคลิกปุ่มติดตั้ง
คลิก ตกลง ปุ่ม.
เลือกฉันยอมรับ
เมื่อคุณทําเสร็จแล้วมันจะถูกเพิ่มลงในแพ็คเกจ
การสร้าง UI
คราวนี้เราจะระบุไฟล์ WAV ที่มีเสียงและแยกเนื้อหาการสนทนาเป็นข้อความด้วย Speech API และทําให้แสดง ในขณะนี้ปล่อยให้สภาพแวดล้อมขึ้นอยู่กับช่องป้อนข้อมูลเพื่อให้คุณสามารถใช้รหัสโดยการคัดลอกและวาง
หน้าจอควรมีลักษณะดังนี้: เนื่องจากมีเพียงจํานวนเงินขั้นต่ําเท่านั้นหากคุณต้องการเพิ่มปุ่มอ้างอิงไฟล์เช่นโปรดนําไปใช้เอง
MainWindow.xaml
มีดังนี้:
<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>
การสร้างกระบวนการ
โปรแกรม ExecuteButton_Click
ถูกห่อหุ้มด้วยวิธีการทั้งหมด หากคุณต้องการใช้ในเฟรมเวิร์กอื่น ให้เขียนโค้ดนี้เป็นฐานใหม่
เมนวินโดว์.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("処理が終了しました。");
}
}
}
เนื่องจากคําอธิบายเกือบจะเขียนไว้ในรหัสฉันจะไม่อธิบายในรายละเอียด แต่ถ้าคุณยกส่วนสําคัญมันจะเป็นดังนี้
SpeechConfig
การกําหนดค่าบริการเสียงในAudioConfig
การตั้งค่าข้อมูลเสียงในSpeechRecognizer
สร้างคลาสการประมวลผลใน- ข้อมูลคําพูดจะถูกวิเคราะห์ทีละรายการและข้อความที่
SpeechRecognizer.Recognized
เสร็จสมบูรณ์จะถูกส่งผ่านในเหตุการณ์เป็นครั้งคราว - หากการประมวลผลเสร็จสิ้นด้วยเหตุผลบางประการ
SpeechRecognizer.Canceled
จะมีการเรียกเหตุการณ์ - การเริ่มต้นของการประมวลผลเรียกว่า
SpeechRecognizer.StartContinuousRecognitionAsync
วิธีการและความสมบูรณ์ของการประมวลผลเรียกว่าSpeechRecognizer.StopContinuousRecognitionAsync
วิธีการ
การตรวจสอบการทํางาน
หลังจากสร้างโปรแกรมแล้วให้ดําเนินการป้อนรายการที่จําเป็นและกดปุ่มดําเนินการ หากคุณระบุไฟล์เสียงที่ถูกต้องเสียงควรเล่นและควรแยกข้อความทีละรายการโดยใช้บริการเสียง Microsoft Azure เบื้องหลัง
ระบบการสกัดไม่สมบูรณ์แบบเพราะขึ้นอยู่กับบริการเสียง Microsoft Azure หากเสียงเงียบและพูดอย่างชัดเจนฉันคิดว่ามันจะถูกดึงออกมาด้วยความแม่นยํามาก เนื่องจากเป็นบริการคลาวด์แม้ว่าความแม่นยําจะไม่สูงนักในตอนนี้ แต่ก็อาจดีขึ้นก่อนที่คุณจะรู้ดังนั้นจึงเป็นเรื่องง่ายที่จะไม่ทําอะไรในพื้นที่นั้น