किसी ऑडियो फ़ाइल से पाठ निकालने के लिए Microsoft Azure वाक् सेवा का उपयोग करें

पेज अद्यतन :
पेज निर्माण की तारीख :

ऑपरेशन जाँच वातावरण

माइक्रोसॉफ्ट एज़ूर वॉयस सर्विसेज
  • जुलाई 2022 संस्करण
दृश्य स्टूडियो
  • विजुअल स्टूडियो 2022
.नेट
  • 6.0

पूर्व शर्त

इससे पहले कि आप सत्यापित कर सकें कि यह युक्तियाँ काम करती हैं, आपको इसकी आवश्यकता है:

नमूना सामग्री के बारे में

हम निम्नलिखित साइट से ऑडियो फ़ाइलें उधार लेते हैं। यह नमूना कोड में शामिल नहीं है।

बाहरी लिंक

पहले

एक उदाहरण के रूप में, मीटिंग की सामग्री आदि को रिकॉर्ड करने के लिए, वार्तालाप की सामग्री रिकॉर्ड की जाती है, और बाद में मीटिंग के मिनट बनाने के लिए, रिकॉर्ड किए गए ऑडियो को सुना जाता है और पाठ में ट्रांसक्रिप्ट किया जाता है। हालांकि, यह कल्पना करना आसान है कि बातचीत की सामग्री को एक वाक्य में लिखना बहुत परेशानी है।

यहां बताया गया है कि टेक्स्ट में स्पीच डेटा को स्वचालित रूप से निर्यात और आउटपुट करने के लिए माइक्रोसॉफ्ट एज़ूर स्पीच सेवा का उपयोग कैसे करें। पिछले उदाहरण में, यह मीटिंग की रिकॉर्डिंग है, लेकिन इस युक्तियाँ में, इसे ऑडियो फ़ाइल से निकाला जाता है, इसलिए इसे वार्तालाप सामग्री वाली किसी भी चीज़ पर लागू किया जा सकता है।

साथ ही, इस बार हम पाठ को ट्रांसक्राइब करने के बारे में बात कर रहे हैं, आप रिकॉर्डिंग करते समय परिवर्तित करने और अनुवाद करने के लिए माइक्रोसॉफ्ट एज़ूर वॉयस सेवा का भी उपयोग कर सकते हैं।

फीस के बारे में

इस बार, हम मुफ्त योजना का उपयोग करेंगे, इसलिए यदि आप संचालित करने की कोशिश करते हैं, तो भी आपसे शुल्क नहीं लिया जाएगा। हालाँकि, नि: शुल्क योजना में समय और चरित्र सीमाएँ हैं, इसलिए यदि आपको वास्तव में इसे संचालित करने के बाद अधिक रूपांतरण की आवश्यकता है, तो कृपया भुगतान की गई योजना में बदलें।

कृपया मूल्य निर्धारण के लिए निम्नलिखित आधिकारिक पृष्ठ देखें। चूंकि यह एक क्लाउड सेवा है, इसलिए मौसम के आधार पर शुल्क में उतार-चढ़ाव हो सकता है।

माइक्रोसॉफ्ट एज़ूर पोर्टल तक पहुँचें

किसी वेब ब्राउज़र में निम्न URL तक पहुँचें:

यदि आपपहले से ही साइन इन हैं, तो आप कर चुके हैं। यदि आपपहले से ही साइन इन नहीं हैं, तो निम्न स्क्रीन प्रदर्शित की जाएगी, इसलिए कृपया साइन इन करें।

जब आप लॉग इन करते हैं, तो निम्न स्क्रीन प्रदर्शित होगी। आपके द्वारा सेट किए जा रहे डिज़ाइन के आधार पर, प्रदर्शन भिन्न हो सकता है।

माइक्रोसॉफ्ट एज़ूर में एक वॉयस सेवा बनाएं

यदि आप पोर्टल के ऊपर खोज इनपुट फ़ील्ड में "आवाज" दर्ज करते हैं, तो "वॉयस सर्विस" बाहर आ जाएगी, इसलिए इसे चुनें।

संज्ञानात्मक सेवा | जब "वॉयस सर्विस" स्क्रीन प्रदर्शित होती है, तो "बनाएँ" चुनें।

"वाक् सेवाएँ बनाएँ" स्क्रीन खुलती है, इसलिए आवश्यक आइटम दर्ज करें।

बेसिक्स

की इनपुट उदाहरण
आइटम्ससामग्री का
चंदा उन सदस्यताओं का चयन करें जिनके लिए आप भुगतान करना चाहते हैं. यहां तक कि अगर यह मुफ़्त है, तो आपको हमेशा इसे किसी प्रकार की सदस्यता से बांधने की आवश्यकता होती है।
संसाधन समूह निर्दिष्ट करता है कि किस संसाधन समूह में बनाई जाने वाली ध्वनि सेवा को शामिल करना है. यदि आपने अभी तक एक नहीं बनाया है, तो कृपया नीचे दिए गए "नया" से एक बनाएं। जब आप विभिन्न सेवाएँ बनाते हैं तो आप संसाधन समूहों को समूहीकरण के रूप में सोच सकते हैं.
क्षेत्र एक ऐसी जगह के पास चुनें जहां आप इसे सबसे अधिक बार उपयोग कर सकते हैं। हालांकि, कृपया ध्यान दें कि कीमतें क्षेत्र के अनुसार भिन्न हो सकती हैं। जापान पूर्व
नाम इस ध्वनि सेवा के लिए कोई भी नाम. यदि आप एक से अधिक ध्वनि सेवा बना रहे हैं, तो कृपया सुनिश्चित करें कि नाम वर्णनात्मक है. यह नाम वैश्विक और अद्वितीय है, इसलिए आप कहीं और उपयोग किए जाने वाले नाम का उपयोग नहीं कर सकते हैं। स्पीच टूटेक्स्ट-टेस्ट
मूल्य निर्धारण टियर यदि आप इसे मुफ्त में उपयोग करना चाहते हैं, तो "फ्री एफ 0" चुनें। यदि आप इसे शुल्क के लिए उपयोग करना चाहते हैं, तो कृपया एक और योजना चुनें। बेशक, यदि यह मुफ़्त है तो प्रतिबंध हैं। नि: शुल्क F0

एक बार दर्ज करने के बाद, नीचे अगला: नेटवर्क > का चयन करें।

नेटवर्क

की इनपुट उदाहरण
आइटम्ससामग्री का
प्रकार वह श्रेणी निर्दिष्ट करता है जहाँ से यह ध्वनि सेवा पहुँच योग्य है. यदि आप इसे बिना किसी विस्तृत सेटिंग्स के कहीं से भी एक्सेस करने में सक्षम होना चाहते हैं, तो "इंटरनेट सहित ..." चुनें" का चयन करें", "कहीं से भी एक्सेस किया जा सकता है" का अर्थ है "कोई भी इसे एक्सेस कर सकता है", लेकिन वास्तव में केवल वे लोग जिनके पास "कुंजी" है इसके बाद इसे एक्सेस किया जा सकता है, इसलिए सुरक्षा के मामले में यह इतनी समस्या नहीं है। इंटरनेट सहित...

एक बार जब आप इसे दर्ज कर लेते हैं, तो नीचे अगला: पहचान > का चयन करें।

पहचान

की इनपुट उदाहरण
आइटम्ससामग्री का
सिस्टम-असाइन की गई प्रबंधित ID इस बार मैं अकेले वॉयस सेवा का उपयोग करता हूं, इसलिए इसे बंद करना अच्छा है। बंद
उपयोगकर्ता द्वारा असाइन की गई प्रबंधित आईडी मुझे इसे जोड़ने की ज़रूरत नहीं है क्योंकि मैं इस बार उपयोगकर्ता नहीं बना रहा हूं। के बिना

एक बार जब आप इसे दर्ज कर लेते हैं, तो नीचे अगला: टैग > का चयन करें।

टैग

चूंकि इस बार टैग का उपयोग नहीं किया गया है, इसलिए यह सेट नहीं है।

एक बार दर्ज करने के बाद, अगला: समीक्षा करें और नीचे > बनाएं का चयन करें।

समीक्षा करें और बनाएँ

यदि इनपुट सामग्री के साथ कोई समस्या नहीं है, तो "सत्यापन सफल" प्रदर्शित होता है। यदि कोई समस्या है, तो एक त्रुटि संदेश प्रदर्शित किया जाएगा, इसलिए वापस जाएं और इसे फिर से सेट करें।

यदि इनपुट सामग्री के साथ कोई समस्या नहीं है, तो "बनाएँ" बटन पर क्लिक करें। इसके बाद तैनाती शुरू होगी।

थोड़ी देर के बाद, परिनियोजन पूरा हो गया है और निम्न स्क्रीन प्रदर्शित होता है। परिनियोजन नाम लंबा है, लेकिन आपको इसके बारे में चिंता करने की आवश्यकता नहीं है क्योंकि यह परिनियोजन में अस्थायी है।

आप यह सत्यापित करने के लिए संसाधन पर जाएँ बटन क्लिक कर सकते हैं कि ध्वनि सेवा बनाई गई है.

कुंजियाँ जनरेट करना और पुनर्प्राप्त करना

क्लाइंट से इस ध्वनि सेवा तक पहुँचने के लिए एक प्रमाणीकरण कुंजी आवश्यक है। चूंकि यह केवल उस प्रोग्राम द्वारा सुलभ है जिसमें यह कुंजी है, इसलिए इस कुंजी को तीसरे पक्ष द्वारा चोरी होने से रोकना आवश्यक है।

यहां "क्लाइंट" उन सभी कार्यक्रमों को संदर्भित करता है जो माइक्रोसॉफ्ट एज़ूर का उपयोग करते हैं, जैसे कि डेस्कटॉप ऐप, स्मार्टफोन ऐप और वेब ऐप।

कुंजी प्राप्त करने के लिए, आपके द्वारा बनाई गई ध्वनि सेवा पर जाएं। इसे डैशबोर्ड, संसाधन समूहों आदि से एक्सेस किया जा सकता है।

जब ध्वनि सेवा पृष्ठ खुलता है, तो बाईं ओर मेनू से कुंजी और समापन बिंदु चुनें।

फिर, "कुंजी और समापन बिंदु" पृष्ठ खुल जाएगा और आइटम "कुंजी 1", "कुंजी 2", "स्थान /क्षेत्र" और "समापन बिंदु" प्रदर्शित किए जाएंगे।

दोनों आइटम आवश्यक हैं, लेकिन "कुंजी 2" एक अतिरिक्त फ्रेम है, इसलिए इसका उपयोग ज्यादातर मामलों में नहीं किया जाता है।

प्रत्येक मान का एक नोट बनाएं। जैसा कि विवरण में उल्लेख किया गया है, कृपया अप्रत्याशित रूप से विकास दलों के साथ कुंजी साझा न करें।

यदि कुंजी लीक हो जाती है, तो एक नई कुंजी जारी करने के लिए ऊपर "पुन: उत्पन्न कुंजी 1" पर क्लिक करें। बेशक, ध्यान रखें कि इस मामले में, पिछली कुंजी अब उपयोग करने योग्य नहीं होगी।

वाक् से पाठ निकालने के लिए प्रोग्राम से किसी वाक् सेवा का उपयोग करें

अब से, उपयोग किए गए प्रोग्राम के आधार पर वॉयस सेवा का उपयोग बदल जाएगा। इस बार, मैं इसे .NET डेस्कटॉप एप्लिकेशन से एक्सेस करूंगा, लेकिन यदि आप किसी अन्य ढांचे का उपयोग कर रहे हैं, तो इसे इंटरनेट पर उपयोग करने का प्रयास करें। आधिकारिक वेबसाइट में कई भाषाओं में इसका उपयोग करने के निर्देश भी हैं।

इस बार, हम विजुअल स्टूडियो 2022 में एक डब्ल्यूपीएफ डेस्कटॉप ऐप बना रहे हैं। विजुअल स्टूडियो कोड के मामले में, यह थोड़ा परेशानी भरा है क्योंकि कोई डिजाइनर नहीं है, लेकिन यदि आप केवल प्रोग्राम भाग निकालते हैं, तो इसे कंसोल ऐप या वेब ऐप में उपयोग करना संभव है।

प्रोजेक्ट बनाएँ

विजुअल स्टूडियो 2022 प्रारंभ करें।

नया प्रोजेक्ट बनाएँ का चयन करें।

डब्ल्यूपीएफ एप्लिकेशन का चयन करें।

परियोजना का नाम और स्थान मनमाना है। एक बार दर्ज करने के बाद, अगला चुनें।

संस्करण को "कहा जाता है" नेट 6.0". एक बार सेट होने के बाद, "बनाएं" बटन पर क्लिक करें।

न्यूगेट सेटिंग्स

आप स्क्रैच से माइक्रोसॉफ्ट एज़ूर एपीआई तक पहुंच बना सकते हैं, लेकिन इसका उपयोग करना आसान है क्योंकि आपके पास पहले से ही एक आधिकारिक लाइब्रेरी है।

समाधान के लिए निर्भरताएँराइट-क्लिक करें और नुगेट पैकेज प्रबंधित करेंका चयन करें।

"ब्राउज़ करें" टैब का चयन करें, खोज इनपुट फ़ील्ड में "Microsoft.संज्ञानात्मक सेवा.भाषण" दर्ज करें, और एक सूची प्रदर्शित की जाएगी, इसलिए "Microsoft.संज्ञानात्मक सेवा.वाक्" चुनें और इंस्टॉल बटन पर क्लिक करें।

ठीक बटन क्लिक करें।

चुनें मैं सहमत हूँ.

जब आप कर लेंगे, तो इसे पैकेज में जोड़ा जाएगा।

यूआई बनाना

इस बार, हम ऑडियो युक्त एक डब्ल्यूएवी फ़ाइल निर्दिष्ट करेंगे और भाषण एपीआई के साथ पाठ में वार्तालाप सामग्री निकालेंगे और इसे प्रदर्शित करेंगे। फिलहाल, पर्यावरण को इनपुट फ़ील्ड पर निर्भर छोड़ दें ताकि आप कॉपी और पेस्ट करके कोड का उपयोग कर सकें।

स्क्रीन इस तरह दिखनी चाहिए: चूंकि केवल न्यूनतम राशि शामिल है, यदि आप उदाहरण के लिए फ़ाइल संदर्भ बटन जोड़ना चाहते हैं, तो कृपया इसे स्वयं कार्यान्वित करें।

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 कार्यक्रम सभी तरीकों में लिपटा हुआ है। यदि आप इसे अन्य ढांचे में उपयोग करना चाहते हैं, तो इस कोड को आधार के रूप में फिर से लिखें।

मुख्य विंडो.एक्सएएमएल.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

कार्रवाई जाँच करें

प्रोग्राम बनाने के बाद, इसे निष्पादित करें, आवश्यक आइटम दर्ज करें और निष्पादन बटन दबाएं। यदि आपने सही ऑडियो फ़ाइल निर्दिष्ट की है, तो ऑडियो को चलाना चाहिए और दृश्यों के पीछे माइक्रोसॉफ्ट एज़ूर वॉयस सेवा का उपयोग करके पाठ को एक-एक करके निकाला जाना चाहिए।

निष्कर्षण की प्रणाली सही नहीं है क्योंकि यह माइक्रोसॉफ्ट एज़ूर वॉयस सेवा पर निर्भर करती है, यदि आवाज शांत है और स्पष्ट रूप से बोलती है, तो मुझे लगता है कि इसे काफी सटीकता के साथ निकाला जाएगा। चूंकि यह एक क्लाउड सेवा है, भले ही सटीकता अब इतनी अधिक न हो, लेकिन यह जानने से पहले बेहतर हो सकती है, इसलिए उस क्षेत्र में कुछ भी नहीं करना आसान है।