تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[درس] كيف تجعل برنامجك يتعرف على صوتك وينفذ الاوامر
#1
السلام عليكم ورحمة الله وبركاته


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

يعني لما تقول في المايك "open calculator" يقوم البرنامج بفتح الحاسبة

كيف ذلك ؟؟! اقرأ بقية المقالة.




--



المتتطلبات :-

1. اضافة مرجع System.Speech
<يتم ذلك بالذهاب لـProject في الـ Toolbar ثم Add reference اذهب للتاب .net وانزل تحت وسترى المرجع>


--


الخطوة الاولى (تصميم واجهة البرنامج) :-

1- نضيف زر ونجعل خاصية Text تساوي "Start recognizer" ، ونجعل خاصية name تساوي "StartButton"
2- نضيف زر ونجعل خاصية Text تساوي "Stop recognizer" ، ونجعل خاصية name تساوي "StopButton"
3- نضيف اداة label ونخليه في الزاوية اليسرى في الاسفل ونجعل خاصية Text تساوي ": Recognized Text"
4- نضيف اداة ونجعل خاصية Name تساوي "resultLabel"

يكون الشكل النهائي كالتالي :

[ATTACH=CONFIG]3435[/ATTACH]



---


الخطوة الثانية (تعريف الفئة الي منستعملها) :-


1- افتح محرر الكود
2- قم باستيراد مجال الاسماء System.Speech.Recognition



سي شارب
PHP كود :
using System.Speech.Recognition

vb.net
PHP كود :
Imports System.Speech.Recognition 



3- تعريف Instance في الكلاس Form1


سي شارب
PHP كود :
private SpeechRecognitionEngine _Recognizer = new SpeechRecognitionEngine(); 

vb.net
PHP كود :
Private _Recognizer As New SpeechRecognitionEngine() 




-


الخطوة الثالثة (برمجة زر التشغيل والايقاف) :-

1- في حدث StartButton_click نضيف الكود التالي


سي شارب
PHP كود :
           _Recognizer.LoadGrammar(new Grammar(new GrammarBuilder("open calculator"))); //اضافة كلمة
 
           _Recognizer.RequestRecognizerUpdate(); //كود مهم لتحديث الفئة بعد كل اضافة لكلمة

 
           _Recognizer.LoadGrammar(new Grammar(new GrammarBuilder("close calculator")));
 
           _Recognizer.RequestRecognizerUpdate();

 
           _Recognizer.SetInputToDefaultAudioDevice(); //تحديد مصدر الصوت

 
           _Recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(_Recognizer_SpeechRecognized);
 
           //اضافة اجراء يتم استدعائه عندما يتم اطلاق الحدث

 
           _Recognizer.RecognizeAsync(RecognizeMode.Multiple); //تشغيل قانص الاصوات في مسار اخر لايؤثر على البرنامج 

vb.net
PHP كود :
_Recognizer.LoadGrammar(New Grammar(New GrammarBuilder("open calculator")))
'اضافة كلمة
_Recognizer.RequestRecognizerUpdate()
'
كود مهم لتحديث الفئة بعد كل اضافة لكلمة
_Recognizer
.LoadGrammar(New Grammar(New GrammarBuilder("close calculator")))
_Recognizer.RequestRecognizerUpdate()

_Recognizer.SetInputToDefaultAudioDevice()
'تحديد مصدر الصوت
_Recognizer.SpeechRecognized += New EventHandler(Of SpeechRecognizedEventArgs)(_Recognizer_SpeechRecognized)
'
اضافة اجراء يتم استدعائه عندما يتم اطلاق الحدث

_Recognizer
.RecognizeAsync(RecognizeMode.Multiple)
'تشغيل قانص الاصوات في مسار اخر لايؤثر على البرنامج 




ونضيف الاجراء التالي :

c#
PHP كود :
       void _Recognizer_SpeechRecognized(object senderSpeechRecognizedEventArgs e)
 
       {
 
           //سنقوم بكتابة الاكواد لاحقا
 
       

vb.net
PHP كود :
Private Sub _Recognizer_SpeechRecognized(sender As ObjectAs SpeechRecognizedEventArgs)
    
'سنقوم بكتابة الاكواد لاحقا
End Sub 




2- برمجة زر الايقاف - ندخل على حدث StopButton_Click ونكتب :

سي شارب
PHP كود :
           _Recognizer.RecognizeAsyncStop();
 
           _Recognizer.SpeechRecognized -= new EventHandler<SpeechRecognizedEventArgs>(_Recognizer_SpeechRecognized);
 
           resultLabel.Text "-"


vb.net
PHP كود :
_Recognizer.RecognizeAsyncStop()
_Recognizer.SpeechRecognized -= New EventHandler(Of SpeechRecognizedEventArgs)(_Recognizer_SpeechRecognized)
resultLabel.Text "-" 




---



الخطوة الرابعة (قنص الكلمات وتنفيذ الاوامر):-


تتذكرون اجراء _Recognizer_SpeechRecognized الي سويناه سابقا

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

احنا اضفنا كلمتين هما open calculator و close calculator

لذلك عندما تقول احدى هذه الكلمتين راح يتم استدعاء هذا الاجراء

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

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

لو قنص open calculator يقوم البرنامج بفتح الحاسبة
لو قنص close calculator يقوم البرنامج باغلاق الحاسبة


فأولا نقوم باضافة متغير عام

سي شارب
PHP كود :
private System.Diagnostics.Process calcProcess = new System.Diagnostics.Process(); 

vb.net
PHP كود :
Private calcProcess As New System.Diagnostics.Process() 




ونقوم بكتابة هذا الكود في اي مكان

PHP كود :
calcProcess.StartInfo.FileName "calc.exe"

انا وضعته في حدث Form1_load

نضيف هذا المتغير العام فوق حدث  Recognizer_SpeechRecognized او اي مكان في الكلاس



PHP كود :
Dim openFlag As Boolean False 

PHP كود :
bool openFlag false



الان نتوجه الى الاجراء Recognizer_SpeechRecognized

ونكتب


سي شارب
PHP كود :
resultLabel.Text e.Result.Text;
 
           switch (e.Result.Text)
 
           {
 
               case "open calculator":
 
                   if (openFlag == false)
 
                   {
 
                       calcProcess.Start(); //تشغيل الحاسبة
 
                       openFlag true;
 
                   }
 
                   break;
 
               case "close calculator":
 
                   try
                    
{
 
                       if (openFlag)
 
                       {
 
                           calcProcess.Kill(); //اغلاق الحاسبة
openFlag false;
 
                       }
 
                   }
 
                   catch { }
 
                   break;
 
           

vb.net
PHP كود :
resultLabel.Text e.Result.Text
Select 
Case e.Result.Text
    
Case "open calculator"
        
If openFlag False Then
            calcProcess
.Start()
            
'تشغيل الحاسبة
            openFlag = True
        End If
        Exit Select
    Case "close calculator"
        Try
            If openFlag Then
                    '
اغلاق الحاسبة
                calcProcess
.Kill()
openFlag false
            End 
If
        Catch
        
End Try
        Exit 
Select
End Select 






في النهاية يصبح الكود الكامل :

PHP كود :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;

namespace 
WindowsFormsApplication1
{
 
   public partial class Form1 Form
    
{

 
       private SpeechRecognitionEngine _Recognizer = new SpeechRecognitionEngine();
 
       private System.Diagnostics.Process calcProcess = new System.Diagnostics.Process();

 
       public Form1()
 
       {
 
           InitializeComponent();
 
           calcProcess.StartInfo.FileName "calc.exe";
 
       }


 
       private void StartButton_Click(object senderEventArgs e)
 
       {
 
           _Recognizer.LoadGrammar(new Grammar(new GrammarBuilder("open calculator"))); //اضافة كلمة
 
           _Recognizer.RequestRecognizerUpdate(); //كود مهم لتحديث الفئة بعد كل اضافة لكلمة

 
           _Recognizer.LoadGrammar(new Grammar(new GrammarBuilder("close calculator")));
 
           _Recognizer.RequestRecognizerUpdate();

 
           _Recognizer.SetInputToDefaultAudioDevice(); //تحديد مصدر الصوت

 
           _Recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(_Recognizer_SpeechRecognized);
 
           //اضافة اجراء يتم استدعائه عندما يتم اطلاق الحدث

 
           _Recognizer.RecognizeAsync(RecognizeMode.Multiple); //تشغيل قانص الاصوات في مسار اخر لايؤثر على البرنامج
 
       }


 
       private void StopButton_Click(object senderEventArgs e)
 
       {
 
           _Recognizer.RecognizeAsyncStop();
 
           _Recognizer.SpeechRecognized -= new EventHandler<SpeechRecognizedEventArgs>(_Recognizer_SpeechRecognized);
 
           resultLabel.Text "-";
 
       }



 
bool openFlag false;
 
       void _Recognizer_SpeechRecognized(object senderSpeechRecognizedEventArgs e)
 
       {
resultLabel.Text e.Result.Text;
 
           bool openFlag false;

 
           switch (e.Result.Text)
 
           {
 
               case "open calculator":
 
                   if (openFlag == false)
 
                   {
 
                       calcProcess.Start(); //تشغيل الحاسبة
 
                       openFlag true;
 
                   }
 
                   break;
 
               case "close calculator":
 
                   try
                    
{
 
                       if (openFlag)
 
                       {
 
                           calcProcess.Kill(); //اغلاق الحاسبة
openFlag false;
 
                       }
 
                   }
 
                   catch { }
 
                   break;
 
           }
 
       }




 
   }


PHP كود :
Imports System.Collections.Generic
Imports System
.ComponentModel
Imports System
.Data
Imports System
.Drawing
Imports System
.Linq
Imports System
.Text
Imports System
.Windows.Forms
Imports System
.Speech.Recognition

Namespace WindowsFormsApplication1
    
Public Partial Class Form1
        Inherits Form

        
Private _Recognizer As New SpeechRecognitionEngine()
        Private 
calcProcess As New System.Diagnostics.Process()

        Public 
Sub New()
            
InitializeComponent()
            
calcProcess.StartInfo.FileName "calc.exe"
        
End Sub


        
Private Sub StartButton_Click(sender As ObjectAs EventArgs)
            
_Recognizer.LoadGrammar(New Grammar(New GrammarBuilder("open calculator")))
            
'اضافة كلمة
            _Recognizer.RequestRecognizerUpdate()
            '
كود مهم لتحديث الفئة بعد كل اضافة لكلمة
            _Recognizer
.LoadGrammar(New Grammar(New GrammarBuilder("close calculator")))
            
_Recognizer.RequestRecognizerUpdate()

            
_Recognizer.SetInputToDefaultAudioDevice()
            
'تحديد مصدر الصوت
            _Recognizer.SpeechRecognized += New EventHandler(Of SpeechRecognizedEventArgs)(AddressOf _Recognizer_SpeechRecognized)
            '
اضافة اجراء يتم استدعائه عندما يتم اطلاق الحدث

            _Recognizer
.RecognizeAsync(RecognizeMode.Multiple)
            
'تشغيل قانص الاصوات في مسار اخر لايؤثر على البرنامج
        End Sub


        Private Sub StopButton_Click(sender As Object, e As EventArgs)
            _Recognizer.RecognizeAsyncStop()
            _Recognizer.SpeechRecognized -= New EventHandler(Of SpeechRecognizedEventArgs)(AddressOf _Recognizer_SpeechRecognized)
            resultLabel.Text = "-"
        End Sub



Dim openFlag As Boolean = False
        Private Sub _Recognizer_SpeechRecognized(sender As Object, e As SpeechRecognizedEventArgs)
            
resultLabel.Text = e.Result.Text
            Select Case e.Result.Text
                Case "open calculator"
                    If openFlag = False Then
                        calcProcess.Start()
                        '
تشغيل الحاسبة
                        openFlag 
True
                    End 
If
                    Exit 
Select
                
Case "close calculator"
                    
Try
                        If 
openFlag Then
                                
'اغلاق الحاسبة
                            calcProcess.Kill()
openFlag = false
                        End If
                    Catch
                    End Try
                    Exit Select
            End Select
        End Sub




    End Class
End Namespace 



البرنامج المرفق مكتوب بالسي شارب





الملفات المرفقة
.zip   Speech Recongizer vb4arb.zip (الحجم : 65.08 ك ب / التحميلات : 68)
الرد }}}
تم الشكر بواسطة: HASAN6.0 , الماجيك مسعد , Miloud , Miloud
#2
السلام عليكم

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

بارك الله فيك
الرد }}}
تم الشكر بواسطة:
#3
السلام عليكم ورحمة الله وبركاته

بارك الله فيك أخي الكريم
وجعله في ميزان حسناتك

معلومات جميلة وقيمة جدا

بالتوفيق
الرد }}}
تم الشكر بواسطة:
#4
سلام عليكم
شكرا
الرد }}}
تم الشكر بواسطة:
#5
أعيدوا لنا المرفق
Angry

والا خلاص خلوني اطقطق شوي
سماح
سبحان الله والحمدلله ولا إله إلا الله والله أكبر
 اللهم اغْفِرْ لِلمؤمنين والمؤمنات والمسلمين والمسلمات الأحياء منهم والأموات
الرد }}}
تم الشكر بواسطة:
#6
شكرآ لاكن يوجد خطاء فى هذا السطر
_Recognizer.SpeechRecognized += New EventHandler(Of SpeechRecognizedEventArgs)(AddressOf _Recognizer_SpeechRecognized)
الرد }}}
تم الشكر بواسطة:
#7
متميز دائما
الرد }}}
تم الشكر بواسطة:
#8
(20-09-15, 11:26 PM)أبو عمر كتب : أعيدوا لنا المرفق
Angry

والا خلاص خلوني اطقطق شوي
سماح

السلام عليكم

تم اعادة رفع المرفق

يعطيكم العافية
(( يَا أَيَّتُهَا النَّفْسُ الْمُطْمَئِنَّةُ ارْجِعِي إِلَى رَبِّكِ رَاضِيَةً مَرْضِيَّةً فَادْخُلِي فِي عِبَادِي وَادْخُلِي جَنَّتِي ))

الرد }}}
تم الشكر بواسطة: أبو عمر
#9
رائع Smile.........
Basil Abdallah 

الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم