Bir ses dosyasından metin ayıklamak için Microsoft Azure Konuşma hizmetini kullanma

Sayfa güncel :
Sayfa oluşturma tarihi :

Operasyon kontrol ortamı

Microsoft Azure Ses Hizmetleri
  • Temmuz 2022 baskısı
Görsel Stüdyo
  • Visual Studio 2022 (İngilizce)
.NET (İngilizce)
  • 6.0

önkoşul

Bu İpuçlarının işe yaradığını doğrulayabilmeniz için önce şunları yapmanız gerekir:

Örnek malzemeler hakkında

Aşağıdaki siteden ses dosyalarını ödünç alıyoruz. Örnek koda dahil değildir.

Dış bağlantılar

İlk başta

Örnek olarak, toplantının içeriğini vb. kaydetmek için konuşmanın içeriği kaydedilir ve daha sonra toplantının tutanaklarını oluşturmak için kaydedilen ses duyulur ve metne dönüştürülür. Ancak, konuşmanın içeriğini bir cümleye yazmanın çok zahmetli olduğunu hayal etmek kolaydır.

Konuşma verilerini otomatik olarak metne aktarmak ve çıkarmak için Microsoft Azure Konuşma hizmetini nasıl kullanacağınız aşağıda açıklanmıştır. Önceki örnekte, toplantının bir kaydıdır, ancak bu İpuçlarında, ses dosyasından çıkarılır, böylece konuşma içeriği içeren her şeye uygulanabilir.

Ayrıca, bu sefer metne transkripsiyondan bahsediyoruz, Kayıt sırasında dönüştürmek ve çevirmek için Microsoft Azure ses hizmetini de kullanabilirsiniz.

Ücretler Hakkında

Bu sefer Ücretsiz planı kullanacağız, bu yüzden çalışmaya çalışsanız bile sizden ücret alınmayacak. Ancak, Ücretsiz planın zaman ve karakter sınırları vardır, bu nedenle gerçekten çalıştırdıktan sonra daha fazla dönüşüme ihtiyacınız varsa, lütfen ücretli bir plana geçin.

Fiyatlandırma için lütfen aşağıdaki resmi sayfaya bakın. Bir bulut hizmeti olduğu için ücret mevsime bağlı olarak dalgalanma gösterebilir.

Microsoft Azure portalına erişme

Bir web tarayıcısında aşağıdaki URL'ye erişin:

Zaten oturum açtıysanız işiniz bitti demektir. Henüz oturum açmadıysanız, aşağıdaki ekran görüntülenecektir, bu nedenle lütfen oturum açın.

Giriş yaptığınızda, aşağıdaki ekran görüntülenecektir. Ayarladığınız tasarıma bağlı olarak, ekran farklı olabilir.

Microsoft Azure'da ses hizmeti oluşturma

Portalın üstündeki arama giriş alanına "ses" yazarsanız, "ses servisi" çıkacaktır, bu yüzden seçin.

「Bilişsel Hizmetler | "Ses Servisi" ekranı görüntülendiğinde, "Oluştur" u seçin.

"Konuşma Hizmetleri Oluştur" ekranı açılır, bu nedenle gerekli öğeleri girin.

Temel

giriş örneği
Öğeleriniçeriği
abonelik Ödeme yapmak istediğiniz abonelikleri seçin. Ücretsiz olsa bile, her zaman bir tür aboneliğe bağlamanız gerekir.
Kaynak Grupları Oluşturulacak ses hizmetinin hangi kaynak grubuna dahil edileceğini belirtir. Henüz bir tane oluşturmadıysanız, lütfen aşağıdaki "Yeni" bölümünden bir tane oluşturun. Çeşitli hizmetler oluştururken kaynak gruplarını gruplandırmalar olarak düşünebilirsiniz.
Bölge En sık kullanıyor olabileceğiniz bir yerin yakınını seçin. Ancak, fiyatların bölgeye göre değişebileceğini lütfen unutmayın. Doğu Japonya
ad Bu ses hizmeti için herhangi bir ad. Birden fazla ses hizmeti oluşturuyorsanız, lütfen adın açıklayıcı olduğundan emin olun. Bu ad genel ve benzersizdir, bu nedenle başka bir yerde kullanılan bir adı kullanamazsınız. SpeechToText-Test
Fiyatlandırma Katmanı Ücretsiz olarak kullanmak istiyorsanız, "Ücretsiz F0" ı seçin. Bir ücret karşılığında kullanmak istiyorsanız, lütfen başka bir plan seçin. Tabii ki, ücretsiz olması durumunda kısıtlamalar vardır. Ücretsiz F0

Girdikten sonra, aşağıdaki İleri: Ağ >'ni seçin.

giriş örneği
Öğeleriniçeriği
tür Bu ses hizmetine erişilebilecek aralığı belirtir. Herhangi bir ayrıntılı ayar yapmadan herhangi bir yerden erişebilmek istiyorsanız, "İnternet dahil..." seçeneğini seçin. "Her yerden erişilebilir" aynı zamanda "herkes erişebilir" anlamına gelir, ancak aslında yalnızca bundan sonra edinilecek "anahtara" sahip olanlar erişebilir, bu nedenle güvenlik açısından çok fazla bir sorun değildir. İnternet dahil...

Girdikten sonra aşağıdaki İleri: Kimlik >'ni seçin.

Kimlik

giriş örneği
Öğeleriniçeriği
Sistem tarafından atanan yönetilen kimlik Bu sefer ses servisini tek başıma kullanıyorum, bu yüzden kapatmak iyidir. kapalı
Kullanıcı tarafından atanan yönetilen kimlik Bu sefer bir kullanıcı oluşturmadığım için eklememe gerek yok. sız

Girdikten sonra aşağıdaki İleri: Etiket >'ı seçin.

etiket

Etiket bu kez kullanılmadığından, ayarlanmamıştır.

Girdikten sonra İleri: Aşağıdaki > gözden geçirin ve oluşturun'u seçin.

İnceleme ve oluşturma

Giriş içeriğiyle ilgili herhangi bir sorun yoksa, "Doğrulama başarılı oldu" iletisi görüntülenir. Bir sorun varsa, bir hata mesajı görüntülenecektir, bu yüzden geri dönün ve tekrar ayarlayın.

Giriş içeriğiyle ilgili bir sorun yoksa, "Oluştur" düğmesini tıklayın. Ardından dağıtım başlayacaktır.

Bir süre sonra dağıtım tamamlanır ve aşağıdaki ekran görüntülenir. Dağıtım adı uzundur, ancak dağıtımda geçici olduğundan endişelenmenize gerek yoktur.

Ses hizmetinin oluşturulduğunu doğrulamak için Kaynağa Git düğmesini tıklatabilirsiniz.

Anahtar oluşturma ve alma

İstemciden bu ses hizmetine erişmek için bir kimlik doğrulama anahtarı gereklidir. Yalnızca bu anahtara sahip program tarafından erişilebildiğinden, bu anahtarın üçüncü bir tarafça çalınmasını önlemek gerekir.

Buradaki "İstemci", masaüstü uygulamaları, akıllı telefon uygulamaları ve web uygulamaları gibi Microsoft Azure kullanan tüm programları ifade eder.

Anahtarı almak için oluşturduğunuz ses hizmetine gidin. Panolardan, kaynak gruplarından vb. erişilebilir.

Ses Hizmetleri sayfası açıldığında, soldaki menüden Anahtarlar ve Uç Noktalar'ı seçin.

Ardından, "Anahtar ve Uç Nokta" sayfası açılacak ve "Anahtar 1", "Anahtar 2", "Konum/Bölge" ve "Uç Nokta" öğeleri görüntülenecektir.

Her iki öğe de gereklidir, ancak "Anahtar 2" yedek bir çerçevedir, bu nedenle çoğu durumda kullanılmaz.

Her değeri not edin. Açıklamada belirtildiği gibi, lütfen anahtarı beklenmedik bir şekilde geliştirme taraflarıyla paylaşmayın.

Anahtar sızdırılırsa, yeni bir anahtar vermek için yukarıdaki "Anahtar 1'i Yeniden Oluştur" u tıklayın. Tabii ki, bu durumda, önceki anahtarın artık kullanılamayacağını unutmayın.

Konuşmadan metin ayıklamak için bir programdan konuşma hizmeti kullanma

Şu andan itibaren, ses servisinin kullanımı, kullanılan programa bağlı olarak değişecektir. Bu sefer bir .NET masaüstü uygulamasından erişeceğim, ancak başka bir çerçeve kullanıyorsanız, Internet'te kullanmayı deneyin. Resmi web sitesinde ayrıca birkaç dilde nasıl kullanılacağına dair talimatlar da bulunmaktadır.

Bu kez, Visual Studio 2022'de bir WPF masaüstü uygulaması oluşturuyoruz. Visual Studio Code söz konusu olduğunda, tasarımcı olmadığı için biraz zahmetlidir, ancak yalnızca program bölümünü ayıklarsanız, bir konsol uygulamasında veya web uygulamasında kullanmak mümkündür.

Proje Oluştur

Visual Studio 2022'yi başlatın.

Yeni Proje Oluştur'u seçin.

WPF Uygulaması'nı seçin.

Proje adı ve konumu isteğe bağlıdır. Girdikten sonra İleri'yi seçin.

Sürüm ". NET 6.0" olarak ayarlayın. Ayarlandıktan sonra, "Oluştur" düğmesini tıklayın.

NuGet ayarları

Microsoft Azure API'sine sıfırdan erişim oluşturabilirsiniz, ancak zaten resmi bir kitaplığınız olduğu için onu kullanmak daha kolaydır.

Çözüm için bağımlılıklara sağ tıklayın ve NuGet paketlerini yönet'i seçin.

"Gözat" sekmesini seçin, arama giriş alanına "Microsoft.CognitiveServices.Speech" yazın ve bir liste görüntülenecektir, bu nedenle "Microsoft.CognitiveServices.Speech" i seçin ve Yükle düğmesine tıklayın.

Tamam düğmesini tıklatın.

Kabul ediyorum'u seçin.

İşiniz bittiğinde, pakete eklenecektir.

Kullanıcı arabirimi oluşturma

Bu kez, ses içeren bir WAV dosyası belirteceğiz ve konuşma içeriğini Konuşma API'si ile metne ayıklayacağız ve görüntülenmesini sağlayacağız. Şimdilik, kodu kopyalayıp yapıştırarak kullanabilmek için ortamı giriş alanına bağımlı bırakın.

Ekran şöyle görünmelidir: Yalnızca minimum tutar dahil edildiğinden, örneğin bir dosya referans düğmesi eklemek istiyorsanız, lütfen kendiniz uygulayın.

MainWindow.xaml aşağıdaki gibidir:

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

İşlem Oluşturma

Programın ExecuteButton_Click tamamı yöntemlere sarılmıştır. Diğer çerçevelerde kullanmak istiyorsanız, bu kodu temel olarak yeniden yazın.

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

Açıklama neredeyse kodda yazılı olduğu için detaylı olarak açıklamayacağım ancak önemli kısmı yükseltirseniz aşağıdaki gibi olacaktır.

  • SpeechConfig Ses Hizmetleri'ni Yapılandırma
  • AudioConfig Ses verilerini ayarlama
  • SpeechRecognizer İşleme Sınıfı Oluştur
  • Konuşma verileri tek tek analiz edilir ve tamamlanan metin SpeechRecognizer.Recognized zaman zaman olayda geçirilir.
  • İşleme herhangi bir nedenle tamamlanırsa, SpeechRecognizer.Canceled bir olay çağrılır
  • İşlemin SpeechRecognizer.StartContinuousRecognitionAsync başlangıcına yöntem, işlemin tamamlanmasına ise SpeechRecognizer.StopContinuousRecognitionAsync yöntem denir.

Operasyon kontrolü

Programı oluşturduktan sonra çalıştırın, gerekli öğeleri girin ve yürüt düğmesine basın. Doğru ses dosyasını belirttiyseniz, ses çalınmalı ve metin perde arkasında Microsoft Azure ses hizmeti kullanılarak tek tek çıkarılmalıdır.

Ayıklama sistemi mükemmel değil çünkü Microsoft Azure ses hizmetine bağlı, Ses sessizse ve net bir şekilde konuşuyorsa, bence önemli bir doğrulukla çıkarılacaktır. Bir bulut hizmeti olduğu için, doğruluk şu anda çok yüksek olmasa bile, siz bilmeden önce daha iyi hale geliyor olabilir, bu nedenle o alanda hiçbir şey yapmamak kolaydır.