كيفية التعرف على الكلام

حزمة الوثائق المرجعية | (NuGet) | عينات إضافية على GitHub

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

إنشاء تكوين الكلام

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

  1. قم بإنشاء مثيل SpeechConfig باستخدام مفتاحك وموقعك/منطقتك.
  2. إنشاء مورد Speech على مدخل Azure. لمزيد من المعلومات، راجع إنشاء مورد متعدد الخدمات.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
    }
}

يمكنك تهيئة SpeechConfig بعدة طرق أخرى:

  • استخدم نقطة نهاية، ومرر نقطة نهاية خدمة الكلام. المفتاح أو رمز التخويل المميز اختياري.
  • استخدم مضيف، وقم بتمرير عنوان مضيف. المفتاح أو رمز التخويل المميز اختياري.
  • استخدم رمزا مميزا للتخويل مع المنطقة/الموقع المقترن.

إشعار

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

التعرّف على الكلام من الميكروفون

للتعرف على الكلام باستخدام ميكروفون الجهاز، قم بإنشاء مثيل AudioConfig باستخدام FromDefaultMicrophoneInput() الأسلوب . ثم تهيئة SpeechRecognizer الكائن عن طريق تمرير speechConfig و audioConfig.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromMic(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        Console.WriteLine("Speak into your microphone.");
        var result = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromMic(speechConfig);
    }
}

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

التعرف على الكلام من ملف

إذا كنت تريد التعرف على الكلام من ملف صوتي بدلاً من ميكروفون، فلا تزال بحاجة إلى إنشاء مثيل AudioConfig. ولكن في هذه الحالة لا تتصل .FromDefaultMicrophoneInput() يمكنك استدعاء FromWavFileInput() مسار الملف وتمريره:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromFile(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        var result = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromFile(speechConfig);
    }
}

التعرف على الكلام من دفق في الذاكرة

بالنسبة للعديد من حالات الاستخدام، من المحتمل أن تأتي بياناتك الصوتية من Azure Blob Storage، أو أنها موجودة بالفعل في الذاكرة كمثيل byte[] أو بنية بيانات أولية مماثلة. يستخدم المثال التالي PushAudioInputStream للتعرف على الكلام، والذي يعد في الأساس تدفق ذاكرة مجردة. يقوم نموذج التعليمات البرمجية بالإجراءات التالية:

  • يكتب بيانات الصوت الأولية (PCM) إلى PushAudioInputStream باستخدام الوظيفة Write()، والتي تقبل مثيل byte[].
  • قراءة ملف .wav باستخدام FileReader لأغراض العرض التوضيحي. إذا كانت لديك بالفعل بيانات صوتية في مثيل byte[]، يمكنك التخطي مباشرة إلى كتابة المحتوى في تدفق الإدخال.
  • التنسيق الافتراضي هو بيانات تعديل رمز النبض الأحادي (PCM) 16 بت و16 كيلوهرتز. لتخصيص التنسيق، يمكنك تمرير عنصر AudioStreamFormat إلى CreatePushStream() باستخدام الوظيفة الثابتة AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels).
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromStream(SpeechConfig speechConfig)
    {
        var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
        using var audioConfigStream = AudioInputStream.CreatePushStream();
        using var audioConfig = AudioConfig.FromStreamInput(audioConfigStream);
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        byte[] readBytes;
        do
        {
            readBytes = reader.ReadBytes(1024);
            audioConfigStream.Write(readBytes, readBytes.Length);
        } while (readBytes.Length > 0);

        var result = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromStream(speechConfig);
    }
}

يفترض استخدام دفق الدفع كمدخل أن البيانات الصوتية عبارة عن PCM خام ويتخطى أي رؤوس. لا تزال واجهة برمجة التطبيقات تعمل في حالات معينة إذا لم يتم تخطي العنوان. للحصول على أفضل النتائج، ضع في اعتبارك تنفيذ المنطق لقراءة الرؤوس بحيث byte[] يبدأ في بداية البيانات الصوتية.

معالجة الأخطاء

تحصل الأمثلة السابقة فقط على النص الذي تم التعرف عليه من الخاصية result.Text . للتعامل مع الأخطاء والاستجابات الأخرى، تحتاج إلى كتابة بعض التعليمة البرمجية للتعامل مع النتيجة. تقيِّم الشفرة التالية خاصية result.Reason و:

  • يطبع نتيجة التعرف: ResultReason.RecognizedSpeech.
  • إذا لم يكن هناك تطابق في التعرف، فإنه يعلم المستخدم: ResultReason.NoMatch.
  • إذا تمت مصادفة خطأ، فإنه يطبع رسالة الخطأ: ResultReason.Canceled.
switch (result.Reason)
{
    case ResultReason.RecognizedSpeech:
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
        break;
    case ResultReason.NoMatch:
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled:
        var cancellation = CancellationDetails.FromResult(result);
        Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

        if (cancellation.Reason == CancellationReason.Error)
        {
            Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
            Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
            Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
        }
        break;
}

استخدم التعرف المستمر

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

في المقابل، يمكنك استخدام التعرف المستمر عندما تريد التحكم في وقت التوقف عن التعرف. يتطلب منك الاشتراك في Recognizing، RecognizedCanceled والأحداث للحصول على نتائج التعرف. لإيقاف التعرف، يجب الاتصال بـStopContinuousRecognitionAsync. وفيما يلي مثال على كيفية إجراء التعرف المستمر على ملف إدخال الصوت.

ابدأ بتعريف الإدخال وتهيئة SpeechRecognizer:

using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

ثم قم بإنشاء مثيل TaskCompletionSource<int> لإدارة حالة التعرف على الكلام:

var stopRecognition = new TaskCompletionSource<int>();

بعد ذلك، اشترك في الأحداث التي يرسلها SpeechRecognizer:

  • Recognizing: إشارة للأحداث التي تحتوي على نتائج التعرف الوسيطة.
  • Recognized: إشارة للأحداث التي تحتوي على نتائج التعرف النهائية، والتي تشير إلى محاولة التعرف الناجحة.
  • SessionStopped: إشارة للأحداث التي تشير إلى نهاية جلسة التعرف (عملية).
  • Canceled: إشارة للأحداث التي تحتوي على نتائج التعرف الملغاة. تشير هذه النتائج إلى محاولة التعرف التي تم إلغاؤها نتيجة لطلب إلغاء مباشر. بدلاً من ذلك، فإنها تشير إلى فشل في النقل أو البروتوكول.
speechRecognizer.Recognizing += (s, e) =>
{
    Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};

speechRecognizer.Recognized += (s, e) =>
{
    if (e.Result.Reason == ResultReason.RecognizedSpeech)
    {
        Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
    }
    else if (e.Result.Reason == ResultReason.NoMatch)
    {
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
    }
};

speechRecognizer.Canceled += (s, e) =>
{
    Console.WriteLine($"CANCELED: Reason={e.Reason}");

    if (e.Reason == CancellationReason.Error)
    {
        Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
        Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
        Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
    }

    stopRecognition.TrySetResult(0);
};

speechRecognizer.SessionStopped += (s, e) =>
{
    Console.WriteLine("\n    Session stopped event.");
    stopRecognition.TrySetResult(0);
};

بعد إعداد كل شيء، اتصل بـ StartContinuousRecognitionAsync لبدء التعرف على:

await speechRecognizer.StartContinuousRecognitionAsync();

// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });

// Make the following call at some point to stop recognition:
// await speechRecognizer.StopContinuousRecognitionAsync();

قم بتغيير لغة المصدر

من المهام الشائعة للتعرف على الكلام تحديد لغة الإدخال (أو المصدر). يوضح المثال التالي كيفية تغيير لغة الإدخال إلى الإيطالية. في تعليمتك البرمجية، ابحث عن مثيل SpeechConfig وأضف هذا السطر أسفله مباشرةً:

speechConfig.SpeechRecognitionLanguage = "it-IT";

SpeechRecognitionLanguageتتوقع الخاصية سلسلة تنسيق لغوية محلية. لمزيد من المعلومات، راجع قائمة لغة الكلام المعتمدة إلى لغة نصية.

تعريف اللغة

يمكنك استخدام تعريف اللغة مع التعرف على الكلام إلى النص عندما تحتاج إلى تحديد اللغة في مصدر صوت ثم نسخها إلى نص.

للحصول على نموذج تعليمة برمجية كامل، راجع تعريف اللغة.

استخدم نقطة نهاية مخصصة

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

var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);

تشغيل حاوية واستخدامها

توفر حاويات الكلام واجهات برمجة تطبيقات نقطة نهاية الاستعلام المستندة إلى websocket التي يتم الوصول إليها من خلال Speech SDK و Speech CLI. بشكل افتراضي، يستخدم Speech SDK و Speech CLI خدمة Speech العامة. لاستخدام الحاوية، تحتاج إلى تغيير أسلوب التهيئة. استخدم عنوان URL لمضيف الحاوية بدلا من المفتاح والمنطقة.

لمزيد من المعلومات حول الحاويات، راجع استضافة عناوين URL في تثبيت حاويات الكلام وتشغيلها باستخدام Docker.

تغيير كيفية التعامل مع الصمت

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

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

يمكن معالجة هذه المشاكل عن طريق تعيين إحدى خاصيتي المهلة على المثيل SpeechConfig المستخدم لإنشاء SpeechRecognizer:

  • تعمل مهلة تجزئة الصمت على ضبط مقدار الصوت غير المنسوخ المسموح به ضمن عبارة يتم التحدث بها حاليا قبل اعتبار هذه العبارة "تم".
    • عادة ما تجعل القيم الأعلى النتائج أطول وتسمح بإيقاف مؤقت أطول من السماعة ضمن عبارة ولكنها تجعل النتائج تستغرق وقتا أطول للوصول. يمكنهم أيضا جعل عبارات منفصلة تدمج معا في نتيجة واحدة عند تعيين عالية جدا.
    • تجعل القيم المنخفضة النتائج أقصر بشكل عام وتضمن المزيد من الفواصل الفورية والمتكررة بين العبارات، ولكن يمكن أن تتسبب أيضا في فصل العبارات المفردة إلى نتائج متعددة عند تعيينها منخفضة جدا.
    • يمكن تعيين هذه المهلة إلى قيم عدد صحيح بين 100 و5000، بالمللي ثانية، مع 500 افتراضي نموذجي.
  • تضبط مهلة الصمت الأولي مقدار الصوت غير المنسوخ قبل انتهاء محاولة التعرف بنتيجة "عدم التطابق".
    • تمنح القيم الأعلى المتحدثين مزيدا من الوقت للرد والبدء في التحدث، ولكن يمكن أن يؤدي أيضا إلى استجابة بطيئة عندما لا يتم التحدث بأي شيء.
    • تضمن القيم المنخفضة المطالبة "بدون تطابق" للحصول على تجربة مستخدم أسرع ومعالجة صوتية أكثر تحكما، ولكنها قد تقطع سماعة بسرعة كبيرة عند التعيين منخفض جدا.
    • نظرا لأن التعرف المستمر يولد العديد من النتائج، تحدد هذه القيمة عدد المرات التي تصل فيها نتائج "عدم التطابق" ولكنها لا تؤثر على محتوى نتائج التعرف.
    • يمكن تعيين هذه المهلة إلى أي قيمة عدد صحيح غير سالبة، بالمللي ثانية، أو تعيينها إلى 0 لتعطيلها بالكامل. 5000 هو افتراضي نموذجي للتعرف على لقطة واحدة بينما 15000 هو افتراضي نموذجي للتعرف المستمر.

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

مثال: قد يتوقف المستخدمون الذين يتحدثون رقما تسلسليا مثل "ABC-123-4567" بين مجموعات الأحرف لفترة كافية لتقسيم الرقم التسلسلي إلى نتائج متعددة. في هذه الحالة، جرب قيمة أعلى مثل 2000 مللي ثانية لمهلة تجزئة الصمت:

speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "2000");

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

speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "300");

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

speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");

حزمة الوثائق المرجعية | (NuGet) | عينات إضافية على GitHub

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

إنشاء تكوين الكلام

للاتصال بخدمة الكلام باستخدام Speech SDK، يلزمك إنشاء مثيل SpeechConfig. تتضمن هذه الفئة معلومات حول اشتراكك، مثل مفتاحك والموقع/المنطقة المقترنة، نقطة النهاية، المضيف، أو رمز التخويل.

  1. قم بإنشاء مثيل SpeechConfig باستخدام المفتاح والمنطقة.
  2. إنشاء مورد Speech على مدخل Azure. لمزيد من المعلومات، راجع إنشاء مورد متعدد الخدمات.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;

auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");

يمكنك تهيئة SpeechConfig بعدة طرق أخرى:

  • استخدم نقطة نهاية، ومرر نقطة نهاية خدمة الكلام. المفتاح أو رمز التخويل المميز اختياري.
  • استخدم مضيف، وقم بتمرير عنوان مضيف. المفتاح أو رمز التخويل المميز اختياري.
  • استخدم رمزا مميزا للتخويل مع المنطقة/الموقع المقترن.

إشعار

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

التعرّف على الكلام من الميكروفون

للتعرف على الكلام باستخدام ميكروفون الجهاز، قم بإنشاء مثيل AudioConfig باستخدام FromDefaultMicrophoneInput() وظيفة العضو. ثم تهيئةSpeechRecognizer الكائن عن طريق تمرير audioConfig و config.

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

cout << "Speak into your microphone." << std::endl;
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

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

التعرف على الكلام من ملف

إذا كنت تريد التعرف على الكلام من ملف صوتي بدلاً من استخدام ميكروفون، فلا تزال بحاجة إلى إنشاء مثيل AudioConfig. ولكن في هذه الحالة لا تتصل .FromDefaultMicrophoneInput() يمكنك استدعاء FromWavFileInput() مسار الملف وتمريره:

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

التعرف على الكلام باستخدام فئة أداة التعرف

تكشف فئة أداة التعرف الخاصة بـ Speech SDK لـ C ++ بعض الطرق التي يمكنك استخدامها للتعرف على الكلام.

التعرف على لقطة واحدة

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

auto result = speechRecognizer->RecognizeOnceAsync().get();

تحتاج إلى كتابة بعض التعليمة البرمجية للتعامل مع النتيجة. يقيم هذا النموذج result->Reason و:

  • يطبع نتيجة التعرف: ResultReason::RecognizedSpeech.
  • إذا لم يكن هناك تطابق في التعرف، فإنه يعلم المستخدم: ResultReason::NoMatch.
  • إذا تمت مصادفة خطأ، فإنه يطبع رسالة الخطأ: ResultReason::Canceled.
switch (result->Reason)
{
    case ResultReason::RecognizedSpeech:
        cout << "We recognized: " << result->Text << std::endl;
        break;
    case ResultReason::NoMatch:
        cout << "NOMATCH: Speech could not be recognized." << std::endl;
        break;
    case ResultReason::Canceled:
        {
            auto cancellation = CancellationDetails::FromResult(result);
            cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error) {
                cout << "CANCELED: ErrorCode= " << (int)cancellation->ErrorCode << std::endl;
                cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
                cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
            }
        }
        break;
    default:
        break;
}

التعرف المستمر

الاعتراف المستمر هو أكثر قليلاً من المشاركة في التعرف في لقطة واحدة. يتطلب منك الاشتراك في Recognizing، RecognizedCanceled والأحداث للحصول على نتائج التعرف. لإيقاف التعرف، يجب استدعاء StopContinuousRecognitionAsync. وفيما يلي مثال على كيفية إجراء التعرف المستمر على ملف إدخال الصوت.

ابدأ بتعريف الإدخال وتهيئة SpeechRecognizer:

auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

بعد ذلك، قم بإنشاء متغير لإدارة حالة التعرف على الكلام. أعلن promise<void> لأنه في بداية التعرف، يمكنك أن تفترض بأمان أنه لم ينته:

promise<void> recognitionEnd;

بعد ذلك، اشترك في الأحداث التي يرسلها SpeechRecognizer:

  • Recognizing: إشارة للأحداث التي تحتوي على نتائج التعرف الوسيطة.
  • Recognized: إشارة للأحداث التي تحتوي على نتائج التعرف النهائية، والتي تشير إلى محاولة التعرف الناجحة.
  • SessionStopped: إشارة للأحداث التي تشير إلى نهاية جلسة التعرف (عملية).
  • Canceled: إشارة للأحداث التي تحتوي على نتائج التعرف الملغاة. تشير هذه النتائج إلى محاولة التعرف التي تم إلغاؤها نتيجة لطلب إلغاء مباشر. بدلاً من ذلك، فإنها تشير إلى فشل في النقل أو البروتوكول.
speechRecognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
    {
        cout << "Recognizing:" << e.Result->Text << std::endl;
    });

speechRecognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
    {
        if (e.Result->Reason == ResultReason::RecognizedSpeech)
        {
            cout << "RECOGNIZED: Text=" << e.Result->Text 
                 << " (text could not be translated)" << std::endl;
        }
        else if (e.Result->Reason == ResultReason::NoMatch)
        {
            cout << "NOMATCH: Speech could not be recognized." << std::endl;
        }
    });

speechRecognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
    {
        cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
        if (e.Reason == CancellationReason::Error)
        {
            cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
                 << "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
                 << "CANCELED: Did you set the speech resource key and region values?" << std::endl;

            recognitionEnd.set_value(); // Notify to stop recognition.
        }
    });

speechRecognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
    {
        cout << "Session stopped.";
        recognitionEnd.set_value(); // Notify to stop recognition.
    });

بعد إعداد كل شيء، اتصل بـ StartContinuousRecognitionAsync لبدء التعرف على:

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer->StartContinuousRecognitionAsync().get();

// Waits for recognition end.
recognitionEnd.get_future().get();

// Stops recognition.
speechRecognizer->StopContinuousRecognitionAsync().get();

قم بتغيير لغة المصدر

من المهام الشائعة للتعرف على الكلام تحديد لغة الإدخال (أو المصدر). يوضح المثال التالي كيفية تغيير لغة الإدخال إلى الألمانية. في تعليمتك البرمجية، ابحث عن مثيل SpeechConfig وأضف هذا السطر أسفله مباشرةً:

speechConfig->SetSpeechRecognitionLanguage("de-DE");

SetSpeechRecognitionLanguage هي معلمة تعامل السلسلة كوسيطة. لمزيد من المعلومات، راجع قائمة لغة الكلام المعتمدة إلى لغة نصية.

تعريف اللغة

يمكنك استخدام تعريف اللغة مع التعرف على الكلام إلى النص عندما تحتاج إلى تحديد اللغة في مصدر صوت ثم نسخها إلى نص.

للحصول على نموذج تعليمة برمجية كامل، راجع تعريف اللغة.

استخدم نقطة نهاية مخصصة

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

auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);

تشغيل حاوية واستخدامها

توفر حاويات الكلام واجهات برمجة تطبيقات نقطة نهاية الاستعلام المستندة إلى websocket التي يتم الوصول إليها من خلال Speech SDK و Speech CLI. بشكل افتراضي، يستخدم Speech SDK و Speech CLI خدمة Speech العامة. لاستخدام الحاوية، تحتاج إلى تغيير أسلوب التهيئة. استخدم عنوان URL لمضيف الحاوية بدلا من المفتاح والمنطقة.

لمزيد من المعلومات حول الحاويات، راجع استضافة عناوين URL في تثبيت حاويات الكلام وتشغيلها باستخدام Docker.

الوثائق المرجعية | حزمة (Go) | عينات إضافية على GitHub

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

التعرف على الكلام إلى النص من ميكروفون

استخدم نموذج التعليمات البرمجية التالي لتشغيل التعرف على الكلام من ميكروفون الجهاز الافتراضي. استبدل المتغيرين subscription وregion بمفتاح الكلام والموقع/المنطقة، على التوالي. إنشاء مورد Speech على مدخل Azure. لمزيد من المعلومات، راجع إنشاء مورد متعدد الخدمات. يؤدي تشغيل البرنامج النصي إلى بدء جلسة التعرف على الميكروفون الافتراضي ونص الإخراج:

package main

import (
	"bufio"
	"fmt"
	"os"

	"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
	"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func sessionStartedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Started (ID=", event.SessionID, ")")
}

func sessionStoppedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Stopped (ID=", event.SessionID, ")")
}

func recognizingHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognizing:", event.Result.Text)
}

func recognizedHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognized:", event.Result.Text)
}

func cancelledHandler(event speech.SpeechRecognitionCanceledEventArgs) {
	defer event.Close()
	fmt.Println("Received a cancellation: ", event.ErrorDetails)
	fmt.Println("Did you set the speech resource key and region values?")
}

func main() {
    subscription :=  "YourSpeechKey"
    region := "YourSpeechRegion"

	audioConfig, err := audio.NewAudioConfigFromDefaultMicrophoneInput()
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(sessionStartedHandler)
	speechRecognizer.SessionStopped(sessionStoppedHandler)
	speechRecognizer.Recognizing(recognizingHandler)
	speechRecognizer.Recognized(recognizedHandler)
	speechRecognizer.Canceled(cancelledHandler)
	speechRecognizer.StartContinuousRecognitionAsync()
	defer speechRecognizer.StopContinuousRecognitionAsync()
	bufio.NewReader(os.Stdin).ReadBytes('\n')
}

تشغيل الأوامر التالية لإنشاء ملف go.mod الذي يرتبط بالمكونات المستضافة على GitHub:

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

الآن أنشئ التعليمة البرمجية وشغّلها:

go build
go run quickstart

للحصول على معلومات تفصيلية، راجع محتوى المرجع SpeechConfig للفئة والمحتوى المرجعي SpeechRecognizer للفئة.

التعرف على الكلام إلى نص من ملف صوتي

استخدم النموذج التالي لتشغيل التعرف على الكلام من ملف صوتي. استبدل المتغيرين subscription وregion بمفتاح الكلام والموقع/المنطقة، على التوالي. إنشاء مورد Speech على مدخل Azure. لمزيد من المعلومات، راجع إنشاء مورد متعدد الخدمات. بالإضافة إلى ذلك، استبدل المتغير file بمسار إلى ملف .wav . عند تشغيل البرنامج النصي، فإنه يتعرف على الكلام من الملف وإخراج نتيجة النص:

package main

import (
	"fmt"
	"time"

	"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
	"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func main() {
    subscription :=  "YourSpeechKey"
    region := "YourSpeechRegion"
    file := "path/to/file.wav"

	audioConfig, err := audio.NewAudioConfigFromWavFileInput(file)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Started (ID=", event.SessionID, ")")
	})
	speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Stopped (ID=", event.SessionID, ")")
	})

	task := speechRecognizer.RecognizeOnceAsync()
	var outcome speech.SpeechRecognitionOutcome
	select {
	case outcome = <-task:
	case <-time.After(5 * time.Second):
		fmt.Println("Timed out")
		return
	}
	defer outcome.Close()
	if outcome.Error != nil {
		fmt.Println("Got an error: ", outcome.Error)
	}
	fmt.Println("Got a recognition!")
	fmt.Println(outcome.Result.Text)
}

تشغيل الأوامر التالية لإنشاء ملف go.mod الذي يرتبط بالمكونات المستضافة على GitHub:

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

الآن أنشئ التعليمة البرمجية وشغّلها:

go build
go run quickstart

للحصول على معلومات تفصيلية، راجع محتوى المرجع SpeechConfig للفئة والمحتوى المرجعي SpeechRecognizer للفئة.

تشغيل حاوية واستخدامها

توفر حاويات الكلام واجهات برمجة تطبيقات نقطة نهاية الاستعلام المستندة إلى websocket التي يتم الوصول إليها من خلال Speech SDK و Speech CLI. بشكل افتراضي، يستخدم Speech SDK و Speech CLI خدمة Speech العامة. لاستخدام الحاوية، تحتاج إلى تغيير أسلوب التهيئة. استخدم عنوان URL لمضيف الحاوية بدلا من المفتاح والمنطقة.

لمزيد من المعلومات حول الحاويات، راجع استضافة عناوين URL في تثبيت حاويات الكلام وتشغيلها باستخدام Docker.

وثائق مرجعية | نماذج إضافية على GitHub

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

إنشاء تكوين الكلام

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

  1. قم بإنشاء مثيل SpeechConfig باستخدام مفتاحك وموقعك/منطقتك.
  2. إنشاء مورد Speech على مدخل Azure. لمزيد من المعلومات، راجع إنشاء مورد متعدد الخدمات.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
    }
}

يمكنك تهيئة SpeechConfig بعدة طرق أخرى:

  • استخدم نقطة نهاية، ومرر نقطة نهاية خدمة الكلام. المفتاح أو رمز التخويل المميز اختياري.
  • استخدم مضيف، وقم بتمرير عنوان مضيف. المفتاح أو رمز التخويل المميز اختياري.
  • استخدم رمزا مميزا للتخويل مع المنطقة/الموقع المقترن.

إشعار

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

التعرّف على الكلام من الميكروفون

للتعرف على الكلام باستخدام ميكروفون الجهاز، قم بإنشاء مثيل AudioConfig باستخدام fromDefaultMicrophoneInput() الأسلوب . ثم تهيئة SpeechRecognizer الكائن عن طريق تمرير audioConfig و config.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromMic(speechConfig);
    }

    public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
        SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        System.out.println("Speak into your microphone.");
        Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

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

التعرف على الكلام من ملف

إذا كنت تريد التعرف على الكلام من ملف صوتي بدلاً من استخدام ميكروفون، فلا تزال بحاجة إلى إنشاء مثيل AudioConfig. ولكن في هذه الحالة لا تتصل .FromDefaultMicrophoneInput() يمكنك استدعاء fromWavFileInput() مسار الملف وتمريره:

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromFile(speechConfig);
    }

    public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
        SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
        
        Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

معالجة الأخطاء

تحصل الأمثلة السابقة فقط على النص الذي تم التعرف عليه باستخدام result.getText(). للتعامل مع الأخطاء والاستجابات الأخرى، تحتاج إلى كتابة بعض التعليمة البرمجية للتعامل مع النتيجة. يقيّم المثال التالي result.getReason() و:

  • يطبع نتيجة التعرف: ResultReason.RecognizedSpeech.
  • إذا لم يكن هناك تطابق في التعرف، فإنه يعلم المستخدم: ResultReason.NoMatch.
  • إذا تمت مصادفة خطأ، فإنه يطبع رسالة الخطأ: ResultReason.Canceled.
switch (result.getReason()) {
    case ResultReason.RecognizedSpeech:
        System.out.println("We recognized: " + result.getText());
        exitCode = 0;
        break;
    case ResultReason.NoMatch:
        System.out.println("NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled: {
            CancellationDetails cancellation = CancellationDetails.fromResult(result);
            System.out.println("CANCELED: Reason=" + cancellation.getReason());

            if (cancellation.getReason() == CancellationReason.Error) {
                System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
                System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
                System.out.println("CANCELED: Did you set the speech resource key and region values?");
            }
        }
        break;
}

استخدم التعرف المستمر

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

في المقابل، يمكنك استخدام التعرف المستمر عندما تريد التحكم في وقت التوقف عن التعرف. يتطلب منك الاشتراك في recognizing، recognizedcanceled والأحداث للحصول على نتائج التعرف. لإيقاف التعرف، يجب الاتصال بـstopContinuousRecognitionAsync. فيما يلي مثال على كيفية إجراء التعرف المستمر على ملف إدخال الصوت.

ابدأ بتعريف الإدخال وتهيئة SpeechRecognizer:

AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);

بعد ذلك، قم بإنشاء متغير لإدارة حالة التعرف على الكلام. قم بتعريف Semaphore مثيل في نطاق الفئة:

private static Semaphore stopTranslationWithFileSemaphore;

بعد ذلك، اشترك في الأحداث التي يرسلها SpeechRecognizer:

  • recognizing: إشارة للأحداث التي تحتوي على نتائج التعرف الوسيطة.
  • recognized: إشارة للأحداث التي تحتوي على نتائج التعرف النهائية، والتي تشير إلى محاولة التعرف الناجحة.
  • sessionStopped: إشارة للأحداث التي تشير إلى نهاية جلسة التعرف (عملية).
  • canceled: إشارة للأحداث التي تحتوي على نتائج التعرف الملغاة. تشير هذه النتائج إلى محاولة التعرف التي تم إلغاؤها نتيجة لطلب إلغاء مباشر. بدلاً من ذلك، فإنها تشير إلى فشل في النقل أو البروتوكول.
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);

speechRecognizer.recognizing.addEventListener((s, e) -> {
    System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});

speechRecognizer.recognized.addEventListener((s, e) -> {
    if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
        System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
    }
    else if (e.getResult().getReason() == ResultReason.NoMatch) {
        System.out.println("NOMATCH: Speech could not be recognized.");
    }
});

speechRecognizer.canceled.addEventListener((s, e) -> {
    System.out.println("CANCELED: Reason=" + e.getReason());

    if (e.getReason() == CancellationReason.Error) {
        System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
        System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
        System.out.println("CANCELED: Did you set the speech resource key and region values?");
    }

    stopTranslationWithFileSemaphore.release();
});

speechRecognizer.sessionStopped.addEventListener((s, e) -> {
    System.out.println("\n    Session stopped event.");
    stopTranslationWithFileSemaphore.release();
});

بعد إعداد كل شيء، اتصل بـ startContinuousRecognitionAsync لبدء التعرف على:

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();

// Waits for completion.
stopTranslationWithFileSemaphore.acquire();

// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();

قم بتغيير لغة المصدر

من المهام الشائعة للتعرف على الكلام تحديد لغة الإدخال (أو المصدر). يوضح المثال التالي كيفية تغيير لغة الإدخال إلى الفرنسية. في التعليمات البرمجية الخاصة بك، ابحث عن المثيل الخاص بك SpeechConfig ، وأضف هذا السطر مباشرة أسفله:

config.setSpeechRecognitionLanguage("fr-FR");

setSpeechRecognitionLanguage هي معلمة تعامل السلسلة كوسيطة. راجع قائمة الكلام المعتمد إلى إعدادات النص المحلية.

تعريف اللغة

يمكنك استخدام تعريف اللغة مع التعرف على الكلام إلى النص عندما تحتاج إلى تحديد اللغة في مصدر صوت ثم نسخها إلى نص.

للحصول على نموذج تعليمة برمجية كامل، راجع تعريف اللغة.

استخدم نقطة نهاية مخصصة

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

SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);

تشغيل حاوية واستخدامها

توفر حاويات الكلام واجهات برمجة تطبيقات نقطة نهاية الاستعلام المستندة إلى websocket التي يتم الوصول إليها من خلال Speech SDK و Speech CLI. بشكل افتراضي، يستخدم Speech SDK و Speech CLI خدمة Speech العامة. لاستخدام الحاوية، تحتاج إلى تغيير أسلوب التهيئة. استخدم عنوان URL لمضيف الحاوية بدلا من المفتاح والمنطقة.

لمزيد من المعلومات حول الحاويات، راجع استضافة عناوين URL في تثبيت حاويات الكلام وتشغيلها باستخدام Docker.

حزمة | الوثائق المرجعية (npm) | عينات إضافية على GitHub | التعليمة البرمجية لمصدر المكتبة

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

إنشاء تكوين الكلام

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

  1. قم بإنشاء مثيل SpeechConfig باستخدام مفتاحك وموقعك/منطقتك.
  2. إنشاء مورد Speech على مدخل Azure. لمزيد من المعلومات، راجع إنشاء مورد متعدد الخدمات.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

يمكنك تهيئة SpeechConfig بعدة طرق أخرى:

  • استخدم نقطة نهاية، ومرر نقطة نهاية خدمة الكلام. المفتاح أو رمز التخويل المميز اختياري.
  • استخدم مضيف، وقم بتمرير عنوان مضيف. المفتاح أو رمز التخويل المميز اختياري.
  • استخدم رمزا مميزا للتخويل مع المنطقة/الموقع المقترن.

إشعار

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

التعرّف على الكلام من الميكروفون

التعرف على الكلام من ميكروفون غير مدعوم في Node.js. بل مدعوم في بيئة JavaScript المستندة إلى المستعرض فحسب. لمزيد من المعلومات، راجع نموذج React وتنفيذ الكلام إلى نص من ميكروفون على GitHub. يعرض نموذج React أنماط تصميم لتبادل الرموز المميزة للمصادقة وإدارتها. كما يعرض التقاط الصوت من ميكروفون أو ملف لتحويل الكلام إلى نص.

إشعار

إذا كنت تريد استخدام جهاز إدخال صوت معين، فستحتاج إلى تحديد معرف الجهاز في AudioConfig الكائن. لمزيد من المعلومات، راجع تحديد جهاز إدخال صوت باستخدام Speech SDK.

التعرف على الكلام من ملف

للتعرف على الكلام من ملف صوتي، قم بإنشاء مثيل AudioConfig باستخدام fromWavFileInput() الأسلوب الذي يقبل كائن.Buffer ثم قم بتهيئة SpeechRecognizer بتمرير audioConfig وspeechConfig.

const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

function fromFile() {
    let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
    let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

    speechRecognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        speechRecognizer.close();
    });
}
fromFile();

التعرف على الكلام من دفق في الذاكرة

بالنسبة للعديد من حالات الاستخدام، من المحتمل أن تأتي بياناتك الصوتية من Azure Blob Storage. أو أنها موجودة بالفعل في الذاكرة كبنية بيانات أولية مماثلة ArrayBuffer أو مماثلة. الرمز التالي:

  • يقوم بإنشاء دفق دفع باستخدام createPushStream().
  • قراءة ملف .wav باستخدام fs.createReadStream لأغراض العرض التوضيحي. إذا كان لديك بالفعل بيانات صوتية ArrayBufferفي ، يمكنك التخطي مباشرة إلى كتابة المحتوى إلى دفق الإدخال.
  • ينشئ تكويناً صوتياً باستخدام دفق الدفع.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

function fromStream() {
    let pushStream = sdk.AudioInputStream.createPushStream();

    fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
        pushStream.write(arrayBuffer.slice());
    }).on('end', function() {
        pushStream.close();
    });
 
    let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
    let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
    speechRecognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        speechRecognizer.close();
    });
}
fromStream();

يفترض استخدام دفق الدفع كمدخل أن البيانات الصوتية هي بيانات تعديل رمز نبضي أولي (PCM) تتخطى أي رؤوس. لا تزال واجهة برمجة التطبيقات تعمل في حالات معينة إذا لم يتم تخطي العنوان. للحصول على أفضل النتائج، ضع في اعتبارك تنفيذ المنطق لقراءة الرؤوس بحيث fs يبدأ في بداية البيانات الصوتية.

معالجة الأخطاء

تحصل الأمثلة السابقة فقط على النص الذي تم التعرف عليه من الخاصية result.text . للتعامل مع الأخطاء والاستجابات الأخرى، تحتاج إلى كتابة بعض التعليمة البرمجية للتعامل مع النتيجة. تقيِّم الشفرة التالية خاصية result.reason و:

  • يطبع نتيجة التعرف: ResultReason.RecognizedSpeech.
  • إذا لم يكن هناك تطابق في التعرف، فإنه يعلم المستخدم: ResultReason.NoMatch.
  • إذا تمت مصادفة خطأ، فإنه يطبع رسالة الخطأ: ResultReason.Canceled.
switch (result.reason) {
    case sdk.ResultReason.RecognizedSpeech:
        console.log(`RECOGNIZED: Text=${result.text}`);
        break;
    case sdk.ResultReason.NoMatch:
        console.log("NOMATCH: Speech could not be recognized.");
        break;
    case sdk.ResultReason.Canceled:
        const cancellation = sdk.CancellationDetails.fromResult(result);
        console.log(`CANCELED: Reason=${cancellation.reason}`);

        if (cancellation.reason == sdk.CancellationReason.Error) {
            console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
            console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
            console.log("CANCELED: Did you set the speech resource key and region values?");
        }
        break;
    }

استخدم التعرف المستمر

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

في المقابل، يمكنك استخدام التعرف المستمر عندما تريد التحكم في وقت التوقف عن التعرف. يتطلب منك الاشتراك في Recognizing، RecognizedCanceled والأحداث للحصول على نتائج التعرف. لإيقاف التعرف، يجب الاتصال بـstopContinuousRecognitionAsync. وفيما يلي مثال على كيفية إجراء التعرف المستمر على ملف إدخال الصوت.

ابدأ بتعريف الإدخال وتهيئة SpeechRecognizer:

const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

بعد ذلك، اشترك في الأحداث المرسلة من SpeechRecognizer:

  • recognizing: إشارة للأحداث التي تحتوي على نتائج التعرف الوسيطة.
  • recognized: إشارة للأحداث التي تحتوي على نتائج التعرف النهائية، والتي تشير إلى محاولة التعرف الناجحة.
  • sessionStopped: إشارة للأحداث التي تشير إلى نهاية جلسة التعرف (عملية).
  • canceled: إشارة للأحداث التي تحتوي على نتائج التعرف الملغاة. تشير هذه النتائج إلى محاولة التعرف التي تم إلغاؤها نتيجة لطلب إلغاء مباشر. بدلاً من ذلك، فإنها تشير إلى فشل في النقل أو البروتوكول.
speechRecognizer.recognizing = (s, e) => {
    console.log(`RECOGNIZING: Text=${e.result.text}`);
};

speechRecognizer.recognized = (s, e) => {
    if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
        console.log(`RECOGNIZED: Text=${e.result.text}`);
    }
    else if (e.result.reason == sdk.ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be recognized.");
    }
};

speechRecognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);

    if (e.reason == sdk.CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you set the speech resource key and region values?");
    }

    speechRecognizer.stopContinuousRecognitionAsync();
};

speechRecognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    speechRecognizer.stopContinuousRecognitionAsync();
};

بعد إعداد كل شيء، اتصل بـ startContinuousRecognitionAsync لبدء التعرف على:

speechRecognizer.startContinuousRecognitionAsync();

// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();

قم بتغيير لغة المصدر

من المهام الشائعة للتعرف على الكلام تحديد لغة الإدخال (أو المصدر). يوضح المثال التالي كيفية تغيير لغة الإدخال إلى الإيطالية. في تعليمتك البرمجية، ابحث عن مثيل SpeechConfig وأضف هذا السطر أسفله مباشرةً:

speechConfig.speechRecognitionLanguage = "it-IT";

speechRecognitionLanguageتتوقع الخاصية سلسلة تنسيق لغوية محلية. لمزيد من المعلومات، راجع قائمة لغة الكلام المعتمدة إلى لغة نصية.

تعريف اللغة

يمكنك استخدام تعريف اللغة مع التعرف على الكلام إلى النص عندما تحتاج إلى تحديد اللغة في مصدر صوت ثم نسخها إلى نص.

للحصول على نموذج تعليمة برمجية كامل، راجع تعريف اللغة.

استخدم نقطة نهاية مخصصة

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

var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);

تشغيل حاوية واستخدامها

توفر حاويات الكلام واجهات برمجة تطبيقات نقطة نهاية الاستعلام المستندة إلى websocket التي يتم الوصول إليها من خلال Speech SDK و Speech CLI. بشكل افتراضي، يستخدم Speech SDK و Speech CLI خدمة Speech العامة. لاستخدام الحاوية، تحتاج إلى تغيير أسلوب التهيئة. استخدم عنوان URL لمضيف الحاوية بدلا من المفتاح والمنطقة.

لمزيد من المعلومات حول الحاويات، راجع استضافة عناوين URL في تثبيت حاويات الكلام وتشغيلها باستخدام Docker.

الوثائق المرجعية | حزمة (التنزيل) | نماذج إضافية على GitHub

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

تثبيت Speech SDK والعينات

يحتوي مستودع Azure-Samples/cognitive-services-speech-sdk على عينات مكتوبة في Objective-C لنظامي التشغيل iOS وMac. حدد ارتباطاً للاطلاع على إرشادات التثبيت لكل نموذج:

لمزيد من المعلومات، راجع Speech SDK لمرجع Objective-C.

استخدم نقطة نهاية مخصصة

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

SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];

تشغيل حاوية واستخدامها

توفر حاويات الكلام واجهات برمجة تطبيقات نقطة نهاية الاستعلام المستندة إلى websocket التي يتم الوصول إليها من خلال Speech SDK و Speech CLI. بشكل افتراضي، يستخدم Speech SDK و Speech CLI خدمة Speech العامة. لاستخدام الحاوية، تحتاج إلى تغيير أسلوب التهيئة. استخدم عنوان URL لمضيف الحاوية بدلا من المفتاح والمنطقة.

لمزيد من المعلومات حول الحاويات، راجع استضافة عناوين URL في تثبيت حاويات الكلام وتشغيلها باستخدام Docker.

الوثائق المرجعية | حزمة (التنزيل) | نماذج إضافية على GitHub

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

تثبيت Speech SDK والعينات

يحتوي مستودع Azure-Samples / cognitive-services-speech-sdk على عينات مكتوبة في Swift لنظامي التشغيل iOS و Mac. حدد ارتباطاً للاطلاع على إرشادات التثبيت لكل نموذج:

لمزيد من المعلومات، راجع Speech SDK لمرجع Swift.

استخدم نقطة نهاية مخصصة

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

let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);

تشغيل حاوية واستخدامها

توفر حاويات الكلام واجهات برمجة تطبيقات نقطة نهاية الاستعلام المستندة إلى websocket التي يتم الوصول إليها من خلال Speech SDK و Speech CLI. بشكل افتراضي، يستخدم Speech SDK و Speech CLI خدمة Speech العامة. لاستخدام الحاوية، تحتاج إلى تغيير أسلوب التهيئة. استخدم عنوان URL لمضيف الحاوية بدلا من المفتاح والمنطقة.

لمزيد من المعلومات حول الحاويات، راجع استضافة عناوين URL في تثبيت حاويات الكلام وتشغيلها باستخدام Docker.

حزمة الوثائق المرجعية | (PyPi) | عينات إضافية على GitHub

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

إنشاء تكوين الكلام

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

  1. قم بإنشاء مثيل SpeechConfig باستخدام مفتاح الكلام والموقع/المنطقة.
  2. إنشاء مورد Speech على مدخل Azure. لمزيد من المعلومات، راجع إنشاء مورد متعدد الخدمات.
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")

يمكنك تهيئة SpeechConfig بعدة طرق أخرى:

  • استخدم نقطة نهاية، ومرر نقطة نهاية خدمة الكلام. مفتاح الكلام أو رمز التخويل اختياري.
  • استخدم مضيف، وقم بتمرير عنوان مضيف. مفتاح الكلام أو رمز التخويل اختياري.
  • استخدم رمزا مميزا للتخويل مع المنطقة/الموقع المقترن.

إشعار

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

التعرّف على الكلام من الميكروفون

للتعرف على الكلام باستخدام ميكروفون جهازك، قم بإنشاء SpeechRecognizer مثيل دون اجتياز AudioConfig، ثم قم بتمرير speech_config:

import azure.cognitiveservices.speech as speechsdk

def from_mic():
    speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

    print("Speak into your microphone.")
    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_mic()

إذا كنت تريد استخدام جهاز إدخال صوتي محدد، فأنت بحاجة إلى تحديد معرف الجهاز في AudioConfig، وتمريره إلى معلمة SpeechRecognizer المُنشئ audio_config. لمزيد من المعلومات حول كيفية الحصول على معرف الجهاز لجهاز إدخال الصوت، راجع تحديد جهاز إدخال صوت باستخدام Speech SDK

التعرف على الكلام من ملف

إذا كنت تريد التعرف على الكلام من ملف صوتي بدلاً من استخدام ميكروفون، فأنشئ مثيلاً AudioConfig واستخدم المعلمة filename :

import azure.cognitiveservices.speech as speechsdk

def from_file():
    speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
    audio_config = speechsdk.AudioConfig(filename="your_file_name.wav")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_file()

معالجة الأخطاء

تحصل الأمثلة السابقة فقط على النص الذي تم التعرف عليه من الخاصية result.text . للتعامل مع الأخطاء والاستجابات الأخرى، تحتاج إلى كتابة بعض التعليمة البرمجية للتعامل مع النتيجة. تقيِّم الشفرة التالية خاصية result.reason و:

  • يطبع نتيجة التعرف: speechsdk.ResultReason.RecognizedSpeech.
  • إذا لم يكن هناك تطابق في التعرف، فإنه يعلم المستخدم: speechsdk.ResultReason.NoMatch.
  • إذا تمت مصادفة خطأ، فإنه يطبع رسالة الخطأ: speechsdk.ResultReason.Canceled.
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
    print("Recognized: {}".format(result.text))
elif result.reason == speechsdk.ResultReason.NoMatch:
    print("No speech could be recognized: {}".format(result.no_match_details))
elif result.reason == speechsdk.ResultReason.Canceled:
    cancellation_details = result.cancellation_details
    print("Speech Recognition canceled: {}".format(cancellation_details.reason))
    if cancellation_details.reason == speechsdk.CancellationReason.Error:
        print("Error details: {}".format(cancellation_details.error_details))
        print("Did you set the speech resource key and region values?")

استخدم التعرف المستمر

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

في المقابل، يمكنك استخدام التعرف المستمر عندما تريد التحكم في وقت التوقف عن التعرف. يتطلب منك الاتصال بـ EventSignal للحصول على نتائج التعرف. لإيقاف التعرف، يجب عليك استدعاء stop_continuous_recognition () أو stop_continuous_recognition (). وفيما يلي مثال على كيفية إجراء التعرف المستمر على ملف إدخال الصوت.

ابدأ بتعريف الإدخال وتهيئة SpeechRecognizer:

audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

بعد ذلك، قم بإنشاء متغير لإدارة حالة التعرف على الكلام. قم بتعيين المتغير إلى False لأنه في بداية التعرف، يمكنك افتراض أنه لم ينته بأمان:

done = False

الآن، قم بإنشاء رد اتصال لإيقاف التعرف المستمر عند استلام evt. ضع هذه النقاط في الاعتبار:

  • عند استلام evt، تتم طباعة الرسالة evt.
  • بعد استلام evt، يتم استدعاء stop_continuous_recognition () لإيقاف التعرف.
  • يتم تغيير حالة التعرف إلى True .
def stop_cb(evt):
    print('CLOSING on {}'.format(evt))
    speech_recognizer.stop_continuous_recognition()
    nonlocal done
    done = True

يوضح نموذج التعليمة البرمجية التالية كيفية توصيل عمليات الاسترجاعات بالأحداث المرسلة من SpeechRecognizer. الأحداث هي:

  • recognizing: إشارة للأحداث التي تحتوي على نتائج التعرف الوسيطة.
  • recognized: إشارة للأحداث التي تحتوي على نتائج التعرف النهائية، والتي تشير إلى محاولة التعرف الناجحة.
  • session_started: إشارة للأحداث التي تشير إلى بدء جلسة التعرف (عملية).
  • session_stopped: إشارة للأحداث التي تشير إلى نهاية جلسة التعرف (عملية).
  • canceled: إشارة للأحداث التي تحتوي على نتائج التعرف الملغاة. تشير هذه النتائج إلى محاولة التعرف التي تم إلغاؤها نتيجة لطلب إلغاء مباشر. بدلاً من ذلك، فإنها تشير إلى فشل في النقل أو البروتوكول.
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))

speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)

مع إعداد كل شيء، يمكنك استدعاء start_continuous_recognition ():

speech_recognizer.start_continuous_recognition()
while not done:
    time.sleep(.5)

قم بتغيير لغة المصدر

من المهام الشائعة للتعرف على الكلام تحديد لغة الإدخال (أو المصدر). يوضح المثال التالي كيفية تغيير لغة الإدخال إلى الألمانية. في تعليمتك البرمجية، ابحث عن مثيل SpeechConfig وأضف هذا السطر أسفله مباشرةً:

speech_config.speech_recognition_language="de-DE"

speech_recognition_language هي معلمة تعامل السلسلة كوسيطة. لمزيد من المعلومات، راجع قائمة لغة الكلام المعتمدة إلى لغة نصية.

تعريف اللغة

يمكنك استخدام تعريف اللغة مع التعرف على الكلام إلى النص عندما تحتاج إلى تحديد اللغة في مصدر صوت ثم نسخها إلى نص.

للحصول على نموذج تعليمة برمجية كامل، راجع تعريف اللغة.

استخدم نقطة نهاية مخصصة

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

speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

تشغيل حاوية واستخدامها

توفر حاويات الكلام واجهات برمجة تطبيقات نقطة نهاية الاستعلام المستندة إلى websocket التي يتم الوصول إليها من خلال Speech SDK و Speech CLI. بشكل افتراضي، يستخدم Speech SDK و Speech CLI خدمة Speech العامة. لاستخدام الحاوية، تحتاج إلى تغيير أسلوب التهيئة. استخدم عنوان URL لمضيف الحاوية بدلا من المفتاح والمنطقة.

لمزيد من المعلومات حول الحاويات، راجع استضافة عناوين URL في تثبيت حاويات الكلام وتشغيلها باستخدام Docker.

يشير | Speech to text REST API إلى Speech to text REST API for short audio reference | Additional Samples on GitHub

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

تحويل الكلام إلى نص

في موجه الأوامر، أدخل الأمر التالي. أدخل القيم التالية في الأمر:

  • مفتاح اشتراكك في خدمة Speech.
  • منطقة خدمة Speech الخاصة بك.
  • مسار إدخال ملفات الصوت. يمكنك إنشاء ملفات صوتية باستخدام نص إلى كلام.
curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'

يجب أن تتلقى استجابة مع نص JSON مثل المثال التالي:

{
    "RecognitionStatus": "Success",
    "DisplayText": "My voice is my passport, verify me.",
    "Offset": 6600000,
    "Duration": 32100000
}

لمزيد من المعلومات، راجع مرجع Speech to text REST API.

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

التعرّف على الكلام من الميكروفون

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

الآن أنت جاهز لتشغيل Speech CLI للتعرف على الكلام من الميكروفون. من سطر الأوامر، قم بالتغيير إلى الدليل الذي يحتوي على الملف الثنائي Speech CLI. ثم شغَّل الأمر التالي:

spx recognize --microphone

إشعار

يتم Speech CLI باللغة الإنجليزية بشكل افتراضي. يمكنك اختيار لغة مختلفة من جدول الكلام إلى النص. على سبيل المثال، أضف --source de-DE للتعرف على النصوص الألمانية.

تحدث في الميكروفون، ويمكنك مشاهدة كتابة كلماتك في نص في الوقت الفعلي. يتوقف Speech CLI بعد فترة من الصمت، أو عند تحديد Ctrl+C.

التعرف على الكلام من ملف

ويمكن لـ Speech CLI التعرف على الكلام فيما يخص العديد من تنسيقات الملفات واللغات الطبيعية. في هذا المثال، يمكنك استخدام أي ملف .wav (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وجهاز PCM أحادي) يحتوي على الكلام باللغة الإنجليزية. أو إذا كنت تريد عينة سريعة، فنزل ملف whatstheweatherlike.wav ، وانسخه إلى نفس الدليل مثل الملف الثنائي Speech CLI.

استخدم الأمر التالي لتشغيل Speech CLI للتعرف على الكلام الموجود في الملف الصوتي:

spx recognize --file whatstheweatherlike.wav

إشعار

يتم Speech CLI باللغة الإنجليزية بشكل افتراضي. يمكنك اختيار لغة مختلفة من جدول الكلام إلى النص. على سبيل المثال، أضف --source de-DE للتعرف على النصوص الألمانية.

يُظهر Speech CLI نسخاً نصية للكلام على الشاشة.

تشغيل حاوية واستخدامها

توفر حاويات الكلام واجهات برمجة تطبيقات نقطة نهاية الاستعلام المستندة إلى websocket التي يتم الوصول إليها من خلال Speech SDK و Speech CLI. بشكل افتراضي، يستخدم Speech SDK و Speech CLI خدمة Speech العامة. لاستخدام الحاوية، تحتاج إلى تغيير أسلوب التهيئة. استخدم عنوان URL لمضيف الحاوية بدلا من المفتاح والمنطقة.

لمزيد من المعلومات حول الحاويات، راجع استضافة عناوين URL في تثبيت حاويات الكلام وتشغيلها باستخدام Docker.

الخطوات التالية