كيف تبني برنامج يسمع ما يقوله المستخدم و ينفذ أوامره
يُوفِّر إطار عمل .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: من النوع
- مُعامِلات باني النوع
Grammar
:- builder: من النوع
GrammarBuilder
.
- builder: من النوع
- مُعامِلات التابع
GrammarBuilder.Append
:- choices: من النوع
Choices
. يُلحِق هذا التابع مُكَوِّنًا جديد بتَسَلسُل القواعد (grammar sequence)، مع السَماح بعدة بدائل (choices) ضِمْن ذلك المُكَوِّن. يعني ذلك أنه عند اِستقبَال دَخْل صوتي من المُستخدِم، يُمكِن للمُمَيِّز اتباع عدة بدائل من القواعد.
- choices: من النوع
- مُعامِلات باني النوع
Choices
:- choices: مصفوفة من البدائل.
- مُعامِلات التابع
RecognizeAsync
:- mode: من النوع تعداد
RecognizeMode
، لتحديد عدد عمليات التَميِيز المُمكن إجرائها إِمّاSingle
أوMultiple
- mode: من النوع تعداد
ترجمة -وبتصرف- للفصل SpeechRecognitionEngine class to recognize speech من كتاب .NET Framework Notes for Professionals
ليست هناك تعليقات: