- المكونات مطلوبة
- مخطط الرسم البياني
- إنشاء مجموعة البيانات الخاصة بآلة الكشف عن السعال
- تدريب النموذج وتعديل الكود
إن COVID19 هو حقًا جائحة تاريخي يؤثر على العالم بأسره بشكل سيء للغاية ويقوم الناس ببناء الكثير من الأجهزة الجديدة لمحاربته. لقد قمنا أيضًا ببناء آلة تطهير أوتوماتيكية ومسدس حراري لفحص درجة الحرارة بدون تلامس. سنقوم اليوم ببناء جهاز آخر للمساعدة في مكافحة فيروس كورونا. وهو عبارة عن نظام للكشف عن السعال يمكنه التمييز بين الضوضاء وصوت السعال ويمكن أن يساعد في اكتشاف كورونا المشتبه به. سيستخدم تقنيات التعلم الآلي لذلك.
في هذا البرنامج التعليمي ، سنقوم ببناء نظام اكتشاف السعال باستخدام Arduino 33 BLE Sense و Edge Impulse Studio. يمكن أن يفرق بين ضوضاء الخلفية العادية والسعال في صوت الوقت الحقيقي. استخدمنا Edge Impulse Studio لتدريب مجموعة بيانات من السعال وعينات ضوضاء الخلفية وبناء نموذج TInyML مُحسَّن للغاية ، يمكنه اكتشاف صوت السعال في الوقت الفعلي.
المكونات مطلوبة
المعدات
- Arduino 33 BLE Sense
- يؤدى
- أسلاك توصيل
البرمجيات
- ستوديو إيدج إمبلس
- اردوينو IDE
لقد قمنا بتغطية برنامج تعليمي مفصل حول Arduino 33 BLE Sense.
مخطط الرسم البياني
يوجد أدناه مخطط دائري لاكتشاف السعال باستخدام Arduino 33 BLE Sense. لم يكن جزء Fritzing لـ Arduino 33 BLE متاحًا ، لذلك استخدمت Arduino Nano لأن كلاهما لهما نفس الدبوس.
يتم توصيل السلك الإيجابي لـ LED بالدبوس الرقمي 4 من Arduino 33 BLE والرصاص السالب متصل بدبوس GND في Arduino.
إنشاء مجموعة البيانات الخاصة بآلة الكشف عن السعال
كما ذكرنا سابقًا ، نحن نستخدم Edge Impulse Studio لتدريب نموذج اكتشاف السعال الخاص بنا. لذلك ، يتعين علينا جمع مجموعة بيانات تحتوي على عينات من البيانات التي نرغب في التعرف عليها على Arduino. نظرًا لأن الهدف هو اكتشاف السعال ، فستحتاج إلى جمع بعض عينات ذلك وبعض العينات الأخرى للضوضاء ، حتى يتمكن من التمييز بين السعال والضوضاء الأخرى.
سنقوم بإنشاء مجموعة بيانات من فئتين "سعال" و "ضوضاء". لإنشاء مجموعة بيانات ، قم بإنشاء حساب Edge Impulse وتحقق من حسابك ثم ابدأ مشروعًا جديدًا. يمكنك تحميل العينات باستخدام هاتفك المحمول أو لوحة Arduino أو يمكنك استيراد مجموعة بيانات إلى حساب Edge Impulse الخاص بك. أسهل طريقة لتحميل العينات في حسابك هي باستخدام هاتفك المحمول. لذلك ، عليك توصيل هاتفك المحمول بـ Edge Impulse.
لتوصيل هاتفك المحمول ، انقر فوق " الأجهزة " ثم انقر فوق " توصيل جهاز جديد" .
الآن في النافذة التالية ، انقر فوق " استخدام هاتفك المحمول" ، وسيظهر رمز الاستجابة السريعة. امسح رمز الاستجابة السريعة ضوئيًا باستخدام هاتفك المحمول باستخدام Google Lens أو أي تطبيق آخر لمسح رمز QR.
سيؤدي ذلك إلى توصيل هاتفك باستوديو Edge Impulse.
مع اتصال هاتفك بـ Edge Impulse Studio ، يمكنك الآن تحميل العينات الخاصة بك. لتحميل العينات ، انقر فوق " الحصول على البيانات" . الآن في صفحة الحصول على البيانات ، أدخل اسم التسمية ، وحدد الميكروفون كمستشعر ، وأدخل طول العينة. انقر فوق " بدء أخذ العينات" لبدء أخذ عينة 40 ثانية. بدلاً من إجبار نفسك على السعال ، يمكنك استخدام عينات من السعال عبر الإنترنت بأطوال مختلفة. سجل ما مجموعه 10 إلى 12 عينة سعال بأطوال مختلفة.
بعد تحميل عينات السعال ، قم الآن بتعيين الملصق على "ضوضاء" وجمع 10 إلى 12 عينة ضوضاء أخرى.
هذه العينات مخصصة لتدريب الوحدة ، في الخطوات التالية ، سنجمع بيانات الاختبار. يجب أن تكون بيانات الاختبار 30٪ على الأقل من بيانات التدريب ، لذا اجمع 3 عينات من "الضوضاء" و 4 إلى 5 عينات من "السعال".
بدلاً من جمع بياناتك ، يمكنك استيراد مجموعة البيانات الخاصة بنا إلى حساب Edge Impulse الخاص بك باستخدام برنامج Edge Impulse CLI Uploader.
لتثبيت CLI Uploader ، أولاً ، قم بتنزيل Node.js وتثبيته على الكمبيوتر المحمول الخاص بك. بعد ذلك افتح موجه الأوامر وأدخل الأمر أدناه:
تثبيت npm -g edge-impulse-cli
الآن قم بتنزيل مجموعة البيانات (Dataset Link) واستخرج الملف في مجلد المشروع الخاص بك. افتح موجه الأوامر وانتقل إلى موقع مجموعة البيانات وقم بتشغيل الأوامر التالية:
edge-impulse-uploader --clean edge-impulse-uploader --category training training / *. json edge-impulse-uploader --category training training / *. cbor edge-impulse-uploader --category test testing / *. json edge-impulse-uploader - اختبار اختبار الفئة / *. cbor
تدريب النموذج وتعديل الكود
نظرًا لأن مجموعة البيانات جاهزة ، سنقوم الآن بإنشاء دفعة للبيانات. لذلك انتقل إلى صفحة " إنشاء دفعة ".
الآن في صفحة " إنشاء الدافع" ، انقر فوق " إضافة كتلة معالجة" . في النافذة التالية ، حدد مجموعة الصوت (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)
بعد تدريب النموذج ، سيظهر أداء التدريب. بالنسبة لي ، كانت الدقة 96.5٪ وكانت الخسارة 0.10 وهذا أمر جيد للمتابعة.
الآن بما أن نموذج الكشف عن السعال جاهز ، سنقوم بنشر هذا النموذج كمكتبة 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) ؛ }
سنقوم بحفظ قيم الضوضاء والسعال في متغيرات مختلفة ومقارنة قيم الضوضاء. إذا انخفضت قيمة الضوضاء عن 0.50 ، فهذا يعني أن قيمة السعال تزيد عن 0.50 وستصدر الصوت. استبدل كود for loop () الأصلي بهذا:
لـ (size_t ix = 1 ؛ ix <EI_CLASSIFIER_LABEL_COUNT ؛ ix ++) {Serial.print (result.classification.value) ؛ تعويم البيانات = result.classification.value ؛ if (البيانات <0.50) {Serial.print ("Cough Detected") ؛ إنذار()؛ }}
بعد إجراء التغييرات ، قم بتحميل الكود إلى Arduino الخاص بك. افتح الشاشة التسلسلية على 115200 باود.
هذه هي الطريقة التي يمكن بها بناء آلة الكشف عن السعال ، إنها ليست طريقة فعالة للغاية للعثور على أي مشتبه به في COVID19 ولكنها يمكن أن تعمل بشكل جيد في بعض المناطق المزدحمة.
يوجد فيديو كامل للعمل مع المكتبة والرمز أدناه: