Mündəricat:

Xüsusi Mətbəx Səs Tanımlayıcısı: 4 addım
Xüsusi Mətbəx Səs Tanımlayıcısı: 4 addım

Video: Xüsusi Mətbəx Səs Tanımlayıcısı: 4 addım

Video: Xüsusi Mətbəx Səs Tanımlayıcısı: 4 addım
Video: Mətbəx Mebeli Ucuz Və keyyfiyətli 2024, Noyabr
Anonim
Image
Image
Xüsusi Mətbəx Səs Tanımlayıcısı
Xüsusi Mətbəx Səs Tanımlayıcısı

Bu yaz interaktiv sistemlər kursunda son layihəmiz üçün Support-Vector Machine təsnifatından istifadə edərək mətbəxdə ümumi səsləri müəyyən etmək və görselleştirmek üçün real vaxt sistemi yaratdıq. Sistem audio nümunə götürmə/təsnifat üçün bir dizüstü kompüterdən və vizualizasiya üçün Arduino/nöqtəli matrisdən ibarətdir. Aşağıdakılar, mətbəxinizdən gələn səslər üçün bu sistemin öz versiyasını yaratmaq üçün bir bələdçidir.

Orijinal istifadə vəziyyətimiz, kar və eşitmə qüsurlu bir adamın mətbəxi üçün bir cihaz idi, lakin bu sistem nəzəri olaraq müxtəlif kontekstlərdə bir sıra səsləri müəyyən etmək üçün uyğunlaşdırıla bilər. Mətbəx nisbətən sakit olmağa meylli olduğu və kifayət qədər sadə, fərqli səsləri ehtiva etdiyi üçün başlamaq üçün ideal bir yer idi.

Bu layihə üçün bir GitHub anbarı burada tapa bilərsiniz.

Təchizat

  • Başlıqları olan Arduino Leonardo mikro nəzarətçisi
  • Arduino üçün KEYESTUDIO 16x16 Dot Matrix LED Ekranı
  • Çörək taxtası tullanan tel
  • Mikro USB-dən USB 2.0 kabelinə
  • Jupyter Notebooku olan bir noutbuk (Anaconda quraşdırılması)

    Jupyter Notebook üçün bir başlanğıc bələdçisini burada tapa bilərsiniz

  • Sistemin korpusu üçün xeyli miqdarda uyğun olmayan LEGO kərpic

    (Ancaq həqiqətən bunları istədiyiniz hər hansı bir DIY tikinti materialı ilə əvəz edə bilərsiniz!)

Addım 1: Mətbəx Səs Nümunələrinin Toplanması

Mətbəx Səs Nümunələrinin Toplanması
Mətbəx Səs Nümunələrinin Toplanması

Yuxarıdakı şəkil: Bu toplama prosesindən istifadə edərək çəngəl və bıçağın bir -birinə çırpıldığını qeyd etməkdən alınan səs məlumatları

Real vaxt səslərini müəyyən etmək üçün maşın öyrənmə modelimizi müqayisə üçün keyfiyyətli nümunələrlə təmin etməliyik. Bu proses üçün burada və ya layihəmizin GitHub deposu vasitəsi ilə əldə edilə bilən bir Jupyter dəftəri yaratdıq. Anbarda test məqsədləri üçün iki fərqli mətbəxdən nümunə kolleksiyaları da var.

Addım 1.1: CollectSamples.ipynb notebookunu işləyən Jupyter Notebook qovluğuna kopyalayın və açın.

Adım 1.2: Başlıqlarda verdiyimiz qeydlərə diqqət yetirərək hər bir hüceyrəni tək -tək işlədin. "Nümunə Qeyd" adlı birinə çatanda dayandırın.

Qeyd: Bu notebookda bir neçə Python kitabxanası istifadə olunur və layihəyə uğurla idxal edilməzdən əvvəl hər birinin quraşdırılması tələb olunur. Jupyter Notebook -da kitabxana qurmaq üçün bir təlimatı burada tapa bilsəniz də, bunu əl ilə edə bilərsiniz.

Addım 1.3: Nümunələrinizi bu layihə üçün iş kataloqunuzda saxlamaq üçün boş bir kataloq yaradın.

Addım 1.4: "Nümunə Qeyd" xanasındakı SAMPLES_LOCATION dəyişənini boş qovluğunuzun yerləşdiyi yerə uyğunlaşdırın.

Addım 1.5: SOUND_LABELS dəyişəninə istədiyiniz qədər səs əlavə edin və ya silin.

Nümunə qeyd kodunun işləməsi üçün bu dəyişənin hər sətri vergüllə və aşağıdakı formada ayrılmalıdır:

'ts': Səs ("TargetedSound", "ts")

Addım 1.6: Bütün etiketlər əlavə edildikdə, nümunə toplama prosesinə başlamaqla "Nümunə Qeyd" xanasının qiymətləndirilməsi. Hüceyrənin çıxışında, etiketlərdə hər bir səslə əlaqələndirdiyiniz qısa kodu daxil etməyiniz istənəcək (yəni TargetedSound üçün "ts"). Bunu hələlik etməyin.

Addım 1.7: Laptopunuzu mətbəxə aparın və bitmiş sistemi yerləşdirmə ehtimalınız olan yerə qoyun. Bu yer yaxşı səs toplanması üçün mərkəzi olmalı və qurudulmalı və elektronikanızı qorumaq üçün mümkün olan dağılmalardan uzaq olmalıdır.

Addım 1.8: İlk hədəf səsinizi hazırlayın. Bu bir soba taymeri bipidirsə, taymeri bir dəqiqəyə təyin edə və növbəti addıma keçməzdən əvvəl 20 saniyəyə qədər saymasını gözləyə bilərsiniz.

Addım 1.9: Etiket kodunu istəyə daxil edin (yəni "ts") və Enter/Return düyməsini basın.

Sistem, otaqdakı səs -küydən fərqli bir səsli hadisə üçün dinləməyə başlayacaq. Bu səs hadisəsini hiss etdikdən sonra, otaqdakı səs ətraf mühit səviyyəsinə qayıtana qədər qeyd etməyə başlayacaq. Daha sonra səsi 16 bitlik WAV faylı olaraq SAMPLES_LOCATION-da müəyyən edilmiş qovluğa format şəklində saxlayacaq:

TargetedSound _#_ captured.wav

Bu fayl adının # hissəsi topladığınız hədəflənmiş səs nümunələrinin sayına uyğun gəlir. WAV faylı saxlanıldıqdan sonra, istək təkrarlanacaq və hüceyrənin tək bir icrasında eyni səsin bir neçə nümunəsini toplamağa imkan verəcək.

Bu fayl adını dəyişməyin. Növbəti addım üçün vacibdir.

Addım 1.10: Hər səsdən 5-10 nümunə toplanana qədər 1.8 və 1.9 addımlarını təkrarlayın.

Addım 1.11: İşdən çıxmaq üçün bitirdikdə "x" daxil edin.

XƏBƏRDARLIQ: Bu şəkildə hüceyrədən çıxmamaq Notbukun çökməsinə səbəb ola bilər. Bu vəziyyətdə, Notebook nüvəsi sıfırlanmalı və hər bir hüceyrə yenidən yuxarıdan işləməlidir.

Addım 1.11 (İsteğe bağlı): İstədiyiniz bütün məlumatları aldığınızdan əmin olmaq üçün "Tez Səs Vizualizasiyası" hüceyrəsindəki fərdi faylların WAV məlumatlarını yoxlayın.

Bəzi məsləhətlər:

  • Mətbəxiniz sakit olduqda yazın.
  • Bir anda yalnız bir səs yazın. Sistem səslərin üst -üstə düşməsini ayırd edə bilmir.
  • Hər bir sağlam sınağı mümkün qədər ardıcıl etməyə çalışın. Bu identifikasiyanın düzgünlüyünə kömək edəcək.
  • Qeyd hüceyrəsinin yenidən qiymətləndirilməsi fayl adındakı # dəyərini sıfırlayacaq və # ilə uyğun olan mövcud faylların üzərinə yazacaq. Bir səsin bütün nümunələrini bir anda yazmağın ən asan yolunu tapdıq, sonra isə qeyd hüceyrəsini dayandırdıq.
  • Sistem hədəf səsinizi almırsa, THRESHOLD dəyərini aşağı salmağa çalışın (başlamaq üçün 30 olaraq təyin edin) və hüceyrəni yenidən qiymətləndirin.
  • Əgər qeyd olunan səsin xaricində başqa səslər varsa, THRESHOLD dəyərini artırmağa çalışın (başlamaq üçün 30 olaraq təyin edin) və hüceyrəni yenidən qiymətləndirin.

Addım 2: Arduino/Matrix Ekranının hazırlanması

Arduino/Matrix Ekranının hazırlanması
Arduino/Matrix Ekranının hazırlanması
Arduino/Matrix Ekranının hazırlanması
Arduino/Matrix Ekranının hazırlanması
Arduino/Matrix Ekranının hazırlanması
Arduino/Matrix Ekranının hazırlanması

Sonra Arduino Leonardo və KEYESTUDIO 16x16 LED nöqtə matrisli ekran istifadə edərək vizualizasiya sistemini quracağıq. Bu təsnifat modelinin aşkar edilmiş səslər haqqında proqnozunu çıxarmaq üçündür. Əvvəlki kimi, həm burada, həm də layihənin GitHub deposunda bütün lazımi faylları təqdim etdik.

Addım 2.1: Arduino və LED matrisini yuxarıdakı diaqrama uyğun olaraq bağlayın. KEYESTUDIO, nöqtə matrisinə qoşulmaq üçün telləri ehtiva edir, lakin bu telləri Arduino -ya bağlamaq üçün çörək taxtası tullanan tellərə ehtiyac olacaq.

Addım 2.2: Ardunio IDE -dən istifadə edərək "arduino_listener.ino" nu açın və Leonardoya yükləyin. Düzgün bağlandıqda, yuxarıdakı şəkildə göstərildiyi kimi "dinləmə" simgesini (Wi-Fi kimi görünür) görməlisiniz.

Addım 2.3: Hər bir hədəf səsiniz üçün göstərmək istədiyiniz nişanları hazırlayın. Hansı LED -lərin yandırılacağını bilmək üçün simge Arduinodan matrisə bayt olaraq göndərilməlidir. Məsələn, qəhvə fincan ikonumuz (yuxarıdakı şəkildə) bu formatda matrisə göndərilir:

{

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

Dot2Pic onlayn alətindən istifadə edərək nişanlarımızı 16 sütun, 16 satır və "monoxromatik, bayt başına 8 piksel, şaquli parametr" ilə çəkdik. Bizə "sample_icon_bytes.txt" massivində rast gəlmək olar.

QEYD: Yüklənmiş fayllarla avtomatik olaraq bunu edə biləcək onlayn vasitələr də ola bilər.

Addım 2.4: Hər bir nişanı çəkin. Rəsmi bitirdikdən sonra "Diziyə çevir" seçin.

Addım 2.5: "arduino_listening.ino" kodunun yuxarısında təyin olunan lazımsız nişanları istədiyiniz kimi dəyişdirin. Hansının olduğunu xatırlamaq üçün nişanı təsvir edən bir şərh əlavə etməyinizə əmin olun!

Addım 2.6: Yeni kodu Arduinoya yükləyin. Dosyanı hələ bağlamayın, növbəti addım üçün bizə lazım olacaq.

Addım 3: Təsnifatçının işə salınması və səslərin müəyyən edilməsi

Təsnifatçının işlədilməsi və səslərin müəyyən edilməsi
Təsnifatçının işlədilməsi və səslərin müəyyən edilməsi
Təsnifatçının işlədilməsi və səslərin müəyyən edilməsi
Təsnifatçının işlədilməsi və səslərin müəyyən edilməsi

İndi sistemi bir araya gətirməyin vaxtı gəldi. Təsnifat boru kəməri, Arduino ünsiyyəti və canlı audio çəkilişləri burada təqdim edilmiş və ya layihəmizin GitHub deposundan əldə edilə bilən tək bir Arduino notbuku vasitəsi ilə aparılır.

Addım 3.1: FullPipeline.ipynb notebookunu işləyən Jupyter Notebook qovluğuna kopyalayın və açın.

Adım 3.2: Başlıqlarda verdiyimiz bütün qeydlərə diqqət yetirərək hər bir hüceyrəni tək -tək işlədin. Çıxış gözlənilmir. "Təlim Verilərini Yüklə" adlı hüceyrəyə çatanda dayandırın.

Addım 3.3: "Təlim Verilərini Yükləyin" hüceyrəsindəki SAMPLES_LOCATION_ROOT dəyişənini əvvəlki nümunə kataloqunuzun ana qovluğuna düzəldin. Sonra, SAMPLES_DIR_NAME dəyişənini kataloqunuzun adına dəyişdirin. CollectSamples.ipynb -də yeri aşağıdakı kimi təyin etmisinizsə:

SAMPLES_LOCATION = "/İstifadəçilər/xxxx/Sənədlər/KitchenSoundClassifier/MySamples/NewDir"

İndi bu dəyişənləri təyin edərdiniz:

SAMPLES_LOCATION_ROOT = "/İstifadəçilər/xxxx/Sənədlər/KitchenSoundClassifier/MySamples/" SAMPLES_DIR_NAME = "NewDir"

Bu, qeyri -dəqiqlik halında təsnifatçının sürətli dəyişməsinə imkan yaratdıq. Məlumatlarınızı tənzimləmək üçün müxtəlif nümunə kolleksiyaları arasında keçid edə bilərsiniz.

Addım 3.4: Hüceyrəni qiymətləndirin. Hər bir kolleksiyanın uğurla yükləndiyini görməlisiniz.

Adım 3.5: Başlıqlarda verdiyimiz bütün qeydlərə diqqət yetirərək hər bir hüceyrəni tək -tək işləməyə davam edin.

Addım 3.6: "Mesajlaşma Arduino" hüceyrəsinə çatanda dayandırın. PORT_DEF dəyişənində kompüterinizin Arduino ilə əlaqə qurmaq üçün istifadə edəcəyi serial portu təyin edin. Bunu Arduino IDE -də tapa bilərsiniz və Alətlər> Limana gedin.

Ətraflı məlumatı burada tapa bilərsiniz.

Addım 3.8: Arduino IDE -ni yenidən açın. Nişanlar üzərində dəyişiklik etdiyiniz yerlərdə, sıra dəyərinin yanındakı hərfləri qeyd edin, lakin dəyişdirməyin. Aşağıdakı nümunədə bu "g" dir.

// işarəsiz char 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,};

Addım 3.7: (Notebookun "Mesajlaşma Arduino" hücrəsinə qayıdın) Self.sounds lüğətindəki etiketləri nümunələrinizi yazarkən istifadə etdiyiniz etiketlərə uyğun olaraq dəyişdirin, hər bir etiketin əvvəlki qeyd etdiyiniz tək hərfə uyğun olduğunu yoxlayın. addım "Qeyd" və "Dinləmə" həm əsas sistem funksiyalarının bir hissəsidir və dəyişdirilməməlidir. Arduino kodunda bir neçə əlavə dəyişiklik etməkdən əmin olmadığınız halda ikinci hərfi dəyişdirməyin, əks halda Arduino/matrix ilə ünsiyyəti pozacaq.

Addım 3.8: Əsas funksiyanı işə salın! Kod təlim məlumatlarını alacaq, əsas xüsusiyyətlərini çıxaracaq, boru kəmərinə daxil edəcək, bir təsnifat modeli quracaq və sonra səs hadisələrini dinləməyə başlayacaq. Birini hiss etdikdə, matrisin bir qeyd simvoluna (içərisində dairəsi olan kvadrat) dəyişdiyini görəcəksiniz və bu məlumatları seqmentləşdirəcək və onu modelə daxil edəcək. Modelin proqnozlaşdırdığı hər şey bir neçə saniyə sonra matris ekranında görünəcək.

Aşağıdakı hüceyrənin çıxışını izləyə bilərsiniz. Nə qədər dəqiq əldə edə biləcəyinizə baxın!

Addım 4: LEGO mənzilinin yaradılması

LEGO mənzilinin yaradılması
LEGO mənzilinin yaradılması
LEGO mənzilinin yaradılması
LEGO mənzilinin yaradılması
LEGO mənzilinin yaradılması
LEGO mənzilinin yaradılması

Bu əyləncəli hissədir! Bütün ciddi maşın öyrənmə addımlarını etdiniz və bütün sistemi sona çatdırdınız və indi bir mükafat olaraq LEGO ilə oynayacaqsınız. Burada detallı bir proses yoxdur. Ümumi dizaynı çox narahat etmədən burada və orda bəyəndiyimiz blokları əlavə etdik və nəticədə xoşbəxt olduq.

Şəkillərimizin mətbəxinizə xas olan öz yaradıcı mənziliniz üçün ilham mənbəyi olmasına icazə verin. Arduino'yu və naqillərin çoxunu boş bir qutuya qoyduq, sonra yuxarıdakı matris ekranını çıxıntılarla təmin etdik. İşarələri daha aydın etmək üçün hiss etdiyimiz işığı bir az yaymaq üçün ekrana bir az kağız əlavə etdik.

Tövsiyə: