תוכן עניינים:

מזהה סאונד למטבח מותאם אישית: 4 שלבים
מזהה סאונד למטבח מותאם אישית: 4 שלבים

וִידֵאוֹ: מזהה סאונד למטבח מותאם אישית: 4 שלבים

וִידֵאוֹ: מזהה סאונד למטבח מותאם אישית: 4 שלבים
וִידֵאוֹ: חדר רחצה מהאגדות! תעלות ניקוז ואמבטיית Free Standing! 2024, נוֹבֶמבֶּר
Anonim
Image
Image
מזהה קול מותאם אישית למטבח
מזהה קול מותאם אישית למטבח

עבור פרויקט הגמר שלנו בקורס מערכות אינטראקטיביות באביב הקרוב, יצרנו מערכת בזמן אמת לזיהוי וצגים של צלילים נפוצים במטבח באמצעות סיווג מכונת תמיכה-וקטור. המערכת מורכבת ממחשב נייד לדגימת או סיווג אודיו ותצוגת מטריקס Arduino/dot להדמיה. להלן מדריך ליצירת גרסה משלך של מערכת זו לצלילים מהמטבח שלך.

מקרה השימוש המקורי שלנו היה כמכשיר למטבח של אדם חירש וכבד שמיעה, אך תיאורטית ניתן היה להתאים מערכת זו לזיהוי קבוצת צלילים במגוון הקשרים. המטבח היה מקום אידיאלי להתחיל בו, מכיוון שהוא נוטה להיות שקט יחסית ומכיל כמות סבירה של צלילים פשוטים ומובחנים.

ניתן למצוא כאן מאגר GitHub לפרויקט זה.

אספקה

  • מיקרו -בקר ארדואינו לאונרדו עם כותרות
  • תצוגת LED KEYESTUDIO 16x16 Dot Matrix עבור Arduino
  • חוט מגשר לוח
  • כבל מיקרו USB ל- USB 2.0
  • מחשב נייד עם מחברת Jupyter (התקנת אנקונדה)

    ניתן למצוא כאן מדריך למתחילים למחברת Jupyter

  • כמות ניכרת של לבני LEGO שאינן תואמות לדיור המערכת

    (אבל באמת שאתה יכול להחליף אותם עם כל חומר בניין DIY שאתה רוצה!)

שלב 1: איסוף דוגמאות צליל למטבח

איסוף דוגמאות צליל מטבח
איסוף דוגמאות צליל מטבח

איור למעלה: נתוני שמע שנלקחו מהקלטת מזלג וסכין שנצמדו יחד באמצעות תהליך איסוף זה

על מנת לזהות צלילים בזמן אמת, עלינו לספק למודל הלמידה המכונה שלנו דוגמאות איכותיות להשוואה. יצרנו מחברת Jupyter לתהליך זה, שניתן לגשת אליה כאן או דרך מאגר GitHub של הפרויקט שלנו. המאגר מכיל גם אוספי דוגמאות משני מטבחים שונים למטרות בדיקה.

שלב 1.1: העתק את מחברת CollectSamples.ipynb לספריית Jupyter Notebook הפועלת שלך ופתח אותה.

שלב 1.2: הפעל כל תא אחד אחד, ושם לב לכל ההערות שסיפקנו בכותרות. עצור כאשר אתה מגיע לאחד שכותרתו "הקלטה לדוגמא".

הערה: מספר ספריות פייתון משמשות במחברת זו, וכל אחת מהן דורשת התקנה לפני שניתן יהיה לייבא אותן לפרויקט בהצלחה. אתה מוזמן לעשות זאת באופן ידני, אם כי ניתן למצוא כאן מדריך להתקנת ספריה בתוך מחברת Jupyter.

שלב 1.3: צור ספרייה ריקה לאחסון הדגימות שלך בספריית העבודה שלך לפרויקט זה.

שלב 1.4: ערוך את משתנה SAMPLES_LOCATION בתא "הקלטת דוגמה" כך שיתאים למיקום הספרייה הריקה שלך.

שלב 1.5: הוסף או הסר צלילים רבים ככל שתרצה למשתנה SOUND_LABELS.

על מנת שקוד ההקלטה לדוגמא יעבוד, יש להפריד בין כל שורה של משתנה זה בפסיק ובטופס הבא:

'ts': צליל ("TargetedSound", "ts")

שלב 1.6: כאשר נוספו כל התוויות, הערכת התא "הקלטת דוגמאות" עם התחלת תהליך איסוף הדגימות. בפלט התא, תתבקש להזין את הקוד הקצר שאתה משייך לכל צליל בתוויות (כלומר, "ts" עבור TargetedSound). אל תעשה זאת עדיין.

שלב 1.7: קח את המחשב הנייד שלך למטבח והנח אותו באזור בו סביר להניח שתציב את המערכת המוגמרת. מיקום זה צריך להיות מרכזי לאיסוף אודיו טוב, ויבש והרחק מכל נשפך אפשרי כדי להגן על האלקטרוניקה שלך.

שלב 1.8: הכינו את הצליל הממוקד הראשון שלכם. אם זהו צפצוף טיימר בתנור, תוכל להגדיר את הטיימר לדקה אחת ולחכות עד שיספור עד 20 שניות בערך לפני שתמשיך לשלב הבא.

שלב 1.9: הקלד את קוד התווית בשורת הפקודה (כלומר, "ts") והקש Enter/Return.

המערכת תתחיל להאזין לאירוע צליל הנבדל מרעש הסביבה של החדר. עם חישה של אירוע צליל זה, הוא יתחיל להקליט עד שהוא יחוש שהצליל בחדר יחזור לרמות הסביבה. לאחר מכן הוא ישמור את השמע כקובץ WAV של 16 סיביות בספרייה המזוהה ב- SAMPLES_LOCATION בפורמט:

TargetedSound _#_ capture.wav

החלק # של שם הקובץ הזה תואם את מספר הדגימות של הצליל הממוקד שאספת. לאחר שמירת קובץ ה- WAV, ההנחיה תחזור על עצמה ותאפשר לך לאסוף מספר דוגמאות של אותו צליל בביצוע יחיד של התא.

אין לשנות את שם הקובץ הזה. זה חשוב לשלב הבא.

שלב 1.10: חזור על שלבים 1.8 ו -1.9 עד שאספת 5-10 דוגמאות מכל צליל.

שלב 1.11: הזן "x" בסיום יציאת הביצוע.

אזהרה: אי יציאה מהתא בדרך זו עלולה לגרום לקריסת המחשב הנייד. במקרה זה, יש לאפס את גרעין המחברת ולפעול כל תא שוב מלמעלה.

שלב 1.11 (אופציונלי): בדוק את נתוני WAV של קבצים בודדים בתא "ויזואליזציה קולית מהירה" כדי לוודא שצילמת את כל המידע הרצוי.

כמה טיפים:

  • הקלט כאשר המטבח שלך שקט.
  • הקלט רק צליל אחד בבת אחת. המערכת לא יכולה להבחין בחפיפה בצלילים.
  • נסה להפוך כל ניסוי קול כמה שיותר עקבי. זה יעזור לדיוק הזיהוי.
  • הערכה מחדש של תא ההקלטה תאפס את ערך ה- # בשם הקובץ ותחליף את כל הקבצים הקיימים התואמים את מספר זה. מצאנו שהכי קל להקליט את כל הדגימות של צליל אחד בבת אחת, ואז לעצור את תא ההקלטה.
  • אם המערכת לא קולטת את הצליל הממוקד שלך, נסה להוריד את ערך ה- THRESHOLD (הגדר ל- 30 כדי להתחיל) והערך מחדש את התא.
  • אם ההקלטה מופעלת על ידי צלילים אחרים מחוץ לאחד הממוקד, נסה להעלות את ערך ה- THRESHOLD (הגדר ל- 30 כדי להתחיל) והערך מחדש את התא.

שלב 2: הכנת תצוגת Arduino/Matrix

הכנת תצוגת Arduino/Matrix
הכנת תצוגת Arduino/Matrix
הכנת תצוגת Arduino/Matrix
הכנת תצוגת Arduino/Matrix
הכנת תצוגת Arduino/Matrix
הכנת תצוגת Arduino/Matrix

לאחר מכן, אנו הולכים להקים את מערכת ההדמיה באמצעות תצוגת מטריצת נקודות LED של Arduino Leonardo ו- KEYESTUDIO 16x16. זה כדי להוציא את תחזית מודל הסיווג של צלילים שזוהו. כמו בעבר, סיפקנו את כל הקבצים הנדרשים הן כאן והן במאגר GitHub של הפרויקט.

שלב 2.1: חברו את מטריצת Arduino ו- LED על פי התרשים לעיל. KEYESTUDIO כולל חוטים לחיבור למטריצת הנקודות שלהם, אך יהיה צורך בחוטי מגשר של קרש לחם לחיבור חוטים אלה ל- Arduino

שלב 2.2: פתח את "arduino_listener.ino" באמצעות מזהה Ardunio והעלה אותו לאונרדו. אם מחוברים כראוי, אתה אמור לראות את סמל "האזנה" (נראה כמו Wi-Fi) כפי שמוצג בתמונה למעלה.

שלב 2.3: הכינו את הסמלים שתרצו להציג עבור כל אחד מצלילי המטרה שלכם. כדי לדעת אילו נוריות להדליק, יש לשלוח את הסמל מהארדואינו למטריצה כמערך בתים. לדוגמה, סמל כוס הקפה שלנו (בתמונה למעלה) נשלח למטריצה בפורמט זה:

{

0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xbb, 0x5b, 0xeb, 0xfb, 0xfb, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xb, 0xb, 0xb, 0xb 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff};

ציירנו את הסמלים שלנו באמצעות הכלי המקוון Dot2Pic, עם 16 עמודות, 16 שורות ו"מונוכרומטי, 8 פיקסלים לבייט, הגדרה אנכית "שנבחרו מהתפריט הנפתח. שלנו ניתן למצוא במערך "sample_icon_bytes.txt".

הערה: ייתכנו גם כלים מקוונים שיכולים לעשות זאת באופן אוטומטי עם קבצים שהועלו.

שלב 2.4: צייר כל סמל. בסיום הציור, בחר "המר למערך".

שלב 2.5: החלף סמלים מיותרים המוגדרים בחלק העליון של הקוד "arduino_listening.ino" כרצונך. הקפד להוסיף הערה המתארת את הסמל כך שתזכור איזו היא!

שלב 2.6: העלה את הקוד החדש ל- Arduino. אל תסגור את הקובץ עדיין, נזדקק לו לשלב הבא.

שלב 3: הפעלת המסווג וזיהוי צלילים

הפעלת המסווג וזיהוי צלילים
הפעלת המסווג וזיהוי צלילים
הפעלת המסווג וזיהוי צלילים
הפעלת המסווג וזיהוי צלילים

עכשיו הגיע הזמן לחבר את המערכת. צינור הסיווג, תקשורת ארדואינו וצילום אודיו חי מתבצעים כולם באמצעות מחברת ארדואינו אחת, שסופקה כאן או שניתן לגשת אליה באמצעות מאגר GitHub של הפרויקט שלנו.

שלב 3.1: העתק את מחברת FullPipeline.ipynb לספריית Jupyter Notebook הפועלת שלך ופתח אותה.

שלב 3.2: הפעל כל תא אחד אחד, ושם לב לכל ההערות שסיפקנו בכותרות. לא צפוי תפוקה. עצור כאשר אתה מגיע לתא שכותרתו "טען את נתוני האימון".

שלב 3.3: ערוך את המשתנה SAMPLES_LOCATION_ROOT בתא "טען את נתוני האימון" לספריית האב של מיקום מדריך הקודם שלך. לאחר מכן, שנה את המשתנה SAMPLES_DIR_NAME לשם הספרייה שלך. אז אם הגדרת את המיקום ב- CollectSamples.ipynb ל:

SAMPLES_LOCATION = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/NewDir"

כעת היית מגדיר משתנים אלה ל:

SAMPLES_LOCATION_ROOT = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/" SAMPLES_DIR_NAME = "NewDir"

עשינו זאת כדי לאפשר שינויים מהירים במסווג במקרים של חוסר דיוק. אתה יכול לעבור בין אוספי דוגמאות שונים כדי לכוון את הנתונים שלך.

שלב 3.4: להעריך את התא. אתה אמור לראות כל אוסף נטען בהצלחה.

שלב 3.5: המשך להפעיל כל תא אחד אחד, תוך שימת לב לכל ההערות שסיפקנו בכותרות.

שלב 3.6: עצור כאשר אתה מגיע לתא "Arduino Messaging". הגדר את היציאה הטורית שהמחשב שלך ישמש לתקשורת עם ה- Arduino במשתנה PORT_DEF. ניתן למצוא זאת ב- IDE של Arduino ולעבור אל כלים> יציאה.

מידע נוסף ניתן למצוא כאן.

שלב 3.8: פתח מחדש את IDE Arduino שלך. במקומות בהם ביצעת שינויים בסמלים, רשום את האות שליד ערך המערך, אך אל תשנה אותה. בדוגמה למטה, זהו "g".

// סילוק אשפה ללא תווים חתומים [1] [32] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf7, 0xfb, 0xff, 0xfe, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff,};

שלב 3.7: (חזרה לתא "Arduino Messaging" של המחברת) שנה את התוויות במילון הצלילים self.so כך שיתאימו לתוויות שבהן השתמשת בהקלטת הדגימות שלך, וודא שכל תווית מתאימה לאות היחידה שציינת בעבר שלב. "הקלטה" ו"האזנה "הן חלק מפונקציונליות הליבה של המערכת ואין לשנותן. אין לשנות את האות השנייה אלא אם כן אתה מרגיש בטוח לבצע כמה שינויים נוספים גם בקוד הארדואינו, מכיוון שהוא יבלבל את התקשורת עם הארדואינו/מטריצה אחרת.

שלב 3.8: הפעל את הפונקציה הראשית! הקוד יתפוס את נתוני האימון, יביא את תכונות המפתח שלו, יזין אותם לצינור, יבנה מודל סיווג, ואז יתחיל להאזין לאירועי צליל. כאשר הוא יחוש אחד, תראה את המטריצה משתנה לסמל הקלטה (ריבוע עם עיגול בפנים) והוא יפלח את הנתונים האלה ויזין אותם במודל. כל מה שהדגם חוזה יופיע כעבור מספר שניות בתצוגת המטריצה.

תוכל לעקוב אחר התפוקה של התא להלן. תראה כמה מדויק אתה יכול לקבל את זה!

שלב 4: יצירת דיור לגו

יצירת דיור לגו
יצירת דיור לגו
יצירת דיור לגו
יצירת דיור לגו
יצירת דיור לגו
יצירת דיור לגו

זה החלק המהנה! עשית את כל השלבים הרציניים של למידת מכונה והפעלת את כל המערכת מקצה לקצה, ועכשיו אתה יכול לשחק עם LEGO כפרס. אין כאן הרבה תהליך לפרט. פשוט הוספנו בלוקים שאהבנו פה ושם מבלי לדאוג יותר מדי לעיצוב הכללי, ובסופו של דבר שמחנו על הדרך שבה זה יצא.

אפשרו לתמונות שלנו לשמש השראה לדיור יצירתי משלכם הייחודי למטבח שלכם. שמנו את הארדואינו ואת רוב החיווט במארז חלול, ולאחר מכן הבטחנו את תצוגת המטריצה למעלה עם תלייות. הוספנו מעט נייר על גבי התצוגה כדי לפזר מעט את האור אשר הרגשנו שהבהיר את הסמלים.

מוּמלָץ: