COVID19 הוא באמת מגפה היסטורית שמשפיעה מאוד על העולם כולו ואנשים בונים הרבה מכשירים חדשים כדי להילחם איתו. בנינו גם מכונת חיטוי אוטומטית ואקדח תרמי להקרנת טמפרטורה ללא מגע. היום אנו בונים מכשיר אחד נוסף שיעזור להילחם עם Coronavirus. זוהי מערכת לגילוי שיעול, שיכולה להבחין בין רעש לקול שיעול ויכולה לסייע במציאת החשוד בקורונה. זה ישתמש בטכניקות למידת מכונה לשם כך.
במדריך זה אנו הולכים לבנות מערכת לזיהוי שיעול באמצעות Arduino 33 BLE Sense ו- Edge Impulse Studio. זה יכול להבדיל בין רעשי רקע רגילים לשיעול באודיו בזמן אמת. השתמשנו בסטודיו Edge Impulse לאימון מערך של דוגמאות שיעול ורעשי רקע ובניית מודל TInyML מותאם במיוחד, שיכול לזהות צליל שיעול בזמן אמת.
רכיבים נדרשים
חוּמרָה
- Arduino 33 BLE Sense
- לד
- חוטי מגשר
תוֹכנָה
- סטודיו Edge Impulse
- ארדואינו 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 לאימון מודל איתור השיעול שלנו. לשם כך, עלינו לאסוף מערך נתונים המכיל את דוגמאות הנתונים שאותם נרצה לזהות בארדואינו שלנו. מכיוון שהמטרה היא לזהות את השיעול, יהיה עליכם לאסוף כמה דוגמאות לכך וכמה דגימות אחרות לצורך רעש, כך שהוא יכול להבחין בין שיעול לרעשים אחרים.
ניצור מערך נתונים עם שתי מחלקות "שיעול" ו "רעש". ליצירת מערך נתונים, צור חשבון Edge Impulse, אמת את חשבונך ואז התחל פרויקט חדש. אתה יכול לטעון את הדוגמאות באמצעות הנייד שלך, לוח Arduino שלך או שתוכל לייבא מערך נתונים לחשבון הדחף הקצה שלך. הדרך הקלה ביותר לטעון את הדגימות לחשבונך היא באמצעות הטלפון הנייד שלך. לשם כך, עליך לחבר את הנייד שלך ל- Edge Impulse.
כדי לחבר את הטלפון הנייד שלך, לחץ על ' התקנים ' ואז לחץ על ' חבר מכשיר חדש' .
כעת בחלון הבא לחץ על ' השתמש בטלפון הנייד שלך' , וקוד QR יופיע. סרוק את קוד ה- QR באמצעות הטלפון הנייד שלך באמצעות עדשת Google או יישום סורק קוד 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
הורד כעת את מערך הנתונים (קישור מערך נתונים) וחלץ את הקובץ בתיקיית הפרויקט שלך. פתח את שורת הפקודה ונווט אל מיקום מערך הנתונים והפעל את הפקודות הבאות:
edge-impulse-uploader - clean -edge-impulse-uploader - קטגוריית אימונים לקטגוריות / *. json edge-impulse-uploader - קטגוריית אימונים לקטגוריות / *. cbor edge-impulse-uploader - קטגוריות בדיקות בדיקות / *. json uploader edge-impulse - בדיקות קטגוריות בדיקות / *. cbor
הכשרת המודל ועיצוב הקוד
מכיוון שמערך הנתונים מוכן, כעת ניצור דחף לנתונים. לשם כך עבור לדף ' צור דחף '.
כעת בעמוד ' צור דחף' לחץ על ' הוסף חסימת עיבוד' . בחלון הבא בחר בלוק השמע (MFCC). לאחר מכן לחץ על ' הוסף בלוק למידה' ובחר בלוק רשת עצבית (Keras). לאחר מכן לחץ על ' שמור דחף' .
בשלב הבא, עבור לדף MFCC ואז לחץ על ' צור תכונות' . זה ייצור בלוקים של MFCC עבור כל חלונות האודיו שלנו.
לאחר מכן עבור לדף ' NN Classifier' ולחץ על שלוש הנקודות בפינה הימנית העליונה של ' הגדרות רשת עצבית' ובחר ' מעבר למצב Keras (מומחה)' .
החלף את המקור בקוד הבא ושנה את ' דירוג הביטחון המינימלי ' ל'0.70 '. לאחר מכן לחץ על כפתור ' התחל אימון' . זה יתחיל לאמן את המודל שלך.
ייבא tensorflow כ- tf מ- tensorflow.keras.models מייבא רצף מ- tensorflow.keras.layers מייבא צפוף, InputLayer, נשירה, לשטח, לעצב מחדש, אצווה נורמליזציה, Conv2D, MaxPooling2D, AveragePooling2D מ tensorflow.keras.optimizers לייבא את אדם מ tensorflow.keras.conints. ייבא MaxNorm # מודל ארכיטקטורה מודל = רצף () model.add (InputLayer (input_shape = (X_train.shape,), שם = '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, ההפעלה = 'relu', padding = 'אותו', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (גודל_בריכה = 2,padding = 'same')) model.add (Flatten ()) model.add (צפוף (מחלקות, הפעלה = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # זה שולט בקצב הלמידה opt = אדם (lr = 0.005, beta_1 = 0.9, beta_2 = 0.999) # אימן את מודל הרשת העצבית. Compile (loss = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epokes = 9, validation_data = (X_test, Y_test), מילולית = 2)מילולית = 2)מילולית = 2)
לאחר אימון המודל הוא יציג את ביצועי האימון. מבחינתי הדיוק היה 96.5% וההפסד היה 0.10 טוב להמשיך.
כעת מכיוון שמודל איתור השיעול שלנו מוכן, נפרוס את המודל הזה כספריית Arduino. לפני הורדת המודל כספרייה, תוכלו לבדוק את הביצועים על ידי מעבר לדף ' סיווג חי '.
עבור לדף ' פריסה ' ובחר ' ספריית ארדואינו' . כעת גלול מטה ולחץ על 'בניין' כדי להתחיל בתהליך. זה יבנה ספריית Arduino לפרויקט שלך.
עכשיו הוסף את הספרייה ב- Arduino IDE שלך. לשם כך פתח את ה- Arduino IDE ואז לחץ על סקיצה> כלול ספרייה> ספריית Add.ZIP.
לאחר מכן, טען דוגמה על ידי מעבר אל קובץ> דוגמאות> שם הפרויקט שלך - Edge Impulse> nano_ble33_sense_microphone.
נערוך כמה שינויים בקוד כדי שנוכל להשמיע צליל התראה כאשר הארדואינו מזהה שיעול. לשם כך, זמזם מתממשק עם ארדואינו ובכל פעם שהוא מזהה שיעול, נורית ה- LED מהבהבת שלוש פעמים.
השינויים נעשים בפונקציות loop () ריקות כאשר הוא מדפיס את ערכי הרעש והשיעול. בקוד המקורי הוא מדפיס גם את התוויות וגם את הערכים שלהם.
עבור (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 וזה ישמיע את הצליל. החלף את המקור עבור קוד לולאה () בזה:
עבור (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); נתוני float = result.classification.value; אם (נתונים <0.50) {Serial.print ("זוהה שיעול"); אזעקה(); }}
לאחר ביצוע השינויים, העלה את הקוד לארדואינו שלך. פתח את המסך הטורי ב 115200 באוד.
אז ככה אפשר לבנות מכונת גילוי שיעול, זו לא שיטה יעילה מאוד למצוא כל חשוד ב- COVID19 אבל היא יכולה לעבוד יפה באזור צפוף כלשהו.
להלן סרטון עבודה מלא עם ספרייה וקוד: