كيفية التعرف على النوايا من خلال مطابقة نمط اللغة البسيطة

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

في هذا الدليل، يمكنك استخدام Speech SDK لتطوير تطبيق وحدة تحكم C++ يستمد المقاصد من أقوال المستخدم من خلال ميكروفون جهازك. ستتعلم كيفية:

  • إنشاء مشروع Visual Studio يشير إلى حزمة NuGet الخاصة ب Speech SDK
  • إنشاء تكوين كلام والحصول على أداة التعرف على النية
  • إضافة المقاصد والأنماط عبر واجهة برمجة تطبيقات Speech SDK
  • التعرف على الكلام من الميكروفون
  • استخدام التعرف المستمر غير المتزامن القائم على الأحداث

متى تستخدم مطابقة النمط

استخدم نموذج التعليمات البرمجية هذا إذا:

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

لمزيد من المعلومات، راجع نظرة عامة على مطابقة النمط.

المتطلبات الأساسية

تأكد من أن لديك العناصر التالية قبل البدء في هذا الدليل:

الكلام والأنماط البسيطة

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

النمط هو عبارة تتضمن كيانا في مكان ما داخله. يتم تعريف الكيان عن طريق التفاف كلمة بين قوسين مجعدين. يعرف هذا المثال كيانا له معرف "floorName"، وهو حساس لحالة الأحرف:

    Take me to the {floorName}

سيتم تجاهل جميع الأحرف الخاصة الأخرى وعلامات الترقيم.

ستتم إضافة المقاصد باستخدام المكالمات إلى واجهة برمجة تطبيقات IntentRecognizer-AddIntent>() API.

إنشاء مشروع كلام في Visual Studio

لإنشاء مشروع Visual Studio لتطوير سطح المكتب C ++ ، تحتاج إلى:

  • إعداد خيارات تطوير Visual Studio.
  • إنشاء المشروع.
  • حدد البنية المستهدفة.
  • تثبيت Speech SDK.

إعداد خيارات تطوير Visual Studio

للبدء، تأكد من إعدادك بشكل صحيح في Visual Studio لتطوير سطح المكتب C ++:

  1. افتح Visual Studio 2019 لعرض نافذة البدء.

  2. حدد Continue without code للانتقال إلى Visual Studio IDE.

    Screenshot that shows the Visual Studio 2019 start window.

  3. من شريط القوائم Visual Studio، حدد ToolsGet>Tools and Features لفتح Visual Studio Installer وعرض مربع الحوار تعديل.

  4. في علامة التبويب أحمال العمل، ضمن Windows، ابحث عن تطوير سطح المكتب باستخدام أحمال عمل C++. إذا لم تكن خانة الاختيار الموجودة بجوار workload محددة بالفعل، فحددها.

    Screenshot that shows the Workloads tab of the Modifying dialog for Visual Studio Installer.

  5. في علامة التبويب مكونات فردية ، ابحث عن خانة الاختيار إدارة حزم NuGet . إذا لم تكن خانة الاختيار محددة بالفعل، فحددها.

  6. في الزاوية، حدد الزر المسمى إما إغلاق أو تعديل. يختلف اسم الزر بناء على ما إذا كنت قد حددت أي ميزات للتثبيت أم لا.

    إذا قمت بتحديد تعديل، يبدأ التثبيت. قد تستغرق العملية بعض الوقت.

  7. أغلق Visual Studio Installer.

إنشاء المشروع

بعد ذلك ، قم بإنشاء مشروعك وحدد البنية المستهدفة:

  1. في شريط قوائم Visual Studio، قم باختيار File>Project>New لعرض نافذة إنشاء مشروع جديد.

  2. ابحث عن تطبيق Console وحدده. تأكد من تحديد إصدار C++ من نوع المشروع هذا، بدلا من C# أو Visual Basic.

  3. حدد "Next".

    Screenshot of selections for creating a console app project in Visual Studio.

  4. في مربع الحوار تكوين مشروعك الجديد، في اسم Project، أدخل helloworld.

  5. في الموقع، انتقل إلى المجلد الذي تريد حفظ مشروعك فيه وحدده (أو إنشاءه)، ثم حدد إنشاء.

    Screenshot of selections for configuring a new project in Visual Studio.

  6. حدد بنية النظام الأساسي المستهدف. في شريط أدوات Visual Studio، ابحث عن المربع المنسدل Solution Platforms. إذا كنت لا تراه، فحدد ViewToolbarsStandard>> لعرض شريط الأدوات الذي يحتوي على الأنظمة الأساسية للحلول.

    إذا كنت تستخدم Windows 64 بت، فحدد x64 في المربع المنسدل. يمكن لنظام Windows 64 بت أيضاً تشغيل تطبيقات 32 بت، لذا يمكنك اختيار x86 إذا كنت تفضل ذلك.

قم بتثبيت Speech SDK

وأخيرا، قم بتثبيت حزمة NuGet الخاصة ب Speech SDK والرجوع إلى Speech SDK في مشروعك:

  1. في مستكشف الحلول، انقر بزر الماوس الأيمن فوق الحل الخاص بك، ثم حدد إدارة حزم NuGet للحل للانتقال إلى نافذة NuGet - Solution.

  2. حدد Browse.

  3. في مصدر الحزمة، حدد nuget.org.

    Screenshot that shows the Manage NuGet Packages for Solution dialog, with the Browse tab, search box, and package source highlighted.

  4. في المربع بحث، أدخِل Microsoft.CognitiveServices.Speech. اختر هذه الحزمة بعد ظهورها في نتائج البحث.

  5. في جزء حالة الحزمة بجوار نتائج البحث، حدد مشروع helloworld الخاص بك.

  6. حدد ⁧⁩⁩Install⁦⁩.

    Screenshot that shows the Microsoft.CognitiveServices.Speech package selected, with the project and the Install button highlighted.

  7. في مربع الحوار معاينة التغييرات ، حدد موافق.

  8. في مربع الحوار قبول الترخيص، قم بعرض الترخيص ، ثم حدد أقبل. يبدأ تثبيت الحزمة. عند اكتمال التثبيت، يعرض جزء الإخراج رسالة مشابهة للنص التالي: Successfully installed 'Microsoft.CognitiveServices.Speech 1.15.0' to helloworld.

افتح المشروع في Visual Studio

بعد ذلك، افتح مشروعك في Visual Studio.

  1. أطلق Visual Studio 2019.
  2. حمل مشروعك وافتَح helloworld.cpp.

ابدأ ببعض التعليمات البرمجية المتداولة

دعنا نضيف بعض التعليمات البرمجية التي تعمل كبنية لمشروعنا.

    using System;
    using System.Threading.Tasks;
    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Intent;
    
    namespace helloworld
    {
        class Program
        {
            static void Main(string[] args)
            {
                IntentPatternMatchingWithMicrophoneAsync().Wait();
            }
    
            private static async Task IntentPatternMatchingWithMicrophoneAsync()
            {
                var config = SpeechConfig.FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
            }
        }
    }

إنشاء تهيئة الصوت

قبل أن تتمكن من تهيئة كائن IntentRecognizer ، تحتاج إلى إنشاء تكوين يستخدم المفتاح والموقع لمورد التنبؤ بالخدمات المعرفية.

  • استبدل "YOUR_SUBSCRIPTION_KEY" بمفتاح التنبؤ بالخدمات المعرفية.
  • استبدل "YOUR_SUBSCRIPTION_REGION" بمنطقة موارد الخدمات المعرفية.

يستخدم هذا النموذج أسلوبFromSubscription()لإنشاء SpeechConfig. للحصول على قائمة كاملة بالأساليب المتوفرة، انظر فئة SpeechConfig.

تهيئة المتعرف على الأهداف

الآن إنشاء IntentRecognizerملف . إدراج هذا الرمز مباشرةً أسفل تكوين الكلام.

using (var intentRecognizer = new IntentRecognizer(config))
{
    
}

إضافة بعض المقاصد

تحتاج إلى ربط بعض الأنماط IntentRecognizer مع عن طريق الاتصال AddIntent(). سنضيف 2 نوايا بنفس المعرف لتغيير الطوابق ، ونية أخرى مع معرف منفصل لفتح وإغلاق الأبواب. أدخل هذا الرمز داخل الكتلة using :

    intentRecognizer.AddIntent("Take me to floor {floorName}.", "ChangeFloors");
    intentRecognizer.AddIntent("Go to floor {floorName}.", "ChangeFloors");
    intentRecognizer.AddIntent("{action} the door.", "OpenCloseDoor");

ملاحظة

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

التعرف على الهدف

من الكائنIntentRecognizer، ستطلب طريقةRecognizeOnceAsync(). تطلب هذه الطريقة من خدمة "الكلام" التعرف على الكلام في عبارة واحدة، والتوقف عن التعرف على الكلام بمجرد تحديد العبارة. من أجل التبسيط، سننتظر حتى يكتمل.

أدخل هذا الرمز أسفل نواياك:

    Console.WriteLine("Say something...");

    var result = await recognizer.RecognizeOnceAsync();

عرض نتائج التعرف (أو الأخطاء)

عندما يتم إرجاع نتيجة التعرف بواسطة خدمة الكلام، سنقوم بطباعة النتيجة.

أدخِل هذا الرمز أسفل var result = await recognizer.RecognizeOnceAsync();:

switch (result.Reason)
{
case ResultReason.RecognizedSpeech:
        Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
        Console.WriteLine($"    Intent not recognized.");
        break;
case ResultReason.RecognizedIntent:
    Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
    Console.WriteLine($"       Intent Id= {result.IntentId}.");
    var entities = result.Entities;
    if (entities.TryGetValue("floorName", out string floorName))
    {
        Console.WriteLine($"       FloorName= {floorName}");
    }

    if (entities.TryGetValue("action", out string floorName))
    {
        Console.WriteLine($"       Action= {floorName}");
    }

    break;
case ResultReason.NoMatch:
{
    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
    var noMatch = NoMatchDetails.FromResult(result);
    switch (noMatch->Reason)
    {
    case NoMatchReason.NotRecognized:
        Console.WriteLine($"NOMATCH: Speech was detected, but not recognized.");
        break;
    case NoMatchReason.InitialSilenceTimeout:
        Console.WriteLine($"NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech.");
        break;
    case NoMatchReason.InitialBabbleTimeout:
        Console.WriteLine($"NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech.");
        break;
    case NoMatchReason.KeywordNotRecognized:
        Console.WriteLine($"NOMATCH: Keyword not recognized");
        break;
    }
    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?");
    }
}
default:
    break;
}

تحقَّق من بريدك الإلكتروني

في هذه النقطة، يجب أن تظهر التعليمات البرمجية كذلك:

    using System;
    using System.Threading.Tasks;
    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Intent;
    
    namespace helloworld
    {
        class Program
        {
            static void Main(string[] args)
            {
                IntentPatternMatchingWithMicrophoneAsync().Wait();
            }
    
            private static async Task IntentPatternMatchingWithMicrophoneAsync()
            {
                var config = SpeechConfig.FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
                using (var intentRecognizer = new IntentRecognizer(config))
                {
                    intentRecognizer.AddIntent("Take me to floor {floorName}.", "ChangeFloors");
                    intentRecognizer.AddIntent("Go to floor {floorName}.", "ChangeFloors");
                    intentRecognizer.AddIntent("{action} the door.", "OpenCloseDoor");
                    
                    Console.WriteLine("Say something...");

                    var result = await recognizer.RecognizeOnceAsync();
                    
                    switch (result.Reason)
                    {
                    case ResultReason.RecognizedSpeech:
                            Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
                            Console.WriteLine($"    Intent not recognized.");
                            break;
                    case ResultReason.RecognizedIntent:
                        Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
                        Console.WriteLine($"       Intent Id= {result.IntentId}.");
                        var entities = result.Entities;
                        if (entities.TryGetValue("floorName", out string floorName))
                        {
                            Console.WriteLine($"       FloorName= {floorName}");
                        }

                        if (entities.TryGetValue("action", out string floorName))
                        {
                            Console.WriteLine($"       Action= {floorName}");
                        }

                        break;
                    case ResultReason.NoMatch:
                    {
                        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                        var noMatch = NoMatchDetails.FromResult(result);
                        switch (noMatch->Reason)
                        {
                        case NoMatchReason.NotRecognized:
                            Console.WriteLine($"NOMATCH: Speech was detected, but not recognized.");
                            break;
                        case NoMatchReason.InitialSilenceTimeout:
                            Console.WriteLine($"NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech.");
                            break;
                        case NoMatchReason.InitialBabbleTimeout:
                            Console.WriteLine($"NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech.");
                            break;
                        case NoMatchReason.KeywordNotRecognized:
                            Console.WriteLine($"NOMATCH: Keyword not recognized");
                            break;
                        }
                        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?");
                        }
                    }
                    default:
                        break;
                    }
                }
            }
        }
    }

إنشاء تطبيقك وتشغيله

الآن أنت مستعد لإنشاء التطبيق واختبار التعرف على الكلام باستخدام خدمة التعرف على الكلام.

  1. ترجمة التعليمات البرمجية - من شريط قوائم Visual Studio، اختر إنشاء>إنشاء حل.
  2. ابدأ تشغيل تطبيقك - من شريط القوائم، اخترتصحيح الأخطاء>بدء التصحيح أو اضغط F5.
  3. بدء التعرف - سوف يطالبك بقول شيء ما. اللغة الافتراضية هي الإنجليزية. يُرسل الكلام إلى خدمة التعرف على الكلام ونسخه كنص وتقديمه في وحدة التحكم.

على سبيل المثال ، إذا قلت "خذني إلى الطابق 7" ، فيجب أن يكون هذا هو الإخراج:

Say something ...
RECOGNIZED: Text= Take me to floor 7.
  Intent Id= ChangeFloors
  FloorName= 7

إنشاء مشروع كلام في Visual Studio

لإنشاء مشروع Visual Studio لتطوير سطح المكتب C ++ ، تحتاج إلى:

  • إعداد خيارات تطوير Visual Studio.
  • إنشاء المشروع.
  • حدد البنية المستهدفة.
  • تثبيت Speech SDK.

إعداد خيارات تطوير Visual Studio

للبدء، تأكد من إعدادك بشكل صحيح في Visual Studio لتطوير سطح المكتب C ++:

  1. افتح Visual Studio 2019 لعرض نافذة البدء.

  2. حدد Continue without code للانتقال إلى Visual Studio IDE.

    Screenshot that shows the Visual Studio 2019 start window.

  3. من شريط القوائم Visual Studio، حدد ToolsGet>Tools and Features لفتح Visual Studio Installer وعرض مربع الحوار تعديل.

  4. في علامة التبويب أحمال العمل، ضمن Windows، ابحث عن تطوير سطح المكتب باستخدام أحمال عمل C++. إذا لم تكن خانة الاختيار الموجودة بجوار workload محددة بالفعل، فحددها.

    Screenshot that shows the Workloads tab of the Modifying dialog for Visual Studio Installer.

  5. في علامة التبويب مكونات فردية ، ابحث عن خانة الاختيار إدارة حزم NuGet . إذا لم تكن خانة الاختيار محددة بالفعل، فحددها.

  6. في الزاوية، حدد الزر المسمى إما إغلاق أو تعديل. يختلف اسم الزر بناء على ما إذا كنت قد حددت أي ميزات للتثبيت أم لا.

    إذا قمت بتحديد تعديل، يبدأ التثبيت. قد تستغرق العملية بعض الوقت.

  7. أغلق Visual Studio Installer.

إنشاء المشروع

بعد ذلك ، قم بإنشاء مشروعك وحدد البنية المستهدفة:

  1. في شريط قوائم Visual Studio، قم باختيار File>Project>New لعرض نافذة إنشاء مشروع جديد.

  2. ابحث عن تطبيق Console وحدده. تأكد من تحديد إصدار C++ من نوع المشروع هذا، بدلا من C# أو Visual Basic.

  3. حدد "Next".

    Screenshot of selections for creating a console app project in Visual Studio.

  4. في مربع الحوار تكوين مشروعك الجديد، في اسم Project، أدخل helloworld.

  5. في الموقع، انتقل إلى المجلد الذي تريد حفظ مشروعك فيه وحدده (أو إنشاءه)، ثم حدد إنشاء.

    Screenshot of selections for configuring a new project in Visual Studio.

  6. حدد بنية النظام الأساسي المستهدف. في شريط أدوات Visual Studio، ابحث عن المربع المنسدل Solution Platforms. إذا كنت لا تراه، فحدد ViewToolbarsStandard>> لعرض شريط الأدوات الذي يحتوي على الأنظمة الأساسية للحلول.

    إذا كنت تستخدم Windows 64 بت، فحدد x64 في المربع المنسدل. يمكن لنظام Windows 64 بت أيضاً تشغيل تطبيقات 32 بت، لذا يمكنك اختيار x86 إذا كنت تفضل ذلك.

قم بتثبيت Speech SDK

وأخيرا، قم بتثبيت حزمة NuGet الخاصة ب Speech SDK والرجوع إلى Speech SDK في مشروعك:

  1. في مستكشف الحلول، انقر بزر الماوس الأيمن فوق الحل الخاص بك، ثم حدد إدارة حزم NuGet للحل للانتقال إلى نافذة NuGet - Solution.

  2. حدد Browse.

  3. في مصدر الحزمة، حدد nuget.org.

    Screenshot that shows the Manage NuGet Packages for Solution dialog, with the Browse tab, search box, and package source highlighted.

  4. في المربع بحث، أدخِل Microsoft.CognitiveServices.Speech. اختر هذه الحزمة بعد ظهورها في نتائج البحث.

  5. في جزء حالة الحزمة بجوار نتائج البحث، حدد مشروع helloworld الخاص بك.

  6. حدد ⁧⁩⁩Install⁦⁩.

    Screenshot that shows the Microsoft.CognitiveServices.Speech package selected, with the project and the Install button highlighted.

  7. في مربع الحوار معاينة التغييرات ، حدد موافق.

  8. في مربع الحوار قبول الترخيص، قم بعرض الترخيص ، ثم حدد أقبل. يبدأ تثبيت الحزمة. عند اكتمال التثبيت، يعرض جزء الإخراج رسالة مشابهة للنص التالي: Successfully installed 'Microsoft.CognitiveServices.Speech 1.15.0' to helloworld.

افتح المشروع في Visual Studio

بعد ذلك، افتح مشروعك في Visual Studio.

  1. أطلق Visual Studio 2019.
  2. حمل مشروعك وافتَح helloworld.cpp.

ابدأ ببعض التعليمات البرمجية المتداولة

دعنا نضيف بعض التعليمات البرمجية التي تعمل كبنية لمشروعنا.

    #include <iostream>
    #include <speechapi_cxx.h>

    using namespace Microsoft::CognitiveServices::Speech;
    using namespace Microsoft::CognitiveServices::Speech::Intent;

    int main()
    {
        std::cout << "Hello World!\n";

        auto config = SpeechConfig::FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
    }

إنشاء تهيئة الصوت

قبل أن تتمكن من تهيئة كائن IntentRecognizer ، تحتاج إلى إنشاء تكوين يستخدم المفتاح والموقع لمورد التنبؤ بالخدمات المعرفية.

  • استبدل "YOUR_SUBSCRIPTION_KEY" بمفتاح التنبؤ بالخدمات المعرفية.
  • استبدل "YOUR_SUBSCRIPTION_REGION" بمنطقة موارد الخدمات المعرفية.

يستخدم هذا النموذج أسلوبFromSubscription()لإنشاء SpeechConfig. للحصول على قائمة كاملة بالأساليب المتوفرة، انظر فئة SpeechConfig.

تهيئة المتعرف على الأهداف

الآن إنشاء IntentRecognizerملف . إدراج هذا الرمز مباشرةً أسفل تكوين الكلام.

    auto intentRecognizer = IntentRecognizer::FromConfig(config);

إضافة بعض المقاصد

تحتاج إلى ربط بعض الأنماط IntentRecognizer مع عن طريق الاتصال AddIntent(). سنضيف 2 نوايا بنفس المعرف لتغيير الطوابق ، ونية أخرى مع معرف منفصل لفتح وإغلاق الأبواب.

    intentRecognizer->AddIntent("Take me to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("Go to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("{action} the door.", "OpenCloseDoor");

ملاحظة

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

التعرف على الهدف

من الكائنIntentRecognizer، ستطلب طريقةRecognizeOnceAsync(). تطلب هذه الطريقة من خدمة "الكلام" التعرف على الكلام في عبارة واحدة، والتوقف عن التعرف على الكلام بمجرد تحديد العبارة. من أجل التبسيط، سننتظر حتى يكتمل.

أدخل هذا الرمز أسفل نواياك:

    std::cout << "Say something ..." << std::endl;
    auto result = intentRecognizer->RecognizeOnceAsync().get();

عرض نتائج التعرف (أو الأخطاء)

عندما يتم إرجاع نتيجة التعرف بواسطة خدمة الكلام، سنقوم بطباعة النتيجة.

أدخِل هذا الرمز أسفل auto result = intentRecognizer->RecognizeOnceAsync().get();:

switch (result->Reason)
{
case ResultReason::RecognizedSpeech:
        std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
        std::cout << "NO INTENT RECOGNIZED!" << std::endl;
        break;
case ResultReason::RecognizedIntent:
    std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
    std::cout << "  Intent Id = " << result->IntentId.c_str() << std::endl;
    auto entities = result->GetEntities();
    if (entities.find("floorName") != entities.end())
    {
        std::cout << "  Floor name: = " << entities["floorName"].c_str() << std::endl;
    }

    if (entities.find("action") != entities.end())
    {
        std::cout << "  Action: = " << entities["action"].c_str() << std::endl;
    }

    break;
case ResultReason::NoMatch:
{
    auto noMatch = NoMatchDetails::FromResult(result);
    switch (noMatch->Reason)
    {
    case NoMatchReason::NotRecognized:
        std::cout << "NOMATCH: Speech was detected, but not recognized." << std::endl;
        break;
    case NoMatchReason::InitialSilenceTimeout:
        std::cout << "NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech." << std::endl;
        break;
    case NoMatchReason::InitialBabbleTimeout:
        std::cout << "NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech." << std::endl;
        break;
    case NoMatchReason::KeywordNotRecognized:
        std::cout << "NOMATCH: Keyword not recognized" << std::endl;
        break;
    }
    break;
}
case ResultReason::Canceled:
{
    auto cancellation = CancellationDetails::FromResult(result);

    if (!cancellation->ErrorDetails.empty())
    {
        std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails.c_str() << std::endl;
        std::cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
    }
}
default:
    break;
}

تحقَّق من بريدك الإلكتروني

في هذه النقطة، يجب أن تظهر التعليمات البرمجية كذلك:

#include <iostream>
#include <speechapi_cxx.h>

using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Intent;

int main()
{
    auto config = SpeechConfig::FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
    auto intentRecognizer = IntentRecognizer::FromConfig(config);

    intentRecognizer->AddIntent("Take me to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("Go to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("{action} the door.", "OpenCloseDoor");

    std::cout << "Say something ..." << std::endl;

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

    switch (result->Reason)
    {
    case ResultReason::RecognizedSpeech:
        std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
        std::cout << "NO INTENT RECOGNIZED!" << std::endl;
        break;
    case ResultReason::RecognizedIntent:
        std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
        std::cout << "  Intent Id = " << result->IntentId.c_str() << std::endl;
        auto entities = result->GetEntities();
        if (entities.find("floorName") != entities.end())
        {
            std::cout << "  Floor name: = " << entities["floorName"].c_str() << std::endl;
        }

        if (entities.find("action") != entities.end())
        {
            std::cout << "  Action: = " << entities["action"].c_str() << std::endl;
        }

        break;
    case ResultReason::NoMatch:
    {
        auto noMatch = NoMatchDetails::FromResult(result);
        switch (noMatch->Reason)
        {
        case NoMatchReason::NotRecognized:
            std::cout << "NOMATCH: Speech was detected, but not recognized." << std::endl;
            break;
        case NoMatchReason::InitialSilenceTimeout:
            std::cout << "NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech." << std::endl;
            break;
        case NoMatchReason::InitialBabbleTimeout:
            std::cout << "NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech." << std::endl;
            break;
        case NoMatchReason::KeywordNotRecognized:
            std::cout << "NOMATCH: Keyword not recognized." << std::endl;
            break;
        }
        break;
    }
    case ResultReason::Canceled:
    {
        auto cancellation = CancellationDetails::FromResult(result);

        if (!cancellation->ErrorDetails.empty())
        {
            std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails.c_str() << std::endl;
            std::cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
        }
    }
    default:
        break;
    }
}

إنشاء تطبيقك وتشغيله

الآن أنت مستعد لإنشاء التطبيق واختبار التعرف على الكلام باستخدام خدمة التعرف على الكلام.

  1. ترجمة التعليمات البرمجية - من شريط قوائم Visual Studio، اختر إنشاء>إنشاء حل.
  2. ابدأ تشغيل تطبيقك - من شريط القوائم، اخترتصحيح الأخطاء>بدء التصحيح أو اضغط F5.
  3. بدء التعرف - سوف يطالبك بقول شيء ما. اللغة الافتراضية هي الإنجليزية. يُرسل الكلام إلى خدمة التعرف على الكلام ونسخه كنص وتقديمه في وحدة التحكم.

على سبيل المثال ، إذا قلت "خذني إلى الطابق 7" ، فيجب أن يكون هذا هو الإخراج:

Say something ...
RECOGNIZED: Text = Take me to floor 7.
  Intent Id = ChangeFloors
  Floor name: = 7

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