استخدام خدمة Microsoft Azure Speech لاستخراج نص من ملف صوتي

تحديث الصفحة :
تاريخ إنشاء الصفحة :

بيئة فحص التشغيل

Microsoft Azure Voice Services
  • نسخة يوليو 2022
استوديو مرئي
  • فيسوال ستوديو 2022
.NET
  • 6.0

الشرط المسبق

قبل أن تتمكن من التحقق من نجاح هذه النصائح، تحتاج إلى:

حول عينات المواد

نحن نستعير الملفات الصوتية من الموقع التالي. لم يتم تضمينه في نموذج التعليمات البرمجية.

روابط خارجية

في البداية

على سبيل المثال ، من أجل تسجيل محتويات الاجتماع ، وما إلى ذلك ، يتم تسجيل محتويات المحادثة ، وبعد ذلك من أجل إنشاء محضر الاجتماع ، يتم سماع الصوت المسجل ونسخه إلى نص. ومع ذلك ، من السهل تخيل أنه من المزعج للغاية كتابة محتويات المحادثة في جملة.

فيما يلي كيفية استخدام خدمة Microsoft Azure Speech لتصدير بيانات الكلام وإخراجها تلقائيا إلى نص. في المثال السابق ، هو تسجيل للاجتماع ، ولكن في هذه النصائح ، يتم استخراجه من الملف الصوتي ، بحيث يمكن تطبيقه على أي شيء يحتوي على محتويات المحادثة.

أيضا ، هذه المرة نتحدث عن النسخ إلى نص ، يمكنك أيضا استخدام خدمة Microsoft Azure الصوتية للتحويل والترجمة أثناء التسجيل.

حول الرسوم

هذه المرة ، سنستخدم الخطة المجانية ، لذلك حتى لو حاولت العمل ، فلن يتم تحصيل رسوم منك. ومع ذلك ، فإن الخطة المجانية لها حدود زمنية وأحرف ، لذلك إذا كنت بحاجة إلى مزيد من التحويل بعد تشغيلها فعليا ، فيرجى التغيير إلى خطة مدفوعة.

يرجى الرجوع إلى الصفحة الرسمية التالية للتسعير. نظرا لأنها خدمة سحابية ، فقد تتقلب الرسوم حسب الموسم.

الوصول إلى مدخل Microsoft Azure

قم بالوصول إلى عنوان URL التالي في مستعرض ويب:

إذا كنت قد سجلت الدخول بالفعل، فهذا يعني أنك انتهيت. إذا لم تكن قد سجلت الدخول بالفعل، عرض الشاشة التالية، لذا يرجى تسجيل الدخول.

عند تسجيل الدخول، سيتم عرض الشاشة التالية. اعتمادا على التصميم الذي تقوم بإعداده، قد تكون الشاشة مختلفة.

إنشاء خدمة صوتية في Microsoft Azure

إذا قمت بإدخال "صوت" في حقل إدخال البحث أعلى البوابة ، فستظهر "الخدمة الصوتية" ، لذا حددها.

「| الخدمات المعرفية عند عرض شاشة "الخدمة الصوتية" ، حدد "إنشاء".

يتم فتح شاشة "إنشاء خدمات الكلام" ، لذا أدخل العناصر الضرورية.

أساسيات

مثال على إدخال
محتويات العناصر
اكتتاب حدد الاشتراكات التي تريد الدفع مقابلها. حتى لو كان مجانيا ، فأنت بحاجة دائما إلى ربطه بنوع من الاشتراك.
مجموعات الموارد يحدد في أي مجموعة موارد يجب أن تتضمن الخدمة الصوتية التي سيتم إنشاؤها. إذا لم تكن قد أنشأت واحدة بعد، يرجى إنشاء واحدة من "جديد" أدناه. يمكنك التفكير في مجموعات الموارد كمجموعات عند إنشاء خدمات متنوعة.
قطر اختر بالقرب من مكان قد تستخدمه فيه كثيرا. ومع ذلك، يرجى ملاحظة أن الأسعار قد تختلف حسب المنطقة. شرق اليابان
اسم أي اسم لهذه الخدمة الصوتية. إذا كنت تقوم بإنشاء أكثر من خدمة صوتية واحدة، يرجى التأكد من أن الاسم وصفي. هذا الاسم عالمي وفريد من نوعه، لذلك لا يمكنك استخدام اسم مستخدم في مكان آخر. اختبار SpeechToText-Test
طبقة التسعير إذا كنت ترغب في استخدامه مجانا ، فاختر "Free F0". إذا كنت ترغب في استخدامه مقابل رسوم ، يرجى اختيار خطة أخرى. بالطبع ، هناك قيود إذا كانت مجانية. F0 مجانا

بمجرد الإدخال، حدد التالي: الشبكة > أدناه.

شبكة

مثال على إدخال
محتويات العناصر
نوع يحدد النطاق الذي يمكن من خلاله الوصول إلى هذه الخدمة الصوتية. إذا كنت تريد أن تكون قادرا على الوصول إليه من أي مكان دون أي إعدادات مفصلة ، فحدد "بما في ذلك الإنترنت ...". "يمكن الوصول إليه من أي مكان" يعني أيضا "يمكن لأي شخص الوصول إليه" ، ولكن في الواقع فقط أولئك الذين لديهم "مفتاح" يمكن الحصول عليه بعد ذلك يمكنهم الوصول إليه ، لذلك فهي ليست مشكلة كبيرة من حيث الأمان. بما في ذلك الإنترنت...

بمجرد إدخاله، حدد التالي: > الهوية أدناه.

الهوية

مثال على إدخال
محتويات العناصر
المعرف المدار المعين من قبل النظام هذه المرة أستخدم الخدمة الصوتية وحدها ، لذلك من الجيد إيقاف تشغيلها. قباله
المعرف المدار المعين من قبل المستخدم لست بحاجة إلى إضافته لأنني لا أقوم بإنشاء مستخدم هذه المرة. بدون

بمجرد إدخاله، حدد التالي: وضع علامة > أدناه.

العلامه

نظرا لعدم استخدام العلامة هذه المرة ، لم يتم تعيينها.

بمجرد إدخاله ، حدد التالي: مراجعة وإنشاء > أدناه.

مراجعة وإنشاء

إذا لم تكن هناك مشاكل في محتويات الإدخال، عرض "التحقق من الصحة نجح". إذا كانت هناك مشكلة ، عرض رسالة خطأ ، لذا ارجع وقم بتعيينها مرة أخرى.

إذا لم تكن هناك مشكلة في محتويات الإدخال ، فانقر فوق الزر "إنشاء". ثم سيبدأ النشر.

بعد فترة من الوقت، يتم الانتهاء من النشر ويتم عرض الشاشة التالية. اسم النشر طويل، ولكن لا داعي للقلق بشأنه لأنه مؤقت في النشر.

يمكنك النقر فوق الزر الانتقال إلى المورد للتحقق من إنشاء الخدمة الصوتية.

إنشاء المفاتيح واسترجاعها

مطلوب مفتاح مصادقة للوصول إلى هذه الخدمة الصوتية من العميل. نظرا لأنه لا يمكن الوصول إليه إلا من خلال البرنامج الذي يحتوي على هذا المفتاح ، فمن الضروري منع سرقة هذا المفتاح من قبل طرف ثالث.

يشير "العميل" هنا إلى جميع البرامج التي تستخدم Microsoft Azure، مثل تطبيقات سطح المكتب وتطبيقات الهواتف الذكية وتطبيقات الويب.

للحصول على المفتاح، انتقل إلى الخدمة الصوتية التي أنشأتها. يمكن الوصول إليه من لوحات المعلومات ومجموعات الموارد وما إلى ذلك.

عند فتح صفحة الخدمات الصوتية، حدد المفاتيح ونقاط النهاية من القائمة الموجودة على اليمين.

بعد ذلك ، سيتم فتح صفحة "المفتاح ونقطة النهاية" وسيتم عرض العناصر "المفتاح 1" و "المفتاح 2" و "الموقع / المنطقة" و "نقطة النهاية".

كلا العنصرين ضروريان ، لكن "المفتاح 2" هو إطار احتياطي ، لذلك لا يتم استخدامه في معظم الحالات.

قم بتدوين كل قيمة. كما هو مذكور في الوصف ، يرجى عدم مشاركة المفتاح مع أطراف التطوير بشكل غير متوقع.

إذا تم تسريب المفتاح ، فانقر فوق "إعادة إنشاء المفتاح 1" أعلاه لإصدار مفتاح جديد. بالطبع ، كن على علم بأنه في هذه الحالة ، لن يكون المفتاح السابق قابلا للاستخدام.

استخدام خدمة الكلام من برنامج لاستخراج نص من الكلام

من الآن فصاعدا ، سيتغير استخدام الخدمة الصوتية اعتمادا على البرنامج المستخدم. هذه المرة ، سأتمكن من الوصول إليه من تطبيق سطح مكتب .NET ، ولكن إذا كنت تستخدم إطارا آخر ، فحاول استخدامه على الإنترنت. يحتوي الموقع الرسمي أيضا على تعليمات حول كيفية استخدامه بعدة لغات.

هذه المرة ، نقوم بإنشاء تطبيق WPF لسطح المكتب في Visual Studio 2022. في حالة Visual Studio Code ، يكون الأمر مزعجا بعض الشيء لأنه لا يوجد مصمم ، ولكن إذا قمت باستخراج جزء البرنامج فقط ، فمن الممكن استخدامه في تطبيق وحدة تحكم أو تطبيق ويب.

إنشاء مشروع

بدء تشغيل Visual Studio 2022.

حدد إنشاء مشروع جديد.

حدد تطبيق WPF.

اسم المشروع وموقعه تعسفيان. بمجرد الإدخال، حدد التالي.

وتسمى النسخة ". صافي 6.0 بوصة. بمجرد التعيين ، انقر فوق الزر "إنشاء".

إعدادات NuGet

يمكنك إنشاء حق الوصول إلى واجهة برمجة تطبيقات Microsoft Azure من البداية، ولكن من الأسهل استخدامها لأن لديك بالفعل مكتبة رسمية.

انقر بزر الماوس الأيمن فوق تبعيات الحل وحدد إدارة حزم NuGet.

حدد علامة التبويب "استعراض" ، وأدخل "Microsoft.CognitiveServices.Speech" في حقل إدخال البحث ، وسيتم عرض قائمة ، لذلك حدد "Microsoft.CognitiveServices.Speech" وانقر فوق الزر تثبيت.

انقر فوق الزر موافق ( OK) .

حدد أوافق.

عند الانتهاء ، ستتم إضافته إلى الحزمة.

إنشاء واجهة المستخدم

هذه المرة ، سنحدد ملف WAV يحتوي على صوت ونستخرج محتويات المحادثة إلى نص باستخدام واجهة برمجة تطبيقات الكلام ونجعلها معروضة. في الوقت الحالي ، اترك البيئة تعتمد على حقل الإدخال بحيث يمكنك استخدام التعليمة البرمجية عن طريق النسخ واللصق.

يجب أن تبدو الشاشة كما يلي: نظرا لأنه يتم تضمين الحد الأدنى للمبلغ فقط ، إذا كنت ترغب في إضافة زر مرجع ملف على سبيل المثال ، فيرجى تنفيذه بنفسك.

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 الانتهاء من البرنامج كله في الأساليب. إذا كنت ترغب في استخدامه في أطر عمل أخرى ، فأعد كتابة هذا الرمز كقاعدة.

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

نظرا لأن الشرح مكتوب تقريبا في الكود ، فلن أشرح بالتفصيل ، ولكن إذا قمت بإثارة الجزء المهم ، فسيكون على النحو التالي.

  • SpeechConfig تكوين الخدمات الصوتية في
  • AudioConfig إعداد البيانات الصوتية في
  • SpeechRecognizer إنشاء فئة المعالجة في
  • يتم تحليل بيانات الكلام واحدة تلو الأخرى ، ويتم تمرير النص SpeechRecognizer.Recognized المكتمل في الحدث من وقت لآخر.
  • إذا تم الانتهاء من المعالجة لسبب ما ، SpeechRecognizer.Canceled يتم استدعاء حدث
  • تسمى بداية المعالجة الطريقة ، ويسمى الانتهاء من المعالجة SpeechRecognizer.StartContinuousRecognitionAsync SpeechRecognizer.StopContinuousRecognitionAsync الطريقة.

فحص التشغيل

بعد إنشاء البرنامج ، قم بتنفيذه ، وأدخل العناصر الضرورية واضغط على زر التنفيذ. إذا قمت بتحديد الملف الصوتي الصحيح ، فيجب تشغيل الصوت ويجب استخراج النص واحدا تلو الآخر باستخدام خدمة Microsoft Azure الصوتية خلف الكواليس.

نظام الاستخراج ليس مثاليا لأنه يعتمد على خدمة Microsoft Azure الصوتية ، إذا كان الصوت هادئا ويتحدث بوضوح ، أعتقد أنه سيتم استخراجه بدقة كبيرة. نظرا لأنها خدمة سحابية ، حتى لو لم تكن الدقة عالية الآن ، فقد تتحسن قبل أن تعرفها ، لذلك من السهل عدم القيام بأي شيء في هذا المجال.