- רכיבים נדרשים
- תרשים מעגל
- יצירת מערך הנתונים לזיהוי דיבור בארדואינו
- הכשרת המודל
- קוד ארדואינו לזיהוי קולי של ארדואינו
טכנולוגיית זיהוי דיבור שימושית מאוד באוטומציה אשר לא רק מעניקה לך שליטה חופשית בידיים במכשירים אלא גם מוסיפה אבטחה למערכת. מלבד ייצור גאדג'טים נשלטים על ידי קול, זיהוי הדיבור מספק גם עזרה משמעותית לאנשים הסובלים ממוגבלות שונות.
בפרויקטים קודמים בנינו ממיר מבוסס טקסט לדיבור (TTS) מבוסס ארדואינו ונורות נשלטות קול. כעת בפרויקט זה נשתמש בלמידת מכונה לאימון מודל זיהוי דיבור באמצעות Edge Impulse Studio עם שלוש פקודות כלומר ' LIGHT ON' , ' LIGHT OFF' ו- ' NOISE '. Edge Impulse היא פלטפורמת לימוד מכונה מקוונת המאפשרת למפתחים ליצור את הדור הבא של פתרונות מכשירים חכמים עם למידת מכונה משובצת. השתמשנו בסטודיו Edge impulse בעבר כדי להבדיל בין קולות שיעול ורעש.
רכיבים נדרשים
חוּמרָה
- Arduino 33 BLE Sense
- לד
- חוטי מגשר
תוֹכנָה
- סטודיו Edge Impulse
- ארדואינו IDE
סקרנו הדרכה מפורטת על Arduino 33 BLE Sense.
תרשים מעגל
תרשים המעגל לזיהוי קול זה באמצעות ארדואינו מופיע להלן. חלק Fritzing עבור Arduino 33 BLE לא היה זמין, אז השתמשתי Arduino ננו כמו שניהם יש אותו pinout.
המוליך החיובי של ה- LED מחובר לסיכה דיגיטלית 5 של חוש Arduino 33 BLE ועופרת שלילית מחוברת לסיכה GND של Arduino.
יצירת מערך הנתונים לזיהוי דיבור בארדואינו
כאן משמש Edge Impulse Studio לאימון מודל זיהוי הדיבור שלנו. הכשרת מודל ב- Edge Impulse Studio דומה למודלים להכשרת מכונות למידה במסגרות אחרות של למידת מכונה. לצורך אימון, הצעד הראשון של מודל למידת מכונה הוא לאסוף מערך נתונים המכיל את דגימות הנתונים שאותם היינו רוצים שיוכלו לזהות.
מכיוון שהמטרה שלנו היא לשלוט על נורית עם הפקודה הקולית שלנו, נצטרך לאסוף דגימות קוליות עבור כל הפקודות והרעש, כך שהיא תוכל להבחין בין פקודות קוליות לרעשים אחרים.
ניצור מערך נתונים עם שלוש מחלקות " LED ON ", " LED OFF " ו- " noise ". ליצירת מערך נתונים, צור חשבון Edge Impulse, אמת את חשבונך ואז התחל פרויקט חדש. אתה יכול לטעון את הדוגמאות באמצעות הנייד שלך, לוח Arduino שלך או שתוכל לייבא מערך נתונים לחשבון הדחף הקצה שלך. הדרך הקלה ביותר לטעון את הדגימות לחשבונך היא באמצעות הטלפון הנייד שלך. לשם כך חבר את הנייד עם Edge Impulse.
לחיבור טלפון נייד לחץ על ' התקנים ' ואז לחץ על ' חבר מכשיר חדש' .
כעת בחלון הבא לחץ על 'השתמש בטלפון הנייד שלך' , וקוד QR יופיע. סרוק את קוד ה- QR באמצעות הטלפון הנייד שלך או הזן את כתובת ה- URL שניתנה בקוד QR.
זה יחבר את הטלפון שלך עם סטודיו Edge Impulse.
כאשר הטלפון שלך מחובר ל- Edge Impulse Studio, כעת תוכל לטעון את הדוגמאות שלך. לטעינת הדגימות לחץ על ' רכישת נתונים' . כעת בעמוד רכישת הנתונים הזן את שם התווית, בחר את המיקרופון כחיישן והזן את אורך הדגימה. לחץ על ' התחל דגימה' , המכשיר שלך יתפוס מדגם של שני שניות. הקלט סך של 10 עד 12 דוגמאות קוליות בתנאים שונים.
לאחר העלאת הדגימות למחזור הראשון עכשיו להגדיר את שינוי התווית לאסוף דגימות עבור " off אור" ו "רעש" בכיתה.
דוגמאות אלו מיועדות לאימון המודול, בשלבים הבאים נאסוף את נתוני הבדיקה. נתוני הבדיקה צריכים להיות לפחות 30% מנתוני האימון, לכן אספו את 4 הדגימות של 'רעש' ו -4 עד 5 דגימות עבור 'אור דולק' ו'אור כבוי '.
הכשרת המודל
מכיוון שמערך הנתונים שלנו מוכן, כעת אנו יכולים ליצור דחף לנתונים. לשם כך עבור לדף ' צור דחף '. שנה את הגדרות ברירת המחדל של גודל חלון של 1000 ms ל 1200 ms ו -500 ms חלון גדל ל 50 ms. המשמעות היא שהנתונים שלנו יעובדו 1.2 שניות בכל פעם, החל מכל 58ms.
כעת בעמוד ' צור דחף' לחץ על ' הוסף גוש עיבוד' . בחלון הבא בחר בלוק השמע (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)
לאחר אימון המודל הוא יציג את ביצועי האימון. מבחינתי, הדיוק היה 81.1% וההפסד היה 0.45 שאינו ביצועים אידיאליים אבל אנחנו יכולים להמשיך בזה. תוכל להגדיל את ביצועי המודל שלך על ידי יצירת מערך נתונים עצום.
כעת מכיוון שמודל זיהוי הדיבור שלנו מוכן, נפרוס את המודל הזה כספריית Arduino. לפני הורדת המודל כספרייה תוכלו לבדוק את הביצועים על ידי מעבר לדף ' סיווג חי' . תכונת הסיווג החיה מאפשרת לך לבדוק את המודל הן עם נתוני הבדיקה הקיימים שהגיעו עם מערך הנתונים והן על ידי הזרמת נתוני שמע מהטלפון הנייד שלך.
כדי לבדוק את הנתונים באמצעות הטלפון שלך, בחר ' עבור למצב סיווג' בטלפון שלך.
עכשיו כדי להוריד את הדגם כספריית Arduino, עבור לדף ' פריסה ' ובחר ' ספריית Arduino' . כעת גלול מטה ולחץ על ' בניין ' כדי להתחיל בתהליך. זה יבנה ספריית Arduino לפרויקט שלך.
עכשיו הוסף את הספרייה ב- Arduino IDE שלך. לשם כך פתח את IDU של Arduino ואז לחץ על סקיצה> כלול ספרייה> ספריית Add.ZIP
לאחר מכן, טען דוגמה על ידי מעבר לקובץ> דוגמאות> שם הפרויקט שלך - Edge Impulse> nano_ble33_sense_microphone
קוד ארדואינו לזיהוי קולי של ארדואינו
כאן נעשו כמה שינויים בשליטה על ה- LED באמצעות הפקודות הקוליות.
אנו מבצעים כמה שינויים בלולאת הריק () שבה היא מדפיסה את ההסתברות לפקודות. בקוד המקורי הוא מדפיס את כל התוויות וערכיהן יחד.
עבור (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
כדי לשלוט על ה- LED עלינו לשמור את כל הסתברויות הפקודה בשלושה משתנים שונים כדי שנוכל לשים עליהם הצהרות מותנות. אז על פי הקוד החדש אם ההסתברות לפקודת 'אור דולק' היא יותר מ 0.50 אז היא תדליק את ה- LED ואם ההסתברות לפקודה 'light off' תהיה יותר מ- 0.50 מכפי שהיא תכבה את ה- LED.
עבור (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("רעש:"); Serial.println (רעש); } עבור (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("אור כבוי:"); Serial.print (lightoff); } lighton = 1- (רעש + lightoff); Serial.println ("אור דולק:"); Serial.print (lighton); אם (lighton> 0.50) {digitalWrite (led, HIGH); } אם (lightoff> 0.50) {digitalWrite (led, LOW); }
לאחר ביצוע השינויים, העלה את הקוד לארדואינו שלך. פתח את המסך הטורי ב 115200 באוד.
כך תוכלו לבנות זיהוי דיבור באמצעות Arduino ולתת פקודות להפעלת המכשירים.
סרטון עבודה שלם עם ספרייה וקוד מובא להלן.