سلسلة net. للمحترفين تمييز الكلام تلقائيًا speech recognition في dot Net


رضوى العربي

يُوفِّر إطار عمل ‎.NET الصنف SpeechRecognitionEngine بفضاء الاسم System.Speech.Recognition لتَميِيز الكلام تلقائيًا.

يُدعِّم مُمَيِّز الكلام -من النوع SpeechRecognitionEngine- عِدة أحَدَاث (events) تُثار تلقائيًا عند حُدوث ظرف معين. يُمكِن لمُعالِجات الأحَدَاث (event handlers) التَسجيل بتلك الأحداث، مما يَسمَح بإجراء العمليات المطلوبة بشكل غَيْر مُتزامِن (asynchronous).

يُعدّ الحَدَث SpeechRecognized أحد أهم أحداث النوع SpeechRecognitionEngine، والذي يُثَار عندما يَستقبِل مُمَيِّز الكلام دَخْلًا يَتوَافق مع إحدى قواعده المُفعَّلة. تُخصَّص تلك القواعد من خلال كائن من النوع Grammar يُمرَّر للتابع LoadGrammar لوضع قيود على عملية تَميِيز الكلام.

تَعرِض الشيفرة بالأسفل طريقة اِستخدَام النوع SpeechRecognitionEngine لبناء مُعالِج للحَدَث SpeechRecognized يقوم بإرسال الكلام المُمَيَّز إلى مَجْرى الخَرْج.

تنشئة مُمَيِّز الكلام كالتالي:

SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine();

التَسجيل بالحَدث SpeechRecognized كالتالي:

recognitionEngine.SpeechRecognized += delegate(object sender, SpeechRecognizedEventArgs e)
{
    Console.WriteLine("You said: {0}", e.Result.Text);
};

بدء تشغيل المُمَيِّز كالتالي:

recognitionEngine.SetInputToDefaultAudioDevice();
recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);

تمييز مقيد بمجموعة جمل باستخدام GrammarBuilder

SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine();

GrammarBuilder builder = new GrammarBuilder();
builder.Append(new Choices("I am", "You are", "He is", "She is", "We are", "They are"));
builder.Append(new Choices("friendly", "unfriendly"));

recognitionEngine.LoadGrammar(new Grammar(builder));

recognitionEngine.SpeechRecognized += delegate(object sender, SpeechRecognizedEventArgs e)
{
    Console.WriteLine("You said: {0}", e.Result.Text);
};

recognitionEngine.SetInputToDefaultAudioDevice();
recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);

تمييز حر بدون قيود (free text) باستخدام DictationGrammar

SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine();

recognitionEngine.LoadGrammar(new DictationGrammar());

recognitionEngine.SpeechRecognized += delegate(object sender, SpeechRecognizedEventArgs e)
{
    Console.WriteLine("You said: {0}", e.Result.Text);
};

recognitionEngine.SetInputToDefaultAudioDevice();
recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);

ملاحظات:

  • مُعامِلات التابع LoadGrammar:
    • grammar: من النوع Grammar يُشير إلى القواعد التي يَنبغي تَحميلها. مثلًا، يُستخدَم كائن من النوع DictationGrammar -المُشتَق من النوع Grammar- لتمييز حُر دون قيود.
  • مُعامِلات باني النوع Grammar:
    • builder: من النوع GrammarBuilder.
  • مُعامِلات التابع GrammarBuilder.Append:
    • choices: من النوع Choices. يُلحِق هذا التابع مُكَوِّنًا جديد بتَسَلسُل القواعد (grammar sequence)، مع السَماح بعدة بدائل (choices) ضِمْن ذلك المُكَوِّن. يعني ذلك أنه عند اِستقبَال دَخْل صوتي من المُستخدِم، يُمكِن للمُمَيِّز اتباع عدة بدائل من القواعد.
  • مُعامِلات باني النوع Choices:
    • choices: مصفوفة من البدائل.
  • مُعامِلات التابع RecognizeAsync:
    • mode: من النوع تعداد RecognizeMode، لتحديد عدد عمليات التَميِيز المُمكن إجرائها إِمّا Single أو Multiple

ترجمة -وبتصرف- للفصل SpeechRecognitionEngine class to recognize speech من كتاب ‎.NET Framework Notes for Professionals



1 شخص أعجب بهذا


تفاعل الأعضاء


اقتباس

هل توجد دوال تعرف علي الكلام في  ++C, او Java

 

شارك هذا التعليق


رابط هذا التعليق
شارك على الشبكات الإجتماعية


يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن