Menggunakan perkhidmatan Microsoft Azure Speech untuk menyarikan teks daripada fail audio

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran pemeriksaan operasi

Microsoft Azure Voice Services
  • Edisi Julai 2022
Visual Studio
  • Visual Studio 2022
.NET
  • 6.0

prasyarat

Sebelum anda boleh mengesahkan bahawa Petua ini berfungsi, anda perlu:

Mengenai bahan sampel

Kami meminjam fail audio dari laman web berikut. Ia tidak termasuk dalam kod sampel.

Pautan luar

Pada mulanya

Sebagai contoh, untuk merakam kandungan mesyuarat, dan lain-lain, kandungan perbualan dirakam, dan kemudian untuk membuat minit mesyuarat, audio yang dirakam didengar dan ditranskripsikan ke dalam teks. Walau bagaimanapun, mudah untuk membayangkan bahawa sangat menyusahkan untuk menulis kandungan perbualan ke dalam ayat.

Berikut ialah cara untuk menggunakan perkhidmatan Microsoft Azure Speech untuk mengeksport dan mengeluarkan data pertuturan secara automatik ke teks. Dalam contoh sebelumnya, ia adalah rakaman mesyuarat, tetapi dalam Petua ini, ia diekstrak dari fail audio, jadi ia boleh digunakan untuk apa-apa yang mengandungi kandungan perbualan.

Juga, kali ini kita bercakap tentang menyalin teks, Anda juga boleh menggunakan perkhidmatan suara Microsoft Azure untuk menukar dan menterjemah semasa merakam.

Mengenai Yuran

Kali ini, kami akan menggunakan pelan Percuma, jadi walaupun anda cuba beroperasi, anda tidak akan dikenakan bayaran. Walau bagaimanapun, pelan Percuma mempunyai had masa dan watak, jadi jika anda memerlukan lebih banyak penukaran selepas benar-benar mengendalikannya, sila tukar kepada pelan berbayar.

Sila rujuk halaman rasmi berikut untuk harga. Oleh kerana ia adalah perkhidmatan awan, bayaran mungkin berubah-ubah bergantung pada musim.

Mencapai portal Microsoft Azure

Akses URL berikut dalam pelayar web:

Jika anda sudah log masuk, anda sudah selesai. Jika anda belum log masuk, skrin berikut akan dipaparkan, jadi sila log masuk.

Apabila anda log masuk, skrin berikut akan dipaparkan. Bergantung pada reka bentuk yang anda tetapkan, paparan mungkin berbeza.

Mencipta perkhidmatan suara dalam Microsoft Azure

Jika anda memasukkan "suara" dalam medan input carian di atas portal, "perkhidmatan suara" akan keluar, jadi pilihlah.

「| Perkhidmatan Kognitif Apabila skrin "Perkhidmatan Suara" dipaparkan, pilih "Buat".

Skrin "Cipta Perkhidmatan Pertuturan" dibuka, jadi masukkan item yang diperlukan.

Asas

Contoh input
kandungan item
Langganan Pilih langganan yang anda mahu bayar. Walaupun ia percuma, anda sentiasa perlu mengikatnya dengan beberapa jenis langganan.
Kumpulan Sumber Menentukan kumpulan sumber yang akan diwujudkan perkhidmatan suara untuk disertakan. Jika anda belum menciptanya lagi, sila buat satu daripada "Baru" di bawah. Anda boleh menganggap kumpulan sumber sebagai perkumpulan apabila anda mencipta pelbagai perkhidmatan.
Rantau Pilih berhampiran tempat di mana anda mungkin menggunakannya paling kerap. Walau bagaimanapun, sila ambil perhatian bahawa harga mungkin berbeza mengikut rantau. Jepun Timur
Nama Sebarang nama untuk perkhidmatan suara ini. Jika anda mencipta lebih daripada satu perkhidmatan suara, sila pastikan nama itu deskriptif. Nama ini bersifat global dan unik, jadi anda tidak boleh menggunakan nama yang digunakan di tempat lain. SpeechToText-Test
Tahap Harga Jika anda mahu menggunakannya secara percuma, pilih "F0 Percuma". Jika anda ingin menggunakannya dengan bayaran, sila pilih pelan lain. Sudah tentu, terdapat sekatan jika ia percuma. F0 percuma

Setelah dimasukkan, pilih Seterusnya: Rangkaian > di bawah.

Rangkaian

Contoh input
kandungan item
Jenis Menentukan julat dari mana perkhidmatan suara ini boleh dicapai. Jika anda ingin dapat mengaksesnya dari mana-mana sahaja tanpa sebarang tetapan terperinci, pilih "Termasuk Internet...". "Boleh diakses dari mana-mana sahaja" juga bermaksud "sesiapa sahaja boleh mengaksesnya", tetapi sebenarnya hanya mereka yang mempunyai "kunci" yang akan diperoleh selepas ini dapat mengaksesnya, jadi tidak banyak masalah dari segi keselamatan. Termasuk Internet...

Sebaik sahaja anda memasukkannya, pilih Seterusnya: Identiti > di bawah.

Identiti

Contoh input
kandungan item
ID terurus yang diuntukkan sistem Kali ini saya menggunakan perkhidmatan suara sahaja, jadi ada baiknya matikannya. mati
ID terurus yang diuntukkan pengguna Saya tidak perlu menambahnya kerana saya tidak mencipta pengguna kali ini. Tanpa

Sebaik sahaja anda memasukkannya, pilih Seterusnya: Tag > di bawah.

tag

Oleh kerana tag tidak digunakan kali ini, ia tidak ditetapkan.

Setelah dimasukkan, pilih Seterusnya: Semak dan buat > di bawah.

Semak dan cipta

Jika tiada masalah dengan kandungan input, "Pengesahan berjaya" dipaparkan. Jika terdapat masalah, mesej ralat akan dipaparkan, jadi kembali dan tetapkannya semula.

Sekiranya tidak ada masalah dengan kandungan input, klik butang "Buat". Kemudian penyebaran akan bermula.

Selepas beberapa ketika, penggunaan selesai dan skrin berikut dipaparkan. Nama penggunaannya panjang, tetapi anda tidak perlu risau mengenainya kerana ia adalah sementara dalam penggunaan.

Anda boleh mengklik butang Pergi ke Sumber untuk mengesahkan bahawa perkhidmatan suara telah dibuat.

Menjana dan mendapatkan semula kekunci

Kunci pengesahan diperlukan untuk mengakses perkhidmatan suara ini daripada pelanggan. Oleh kerana ia hanya boleh diakses oleh program yang mempunyai kunci ini, adalah perlu untuk mengelakkan kunci ini dicuri oleh pihak ketiga.

"Klien" di sini merujuk kepada semua program yang menggunakan Microsoft Azure, seperti aplikasi desktop, aplikasi telefon pintar dan aplikasi web.

Untuk mendapatkan kunci, pergi ke perkhidmatan suara yang anda buat. Ia boleh diakses dari papan pemuka, kumpulan sumber, dan sebagainya.

Apabila halaman Perkhidmatan Suara dibuka, pilih Kekunci &Titik Akhir daripada menu di sebelah kiri.

Kemudian, halaman "Kunci dan Titik Akhir" akan dibuka dan item "Kunci 1", "Kunci 2", "Lokasi/Rantau" dan "Titik Akhir" akan dipaparkan.

Kedua-dua item diperlukan, tetapi "Kunci 2" adalah bingkai ganti, jadi ia tidak digunakan dalam kebanyakan kes.

Buat nota setiap nilai. Seperti yang dinyatakan dalam keterangan, jangan berkongsi kunci dengan pihak-pihak pembangunan tanpa diduga.

Jika kunci bocor, klik "Jana semula Kunci 1" di atas untuk mengeluarkan kunci baharu. Sudah tentu, sedar bahawa dalam kes ini, kunci sebelumnya tidak lagi boleh digunakan.

Gunakan perkhidmatan pertuturan daripada program untuk mengekstrak teks daripada pertuturan

Mulai sekarang, penggunaan perkhidmatan suara akan berubah bergantung pada program yang digunakan. Kali ini, saya akan mengaksesnya daripada aplikasi desktop .NET, tetapi jika anda menggunakan rangka kerja lain, cuba gunakannya di Internet. Laman web rasmi juga mempunyai arahan tentang cara menggunakannya dalam beberapa bahasa.

Kali ini, kami mencipta aplikasi desktop WPF dalam Visual Studio 2022. Dalam kes Kod Studio Visual, agak menyusahkan kerana tidak ada pereka, tetapi jika anda hanya mengekstrak bahagian program, mungkin menggunakannya dalam aplikasi konsol atau aplikasi web.

Cipta Projek

Mulakan Visual Studio 2022.

Pilih Cipta Projek Baru.

Pilih Aplikasi WPF.

Nama dan lokasi projek sewenang-wenangnya. Setelah dimasukkan, pilih Seterusnya.

Versi ini dipanggil ". BERSIH 6.0". Setelah ditetapkan, klik butang "Buat".

Seting NuGet

Anda boleh mencipta capaian kepada MICROSOFT Azure API dari awal, tetapi lebih mudah untuk menggunakannya kerana anda sudah mempunyai pustaka rasmi.

Klik kanan Kebergantungan untuk penyelesaian dan pilih Uruskan Pakej NuGet.

Pilih tab "Semak Imbas", masukkan "Microsoft.CognitiveServices.Speech" dalam medan input carian dan senarai akan dipaparkan, jadi pilih "Microsoft.CognitiveServices.Speech" dan klik butang Pasang.

Klik okey butang.

Pilih Saya setuju.

Apabila anda selesai, ia akan ditambahkan pada pakej.

Mencipta UI

Kali ini, kami akan menentukan fail WAV yang mengandungi audio dan mengekstrak kandungan perbualan ke dalam teks dengan API Pertuturan dan menjadikannya dipaparkan. Buat masa ini, biarkan persekitaran bergantung pada medan input supaya anda boleh menggunakan kod dengan menyalin dan menampal.

Skrin sepatutnya kelihatan seperti ini: Oleh kerana hanya jumlah minimum yang disertakan, jika anda ingin menambah butang rujukan fail sebagai contoh, sila laksanakannya sendiri.

MainWindow.xaml adalah seperti berikut:

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

Mencipta Proses

Program ini ExecuteButton_Click semua dibungkus dalam kaedah. Jika anda ingin menggunakannya dalam rangka kerja lain, tulis semula kod ini sebagai asas.

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

Oleh kerana penjelasan hampir ditulis dalam kod, saya tidak akan menerangkan secara terperinci, tetapi jika anda menaikkan bahagian penting, ia akan menjadi seperti berikut.

  • SpeechConfig Mengkonfigurasikan Perkhidmatan Suara dalam
  • AudioConfig Menyediakan data suara dalam
  • SpeechRecognizer Menjana Kelas Pemprosesan dalam
  • Data pertuturan dianalisis satu persatu, dan teks SpeechRecognizer.Recognized yang lengkap diluluskan dalam acara dari semasa ke semasa.
  • Jika pemprosesan selesai atas sebab tertentu, SpeechRecognizer.Canceled acara dipanggil
  • Permulaan pemprosesan SpeechRecognizer.StartContinuousRecognitionAsync dipanggil kaedah, dan penyelesaian pemprosesan SpeechRecognizer.StopContinuousRecognitionAsync dipanggil kaedah.

Semakan operasi

Selepas membuat program, laksanakannya, masukkan item yang diperlukan dan tekan butang laksana. Jika anda telah menentukan fail audio yang betul, audio harus dimainkan dan teks harus diekstrak satu persatu menggunakan perkhidmatan suara Microsoft Azure di belakang tabir.

Sistem pengekstrakan tidak sempurna kerana ia bergantung kepada perkhidmatan suara Microsoft Azure, Jika suara itu tenang dan bercakap dengan jelas, saya fikir ia akan diekstrak dengan ketepatan yang besar. Oleh kerana ia adalah perkhidmatan awan, walaupun ketepatannya tidak begitu tinggi sekarang, ia mungkin menjadi lebih baik sebelum anda mengetahuinya, jadi mudah untuk tidak melakukan apa-apa di kawasan itu.