الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

C# Speech Recognition

بدأه wazzz في 30 نوفمبر 2010 · 7 رد · 4,810 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

لقد قدمت بيئة .net العديد من المكتبات الغنية لتوفير حاجات المبرمجين كافة . سنتكلم اليوم عن كيفية استخدام تقنية التعرف على الصوت في تطبيق C# الخاص بك .

المتطلبات لهذا الدرس :

1-نحتاج بداية الى مايكروفون

2-نظام تشغيل ويندوز فيستا ومابعد حصراً

3-visual studio

4-مكتبة دوت نت 3

الاساس النظري لتقنية التعرف على الصوت :

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

ان مبدا الشبكات العصبية هي بصراحة مبدا تجريبي اكثر من كونه علم يعتمد على قوانين مطلقة فالى الآن مازال هذا العلم في تطور ولكنه يعاني من عدم قدرته على حل العديد من المشاكل الكبيرة

يقوم مبدا الشبكة العصبية الخاصة بالتعرف على الصوت على انشاء شبكة من العصبونات وتدريبها على صوت المستخدم والتدريب عملية هامة وحيوية

ولفهم آلية التعرف على الصوت

نعتبر ان هناك شبكة black box لها دخلين وخرج وحيد

* الدخل الاول هو الصوت الافتراضي بنطق سليم وفق العديد من اللهجات ويدعى بال target

* بينما الدخل الثاني هو دخل المستخدم ويعاني هذا الدخل من بعض الاخطاء احيانا بسبب عدم قدرة المستخدم بشكل عام على النطق بالكلمة بشكل سليم كما هي

* ويكون خرج الشبكة هو النص المكتوب وفق ما فهمته تلك الشبكة من صوت المستخدم

وصف المشكلة :

بداية للتعرف على تقنية التعرف على الصوت يمكنك مراجعة الرابط التالي

او البحث في غوغل , الكلمة المفتاحية هي Speech Recognition

كيف يمكنني استعمال تقنية التعرف على الصوت في ويندوز فيستا و7 ؟

1-قم بالضغط على لوحة التحكم ثم Speech Recognition Options تقوم بفتح نافذة التحكم بتقنية التعرف على الصوت قم بتحديد خيارات المياكروفون ومدى فعاليته

ثم قم بتشغيل ال tutorial الخاص بتدريب المايكروفون ان عملية التدريب هي عملية مهمة كونها تقوم بتحديد نبرة الصوت وخصائصه للمستخدم وتدريب المكتبة على التعامل مع المستخدم الحالي .

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

لذا نجد انه عندما تقوم بالتدريب فان برنامج التدريب يقوم بربط صوتك مع الكلمات التي تظهر على الشاشة , طبعا ان جميع هذه الكلمات مختارة بعناية

2-بعد الانتهاء من عملية التدريب يمكنك ان تتحقق من جميع الخيارات المتعلقة بالتعرف على الصوت

للمزيد من المعلومات حول كيفية استعمال التعرف على الصوت يمكنك ان تقوم بزيارة الرابط ادناه

الرابط هنا

التقنية مدهشة نعم ^-^

كيف يمكنني ان اقوم باستعمالها ضمن تطبيق C# الخاص بي

سنقوم بالعمل على visual studio لذلك ان كنت تستعمل mono او غيره من المترجمات يمكنك ان تبحث عن كيفية ادراج تلك التقنية الى برنامجك

يمكنك مشاهدة مقاطع فيديو تشرح فيه تلك العملية

الرابط 1

سنقوم بشرح تلك العملية هنا ستجد ان الامور ليست معقدة :

1-قم بانشاء مشروع جديد WindowsFormsApplication واختر اللغة C# يمكنك اتباع نفس الخطوات في VB.net

2-يوجد namespace تدعى System.Speech.Recognition

يمكنك التعرف عليها ضمن الرابط هنا

3-قم بالضغط على مشروعك ثم قم ب addreference ستظهر لك نافذة فرعية

ان مهمة هذا الامر هو اتاحة استعمال مكتبات معينة مثل dll او حتى اضافة مؤشر الى مشروع آخر فان كان ال solution الخاص بك يملك مشروعين 2 projects فانه يستطيع كلا من المشروعين رؤية الآخر عندماتضيف مؤشر reference من المشروع الاول على الثاني

عندما نقوم بالضغط على addreference تظهر لنا النافذة التالية :

addreference.png

الخيار project هو من اجل ان كنت تريد ان تستعمل مشروع آخر (سيظهر لك اسم المشروع ان كان هناك مشروع آخر بنفس solution) بينما بالحالة العامة مشروع واحد و حل واحد سيظهر كما في الصورة السابقة

الآن قم بالتوجه الى tab ذو الاسم .net ثم قم باضافة مكتبة system.speech

الآن نضغط على اظهار الكود الخاص بالواجهة البيانية ونقم بوضع الكود التالي :

public partial class Form1 : Form
{
  SpeechRecognizer rec = new SpeechRecognizer();

  public Form1()
  {
    InitializeComponent();
    rec.SpeechRecognized += rec_SpeechRecognized;
  }

  void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
  {
    label1.Text = e.Result.Text;
  }

  void Form1_Load(object sender, EventArgs e)
  {
    var c = new Choices();
//add numbers 
    for (var i = 0; i <= 100; i++)
      c.Add(i.ToString());

//add a word or a single char
c.Add("a");
c.Add("Move");

    var gb = new GrammarBuilder(c);
    var g = new Grammar(gb);
    rec.LoadGrammar(g);
    rec.Enabled = true;
  }

بداية نعرف غرض من الصف SpeechRecognizer والذي لا يمكنك تعريفه في حال عدم القيام باضافة مؤشر الى المكتبة system.speech

وفي حال عدم توافر المكتبة بشكل صحيح سيظهر لك الخطا التالي :

The type or namespace name 'SpeechRecognizer' could not be found (are you missing a using directive or an assembly reference?)

ثم قم بوضع بعض الاحدث الخاصة rec_SpeechRecognized

ولكن ما يهمك حقاً هو Form1_Load فيجب توليد نموذج قواعد للتعرف على الاحرف فنجد في مثالنا اننا قمنا بوضع الاحرف الابجدية وبعض الارقام ولكن يمكنك ان تضع كلمات معينة

كما قمت سابقا بانشاء لعبة شطرنج ثلاثية البعد بحيث يتم تحريك الحجارة وفقا لاوامر المستخدمين كل ما قمت به هو اضافة الكلمات للمتحول c

الآن لترى نتيجة العمل قم بوضع label وليكن ذو اسم label1

والآن ضمن الحدث rec_SpeechRecognized يمكنك وضع الكلام المتعرف عليه وفق المتحول e الى اي خرج مناسب

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

م.وسيم أبوزينة

There's no place like 127.0.0.1

#2

ارجو ان ينال الدرس اعجابكم

مختصر الدرس هو انه كيف يمكنني ان اقوم باستعمال تقنية التعرف على الصوت ضمن تطبيق C#

There's no place like 127.0.0.1

#3

فكرة الدرس جميلة أخي و تطبيقها أحلى

سأبدأ بالتطبيق و إن شاء الله تكون النتيجة جيدة

وفقك الله أخي

#4

اريد التحقق من الوجه

ارجو منك المساعدة لو كان لديك فكرة

والف شكر

#5
Hamza7 كتب:

اريد التحقق من الوجه

ارجو منك المساعدة لو كان لديك فكرة

والف شكر

المقالة التي تحدثت عنها تتناول انك تستعمل تقنية التعرف على الصوت المتوفرة ضمن نظام ويندوز وساضع مقالة اخرى كيفية التعرف على البصمة ولكن بالنسبة للتعرف على الوجوه فانا اظن انك بحاجة لاستيراد مكتباب خاصة .

اظن يوجد العديد من المشاريع التي تشرح هذه الفكرة في موقع codeproject او حتى stackoverflow

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

بكل الاحوال ساقوم بالعمل على اعداد مقالة باذنه تعالى عن التعرف على الوجوه فيما بعد .

تم تعديل هذه المشاركة بواسطة wazzz في 7 ديسمبر 2010 في 00:51

There's no place like 127.0.0.1

#6

وعليكم السلاام ورحمة الله وبركااته

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

أسأل الله العظيم أن تكوون في ميزاان حسنااتكم ، علمااا إنني أقوم حالياً بمشروع تخرج وهو التعرف على الصوت

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

في مثل هذه المواضيع ليستفيد منهاا الجميع باارك الله فيكم ،،

وفقكم الله

،،،

//

ربي هذا العهد لك ... عزم القلب الوفا

#7

طيب انا عملت دا كله ولكن وأثنااء التنفيذ طلع أكسبشن عند

 rec.LoadGrammar(g);

يقول : No recognizer is installed.

فما قصده بالمعرف ، هل هذا يعود لأني عندما عملت تنفيذ لم أستخدم المايك

أم أن هناك شيئا آخر!

جزاكم الله خيرا

//

تم تعديل هذه المشاركة بواسطة ماريا اسلام في 10 ديسمبر 2010 في 19:34

ربي هذا العهد لك ... عزم القلب الوفا

#8

لقد قمت باعادة كتابة البرنامج مرة اخرى واعتذر بسبب وجود بعض الاخطاء التقنية البسيطة . البرنامج شغال باذن الله

الخطوات السريعة التالية ستفي بالغرض .

1-قم بإضافة add refrence ثم توجه الى .net ثم قم باضافة system.speech

2- قم بكتابة السطر الموضع ادناه

using System.Speech.Recognition;

التطبيق هو عبارة عن واجهة windows form application مع زر button1 ونص label1

لا اكثر ولكن عند تشغيل الكود ادناه سيقوم البرنامج عندك بتشغيل خدمة التعرف على الصوت وعندما تتكلم احرف معينة المعرفة ادناه ستتغير خاصية ال text في label1 لتظهر الكلام الذي تتكلمه .

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private SpeechRecognizer rec = new SpeechRecognizer(); 

        private void button1_Click(object sender, EventArgs e)
        {    
             var c = new Choices();
             #region Add Numbers
             for (var i = 0; i <= 10; i++)
                 c.Add(i.ToString());
             #endregion

             #region Add the alphabets
             c.Add("A");
             c.Add("B");
             c.Add("C");
             c.Add("D");
             c.Add("E");
             c.Add("F");
             c.Add("G");
             c.Add("H");       
             #endregion

             var gb = new GrammarBuilder(c);
             var g = new Grammar(gb);
             rec.LoadGrammar(g);
             rec.Enabled = true;

             rec.SpeechRecognized += rec_SpeechRecognized;

            }

        string speech;
        void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            speech = e.Result.Text;
            label1.Text = e.Result.Text;

            if (speech.Equals("select"))
            {
                MessageBox.Show("select");
            }
            if (speech == "NewGame") 
            {
                MessageBox.Show("New Game");
            }
            if (speech == "undo") 
            {
                MessageBox.Show("undo ");
            }
            if (speech == "redo") 
            {
                MessageBox.Show("redo ");
            }

            if (speech == "Quit") 
            {
                Close();
            }

        }


        }
    }

بالنسبة لسؤالك تبع No recognizer is installed السبب بكل بساطة عدم وجود مايك متصل .

تم تعديل هذه المشاركة بواسطة wazzz في 25 ديسمبر 2010 في 22:06

There's no place like 127.0.0.1

مواضيع مشابهة