- المكونات مطلوبة
- مخطط الرسم البياني
- إنشاء مجموعة بيانات للتعرف على الكلام في Arduino
- تدريب النموذج
- كود Arduino للتعرف على صوت Arduino
تعد تقنية التعرف على الكلام مفيدة جدًا في الأتمتة التي لا تمنحك تحكمًا حرًا في الأجهزة فحسب ، بل تضيف أيضًا أمانًا للنظام. بصرف النظر عن صنع أدوات يتم التحكم فيها بالصوت ، يوفر التعرف على الكلام أيضًا مساعدة كبيرة للأشخاص الذين يعانون من إعاقات مختلفة.
في المشاريع السابقة قمنا ببناء محول تحويل النص إلى كلام (TTS) المستند إلى Arduino وأضواء يتم التحكم فيها بالصوت. الآن في هذا المشروع ، سنستخدم التعلم الآلي لتدريب نموذج التعرف على الكلام باستخدام Edge Impulse Studio بثلاثة أوامر ، مثل " LIGHT ON" و " LIGHT OFF" و " NOISE ". Edge Impulse عبارة عن نظام أساسي للتعلم الآلي عبر الإنترنت يمكّن المطورين من إنشاء الجيل التالي من حلول الأجهزة الذكية باستخدام التعلم الآلي المضمن. استخدمنا Edge Impulse studio سابقًا للتمييز بين أصوات السعال والضوضاء.
المكونات مطلوبة
المعدات
- Arduino 33 BLE Sense
- يؤدى
- أسلاك توصيل
البرمجيات
- ستوديو إيدج إمبلس
- اردوينو IDE
لقد قمنا بتغطية برنامج تعليمي مفصل حول Arduino 33 BLE Sense.
مخطط الرسم البياني
يرد أدناه مخطط الدائرة لهذا التعرف على الصوت باستخدام Arduino. لم يكن جزء Fritzing لـ Arduino 33 BLE متاحًا ، لذلك استخدمت Arduino Nano لأن كلاهما لهما نفس pinout.
يتم توصيل السلك الإيجابي لـ LED بالدبوس الرقمي 5 من Arduino 33 BLE ويتم توصيل الرصاص السلبي بدبوس GND في Arduino.
إنشاء مجموعة بيانات للتعرف على الكلام في Arduino
هنا يتم استخدام Edge Impulse Studio لتدريب نموذج التعرف على الكلام الخاص بنا. تدريب نموذج على Edge Impulse Studio مشابه لتدريب نماذج التعلم الآلي على أطر التعلم الآلي الأخرى. بالنسبة للتدريب ، تتمثل الخطوة الأولى لنموذج التعلم الآلي في جمع مجموعة بيانات تحتوي على عينات من البيانات التي نود أن نكون قادرين على التعرف عليها.
نظرًا لأن هدفنا هو التحكم في مؤشر LED باستخدام الأمر الصوتي الخاص بنا ، فسنحتاج إلى جمع عينات صوتية لجميع الأوامر والضوضاء حتى يتمكن من التمييز بين الأوامر الصوتية والضوضاء الأخرى.
سننشئ مجموعة بيانات بثلاث فئات " LED ON " و " LED OFF " و " الضوضاء ". لإنشاء مجموعة بيانات ، قم بإنشاء حساب Edge Impulse وتحقق من حسابك ثم ابدأ مشروعًا جديدًا. يمكنك تحميل العينات باستخدام هاتفك المحمول أو لوحة Arduino أو يمكنك استيراد مجموعة بيانات إلى حساب Edge Impulse الخاص بك. أسهل طريقة لتحميل العينات في حسابك هي باستخدام هاتفك المحمول. لذلك قم بتوصيل الهاتف المحمول بـ Edge Impulse.
لتوصيل الهاتف المحمول ، انقر فوق " الأجهزة " ، ثم انقر فوق " توصيل جهاز جديد" .
الآن في النافذة التالية ، انقر فوق "استخدام هاتفك المحمول" ، وسيظهر رمز الاستجابة السريعة. امسح رمز الاستجابة السريعة باستخدام هاتفك المحمول أو أدخل عنوان URL الموجود على رمز الاستجابة السريعة.
سيؤدي ذلك إلى توصيل هاتفك باستوديو Edge Impulse.
مع اتصال هاتفك بـ Edge Impulse Studio ، يمكنك الآن تحميل العينات الخاصة بك. لتحميل العينات انقر فوق " الحصول على البيانات" . الآن في صفحة الحصول على البيانات ، أدخل اسم التسمية ، وحدد الميكروفون كمستشعر ، وأدخل طول العينة. انقر فوق " بدء أخذ العينات" ، وسوف يلتقط جهازك عينة من 2 ثانية. سجل ما مجموعه 10 إلى 12 عينة صوت في ظروف مختلفة.
بعد تحميل العينات للفصل الأول ، قم الآن بتعيين تغيير الملصق وجمع العينات لفئة " الإضاءة" و "الضوضاء" .
هذه العينات مخصصة لتدريب الوحدة ، في الخطوات التالية ، سنجمع بيانات الاختبار. يجب أن تكون بيانات الاختبار 30٪ على الأقل من بيانات التدريب ، لذا اجمع 4 عينات من "الضوضاء" و 4 إلى 5 عينات من أجل "إضاءة" و "إضاءة"
تدريب النموذج
نظرًا لأن مجموعة البيانات الخاصة بنا جاهزة ، يمكننا الآن إنشاء دفعة للبيانات. لذلك انتقل إلى صفحة " إنشاء الدافع ". قم بتغيير الإعدادات الافتراضية لحجم نافذة 1000 مللي ثانية إلى 1200 مللي ثانية و 500 مللي ثانية زيادة النافذة إلى 50 مللي ثانية. هذا يعني أن بياناتنا ستتم معالجتها 1.2 ثانية في المرة الواحدة ، بدءًا من كل 58 مللي ثانية.
الآن في صفحة " إنشاء الدافع" ، انقر فوق " إضافة كتلة معالجة" . في النافذة التالية ، حدد كتلة الصوت (MFCC). بعد ذلك ، انقر فوق " إضافة كتلة تعلم" وحدد كتلة الشبكة العصبية (Keras). ثم انقر فوق " Save Impulse" .
في الخطوة التالية ، انتقل إلى صفحة MFCC ، ثم انقر فوق "إنشاء الميزات". سيولد كتل MFCC لجميع نوافذ الصوت لدينا.
بعد ذلك ، انتقل إلى صفحة " NN Classifier" وانقر على النقاط الثلاث في الزاوية اليمنى العليا من " إعدادات الشبكة العصبية" وحدد " التبديل إلى وضع Keras (الخبير)" .
استبدل الأصل بالرمز التالي وقم بتغيير " الحد الأدنى لتصنيف الثقة" إلى " 0.70" . ثم انقر فوق الزر " بدء التدريب" . سيبدأ تدريب النموذج الخاص بك.
استيراد tensorflow مثل tf من tensorflow.keras.models استيراد تسلسلي من tensorflow.keras.layers import Dense و InputLayer و Dropout و Flatten و Reshape و BatchNormalization و Conv2D و MaxPooling2D و AveragePooling2D من tensorflow.keras.optimizers استيراد Adam من tensorflow.keras.optimizers استيراد MaxNorm # model architecture model = Sequential () model.add (InputLayer (input_shape = (X_train.shape،)، name = 'x_input')) model.add (Reshape ((int (X_train.shape / 13)، 13، 1)، input_shape = (X_train.shape،))) model.add (Conv2D (10، kernel_size = 5، activation = 'relu'، padding = 'same'، kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D) (pool_size = 2، padding = 'same')) model.add (Conv2D (5، kernel_size = 5، activation = 'relu'، padding = 'same'، kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D () pool_size = 2 ،padding = 'same')) model.add (Flatten ()) model.add (Dense (class، activation = 'softmax'، name = 'y_pred'، kernel_constraint = MaxNorm (3))) # هذا يتحكم في اختيار معدل التعلم = آدم (lr = 0.005 ، beta_1 = 0.9 ، beta_2 = 0.999) # تدريب مجموعة model.com للشبكة العصبية (الخسارة = 'categorical_crossentropy' ، المحسن = opt ، metrics =) model.fit (X_train ، Y_train ، batch_size = 32 ، العصور = 9، Validation_data = (X_test، Y_test)، مطول = 2)مطول = 2)مطول = 2)
بعد تدريب النموذج سيظهر أداء التدريب. بالنسبة لي كانت الدقة 81.1٪ والخسارة 0.45 وهذا ليس بالأداء المثالي لكن يمكننا المضي فيه. يمكنك زيادة أداء النموذج الخاص بك عن طريق إنشاء مجموعة بيانات واسعة.
الآن بما أن نموذج التعرف على الكلام جاهز ، سنقوم بنشر هذا النموذج كمكتبة Arduino. قبل تنزيل النموذج كمكتبة ، يمكنك اختبار الأداء بالانتقال إلى صفحة "التصنيف المباشر" . تتيح لك ميزة التصنيف المباشر اختبار النموذج باستخدام بيانات الاختبار الحالية المرفقة مع مجموعة البيانات أو عن طريق دفق البيانات الصوتية من هاتفك المحمول.
لاختبار البيانات بهاتفك ، اختر " التبديل إلى وضع التصنيف" على هاتفك.
الآن لتنزيل النموذج كمكتبة Arduino ، انتقل إلى صفحة " النشر " وحدد " مكتبة Arduino" . الآن قم بالتمرير لأسفل وانقر فوق " إنشاء " لبدء العملية. سيؤدي هذا إلى إنشاء مكتبة Arduino لمشروعك.
أضف الآن المكتبة في Arduino IDE الخاص بك. لذلك ، افتح Arduino IDE ثم انقر فوق Sketch> Include Library> Add.ZIP library
بعد ذلك ، قم بتحميل مثال بالانتقال إلى ملف> أمثلة> اسم مشروعك - Edge Impulse> nano_ble33_sense_microphone
كود Arduino للتعرف على صوت Arduino
هنا تم إجراء بعض التغييرات للتحكم في LED بالأوامر الصوتية.
نجري بعض التغييرات في الحلقة الفارغة () حيث تطبع احتمالية الأوامر. في الكود الأصلي ، يتم طباعة جميع الملصقات وقيمها معًا.
لـ (size_t ix = 0؛ ix <EI_CLASSIFIER_LABEL_COUNT؛ ix ++) {ei_printf ("٪ s:٪.5f \ n"، result.classification.label، result.classification.value) ؛ }
للتحكم في مؤشر LED ، يتعين علينا حفظ جميع احتمالات الأوامر في ثلاثة متغيرات مختلفة حتى نتمكن من وضع عبارات شرطية عليها. لذلك وفقًا للكود الجديد ، إذا كان احتمال أمر " light on" أكثر من 0.50 ، فسيتم تشغيل مؤشر LED وإذا كان احتمال أمر " light off" أكثر من 0.50 فسيتم إيقاف تشغيل LED.
لـ (size_t ix = 2 ؛ ix <EI_CLASSIFIER_LABEL_COUNT ؛ ix ++) {الضوضاء = result.classification.value ؛ Serial.println ("الضوضاء:") ؛ Serial.println (ضوضاء) ؛ } لـ (size_t ix = 0؛ ix <EI_CLASSIFIER_LABEL_COUNT؛ ix--) {lightoff = result.classification.value؛ Serial.println ("Light Off:") ؛ Serial.print (lightoff) ؛ } lighton = 1- (ضوضاء + إضاءة) ؛ Serial.println ("Light ON:") ؛ Serial.print (لايتون) ؛ if (lighton> 0.50) {digitalWrite (led، HIGH) ؛ } إذا (lightoff> 0.50) {digitalWrite (led، LOW)؛ }
بعد إجراء التغييرات ، قم بتحميل الكود إلى Arduino الخاص بك. افتح الشاشة التسلسلية على 115200 باود.
هذه هي الطريقة التي يمكنك بها بناء التعرف على الكلام باستخدام Arduino وإعطاء أوامر لتشغيل الأجهزة.
ويرد أدناه فيديو عمل كامل مع مكتبة ورمز.