Sử dụng dịch vụ Microsoft Azure Speech để trích xuất văn bản từ tệp âm thanh

Trang Cập Nhật :
Ngày tạo trang :

Môi trường kiểm tra hoạt động

Dịch vụ Microsoft Azure Voice
  • Ấn bản tháng 2022 năm XNUMX
Studio trực quan
  • Visual Studio 2022
.NET ·
  • 6.0

điều kiện tiên quyết

Trước khi bạn có thể xác minh rằng Mẹo này hoạt động, bạn cần phải:

Về vật liệu mẫu

Chúng tôi mượn các tệp âm thanh từ trang web sau. Nó không được bao gồm trong mã mẫu.

Liên kết ngoài

Lúc đầu

Ví dụ, để ghi lại nội dung của cuộc họp, v.v., nội dung của cuộc trò chuyện được ghi lại và sau đó để tạo biên bản cuộc họp, âm thanh đã ghi được nghe và phiên âm thành văn bản. Tuy nhiên, thật dễ dàng để tưởng tượng rằng rất rắc rối khi viết nội dung của cuộc trò chuyện thành một câu.

Dưới đây là cách sử dụng dịch vụ Microsoft Azure Speech để tự động xuất và xuất dữ liệu giọng nói thành văn bản. Trong ví dụ trước, nó là bản ghi âm cuộc họp, nhưng trong Mẹo này, nó được trích xuất từ tệp âm thanh, vì vậy nó có thể được áp dụng cho bất kỳ thứ gì có chứa nội dung cuộc trò chuyện.

Ngoài ra, lần này chúng ta đang nói về việc phiên âm thành văn bản, Bạn cũng có thể sử dụng dịch vụ thoại Microsoft Azure để chuyển đổi và dịch trong khi ghi âm.

Giới thiệu về phí

Lần này, chúng tôi sẽ sử dụng gói Miễn phí, vì vậy ngay cả khi bạn cố gắng hoạt động, bạn sẽ không bị tính phí. Tuy nhiên, gói Miễn phí có giới hạn thời gian và ký tự, vì vậy nếu bạn cần chuyển đổi nhiều hơn sau khi thực sự vận hành nó, vui lòng đổi sang gói trả phí.

Vui lòng tham khảo trang chính thức sau để biết giá cả. Vì đây là một dịch vụ đám mây, phí có thể dao động tùy theo mùa.

Truy cập cổng thông tin Microsoft Azure

Truy cập URL sau trong trình duyệt web:

Nếu bạn đã đăng nhập, bạn đã hoàn tất. Nếu bạn chưa đăng nhập, màn hình sau sẽ hiển thị, vì vậy vui lòng đăng nhập.

Khi bạn đăng nhập, màn hình sau sẽ được hiển thị. Tùy thuộc vào thiết kế bạn đang thiết lập, màn hình có thể khác nhau.

Tạo dịch vụ thoại trong Microsoft Azure

Nếu bạn nhập "giọng nói" vào trường đầu vào tìm kiếm phía trên cổng thông tin, "dịch vụ thoại" sẽ xuất hiện, vì vậy hãy chọn nó.

「Dịch vụ nhận thức | Khi màn hình "Dịch vụ thoại" được hiển thị, hãy chọn "Tạo".

Màn hình "Tạo dịch vụ giọng nói" mở ra, vì vậy hãy nhập các mục cần thiết.

Các câu cơ bản

Ví dụ về đầu vào
nội dungcủa các mục
Đăng ký Chọn các gói đăng ký mà bạn muốn thanh toán. Ngay cả khi nó miễn phí, bạn luôn cần phải gắn nó với một số loại đăng ký.
Nhóm tài nguyên Chỉ định nhóm tài nguyên mà dịch vụ thoại sẽ được tạo sẽ bao gồm. Nếu bạn chưa tạo, vui lòng tạo một tài khoản từ "Mới" bên dưới. Bạn có thể coi các nhóm nguồn lực là nhóm khi bạn tạo các dịch vụ khác nhau.
Vùng Chọn gần một nơi mà bạn có thể đang sử dụng nó thường xuyên nhất. Tuy nhiên, xin lưu ý rằng giá có thể thay đổi theo khu vực. Miền Đông Nhật Bản
Tên Bất kỳ tên nào cho dịch vụ thoại này. Nếu bạn đang tạo nhiều dịch vụ thoại, vui lòng đảm bảo rằng tên đó mang tính mô tả. Tên này là toàn cầu và duy nhất, vì vậy bạn không thể sử dụng tên được sử dụng ở nơi khác. SpeechToText-Kiểm tra
Bậc định giá Nếu bạn muốn sử dụng nó miễn phí, hãy chọn "Free F0". Nếu bạn muốn sử dụng nó với một khoản phí, vui lòng chọn một gói khác. Tất nhiên, có những hạn chế nếu nó miễn phí. F0 miễn phí

Sau khi nhập, hãy chọn Tiếp theo: Mạng > bên dưới.

mạng lưới

Ví dụ về đầu vào
nội dungcủa các mục
loại Chỉ định phạm vi mà dịch vụ thoại này có thể truy cập được. Nếu bạn muốn có thể truy cập nó từ bất cứ đâu mà không cần bất kỳ cài đặt chi tiết nào, hãy chọn "Bao gồm Internet...". "Có thể được truy cập từ bất cứ đâu" cũng có nghĩa là "bất kỳ ai cũng có thể truy cập nó", nhưng trên thực tế chỉ những người có "chìa khóa" cần có được sau này mới có thể truy cập nó, vì vậy nó không phải là vấn đề quá nhiều về mặt bảo mật. Bao gồm cả Internet...

Khi bạn đã nhập, hãy chọn Tiếp theo: Danh tính > bên dưới.

Căn cước

Ví dụ về đầu vào
nội dungcủa các mục
ID được quản lý do hệ thống gán Lần này tôi sử dụng dịch vụ thoại một mình, vì vậy nó là tốt để tắt nó đi. tắt
ID được quản lý do người dùng chỉ định Tôi không cần phải thêm nó vì tôi không tạo người dùng lần này. không

Sau khi bạn đã nhập, hãy chọn Tiếp theo: Gắn thẻ > bên dưới.

thẻ

Vì thẻ không được sử dụng lần này nên nó không được đặt.

Sau khi nhập, hãy chọn Tiếp theo: Xem lại và tạo > bên dưới.

Xem lại và tạo

Nếu không có vấn đề gì với nội dung đầu vào, "Xác thực thành công" sẽ được hiển thị. Nếu có vấn đề, một thông báo lỗi sẽ được hiển thị, vì vậy hãy quay lại và đặt lại.

Nếu không có vấn đề gì với nội dung đầu vào, hãy nhấp vào nút "Tạo". Sau đó, việc triển khai sẽ bắt đầu.

Sau một thời gian, việc triển khai hoàn tất và màn hình sau được hiển thị. Tên triển khai dài, nhưng bạn không cần phải lo lắng về nó vì nó tạm thời trong quá trình triển khai.

Bạn có thể nhấp vào Đi đến tài nguyên để xác minh rằng dịch vụ thoại đã được tạo.

Tạo và truy xuất khóa

Cần có khóa xác thực để truy cập dịch vụ thoại này từ máy khách. Vì nó chỉ có thể truy cập được bởi chương trình có khóa này, nên cần phải ngăn khóa này bị đánh cắp bởi bên thứ ba.

"Máy khách" ở đây đề cập đến tất cả các chương trình sử dụng Microsoft Azure, chẳng hạn như ứng dụng dành cho máy tính để bàn, ứng dụng điện thoại thông minh và ứng dụng web.

Để nhận khóa, hãy chuyển đến dịch vụ thoại bạn đã tạo. Nó có thể được truy cập từ bảng điều khiển, nhóm tài nguyên, v.v.

Khi trang Dịch vụ thoại mở ra, hãy chọn Phím &Điểm cuối từ menu bên trái.

Sau đó, trang "Khóa và Điểm cuối" sẽ mở ra và các mục "Khóa 1", "Khóa 2", "Vị trí / Khu vực" và "Điểm cuối" sẽ được hiển thị.

Cả hai mặt hàng đều cần thiết, nhưng "Chìa khóa 2" là một khung dự phòng, vì vậy nó không được sử dụng trong hầu hết các trường hợp.

Ghi lại từng giá trị. Như đã đề cập trong phần mô tả, vui lòng không chia sẻ khóa với các bên phát triển một cách bất ngờ.

Nếu khóa bị rò rỉ, hãy nhấp vào "Tạo lại khóa 1" ở trên để cấp khóa mới. Tất nhiên, hãy lưu ý rằng trong trường hợp này, khóa trước đó sẽ không còn sử dụng được nữa.

Sử dụng dịch vụ giọng nói từ một chương trình để trích xuất văn bản từ giọng nói

Kể từ bây giờ, việc sử dụng dịch vụ thoại sẽ thay đổi tùy thuộc vào chương trình được sử dụng. Lần này, tôi sẽ truy cập nó từ một ứng dụng .NET dành cho máy tính để bàn, nhưng nếu bạn đang sử dụng một khuôn khổ khác, hãy thử sử dụng nó trên Internet. Trang web chính thức cũng có hướng dẫn về cách sử dụng nó bằng một số ngôn ngữ.

Lần này, chúng tôi đang tạo một ứng dụng WPF dành cho máy tính để bàn trong Visual Studio 2022. Trong trường hợp của Visual Studio Code, hơi rắc rối vì không có nhà thiết kế, nhưng nếu bạn chỉ trích xuất phần chương trình, có thể sử dụng nó trong ứng dụng console hoặc ứng dụng web.

Tạo dự án

Khởi động Visual Studio 2022.

Chọn Tạo dự án mới.

Chọn Ứng dụng WPF.

Tên và vị trí dự án là tùy ý. Sau khi nhập, hãy chọn Tiếp theo.

Phiên bản được gọi là ". NET 6.0 ". Sau khi đặt, hãy nhấp vào nút "Tạo".

Cài đặt NuGet

Bạn có thể tạo quyền truy cập vào API Microsoft Azure từ đầu, nhưng nó dễ sử dụng hơn vì bạn đã có thư viện chính thức.

Nhấp chuột phải vào Dependencies cho giải pháp và chọn Manage NuGet Packages.

Chọn tab "Duyệt qua", nhập "Microsoft.CognitiveServices.Speech" vào trường nhập tìm kiếm và một danh sách sẽ được hiển thị, vì vậy hãy chọn "Microsoft.CognitiveServices.Speech" và nhấp vào nút Cài đặt.

Nhấn vào đồng ý cái nút.

Chọn Tôi đồng ý.

Khi bạn hoàn tất, nó sẽ được thêm vào gói.

Tạo giao diện người dùng

Lần này, chúng tôi sẽ chỉ định một tệp WAV có chứa âm thanh và trích xuất nội dung cuộc trò chuyện thành văn bản bằng API Giọng nói và làm cho nó được hiển thị. Hiện tại, hãy để môi trường phụ thuộc vào trường đầu vào để bạn có thể sử dụng mã bằng cách sao chép và dán.

Màn hình sẽ trông như thế này: Vì chỉ bao gồm số tiền tối thiểu, ví dụ: nếu bạn muốn thêm nút tham chiếu tệp, vui lòng tự triển khai.

MainWindow.xaml như sau:

<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>

Tạo một quy trình

Tất ExecuteButton_Click cả các chương trình được gói gọn trong các phương pháp. Nếu bạn muốn sử dụng nó trong các khuôn khổ khác, hãy viết lại mã này làm cơ sở.

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("処理が終了しました。");
    }
  }
}

Vì lời giải thích gần như được viết trong mã, tôi sẽ không giải thích chi tiết, nhưng nếu bạn nêu ra phần quan trọng, nó sẽ như sau.

  • SpeechConfig Định cấu hình Dịch vụ Thoại trong
  • AudioConfig Thiết lập dữ liệu giọng nói trong
  • SpeechRecognizer Tạo Lớp xử lý trong
  • Dữ liệu giọng nói được phân tích từng cái một và văn bản SpeechRecognizer.Recognized hoàn thành được chuyển trong sự kiện theo thời gian.
  • Nếu quá trình xử lý kết thúc vì một số lý do, SpeechRecognizer.Canceled một sự kiện được gọi là
  • Bắt đầu xử lý được gọi là SpeechRecognizer.StartContinuousRecognitionAsync phương pháp và việc hoàn thành quá trình xử lý được gọi là SpeechRecognizer.StopContinuousRecognitionAsync phương pháp.

Kiểm tra hoạt động

Sau khi tạo chương trình, hãy thực thi nó, nhập các mục cần thiết và nhấn nút thực thi. Nếu bạn đã chỉ định đúng tệp âm thanh, âm thanh sẽ phát và văn bản phải được trích xuất từng cái một bằng cách sử dụng dịch vụ thoại Microsoft Azure đằng sau hậu trường.

Hệ thống trích xuất không hoàn hảo vì nó phụ thuộc vào dịch vụ thoại Microsoft Azure, Nếu giọng nói trầm và nói rõ ràng, tôi nghĩ nó sẽ được trích xuất với độ chính xác đáng kể. Vì nó là một dịch vụ đám mây, ngay cả khi độ chính xác bây giờ không quá cao, nó có thể trở nên tốt hơn trước khi bạn biết điều đó, vì vậy thật dễ dàng để không làm bất cứ điều gì trong lĩnh vực đó.