Kurs içeriği (8 / 10)
- 1 Raspberry Pi ile Tanışma ve Kurulum
- 2 Makine Öğrenmesi Nedir? İlk Modelimiz
- 3 Kamera ve Görüntü İşlemenin Temelleri
- 4 Görüntü Veri Seti Hazırlama
- 5 Görüntü Tanıma Modeli Eğitip Pi’de Çalıştırma
- 6 Mikrofon ve Sesin Temelleri
- 7 Ses Veri Seti Hazırlama
- 8 Ses Tanıma Modeli ile Sesli Komutlar
- 9 Yapay Zekâyı Donanıma Bağlama: LED, Buzzer ve Servo
- 10 Mini Proje: Akıllı Geri Dönüşüm Kutusu
Raspberry Pi ile Makine Öğrenmesi: Görüntü ve Ses Tanıma · Ders 8 / 10
Ses Tanıma Modeli ile Sesli Komutlar
Teachable Machine ses modellerinin Raspberry Pi’de neden güvenilir çalışmadığını inceliyor ve bu ders için Edge Impulse’u seçiyoruz. Ses veri setimizle MFCC tabanlı bir sesli komut modeli eğitiyor, modeli edge-impulse-linux ile Pi’ye indiriyor ve “aç”, “kapat” komutlarını güven eşiğiyle algılayan bir Python programı yazıyoruz.
Bu derste
- Teachable Machine ses modeli ile Edge Impulse yolunu Raspberry Pi açısından karşılaştırır.
- Edge Impulse’ta zaman serisi, MFCC ve sınıflandırma bloklarından oluşan bir impulse tasarlar ve modeli eğitir.
- Modelin başarısını test verisi ve karışıklık matrisiyle değerlendirir.
- edge-impulse-linux araçlarını Raspberry Pi’ye kurar ve modeli .eim dosyası olarak indirir.
- Python SDK’sı ile sesli komutları güven eşiği ve bekleme süresiyle algılayan bir program yazar.
Malzemeler
- Raspberry Pi 5 veya 4 (64 bit Raspberry Pi OS)
- USB mikrofon
- Edge Impulse hesabı ve Ders 7’de yüklenen veri seti
- Node.js ve edge-impulse-linux
- edge_impulse_linux Python paketi
Ders 7’de ses veri setimizi topladık. Şimdi bu sesleri tanıyan bir model eğitip Raspberry Pi’ye “kulak” takıyoruz. Bu derste önce dürüst bir mühendislik kararı vereceğiz: Hangi aracı neden kullanıyoruz?
Dersin Amacı ve Kazanımlar
Bu dersin sonunda:
- Teachable Machine ses modeli ile Edge Impulse yolunu Raspberry Pi açısından karşılaştırabileceksiniz.
- Edge Impulse’ta MFCC tabanlı bir impulse tasarlayıp model eğitebileceksiniz.
- Modelin başarısını test verisi ve karışıklık matrisiyle değerlendirebileceksiniz.
- edge-impulse-linux araçlarını kurup modeli
.eimdosyası olarak indirebileceksiniz. - Sesli komutları güven eşiği ve bekleme süresiyle algılayan bir program yazabileceksiniz.
Gerekli Malzemeler
| Malzeme | Açıklama |
|---|---|
| Raspberry Pi 5 veya 4 | 64 bit Raspberry Pi OS şart: Edge Impulse’un Linux modelleri 32 bit sistemde çalışmaz. |
| USB mikrofon | Ders 7’de kayıt yaptığınız mikrofon |
| Edge Impulse projesi | Ders 7’de veri setini yüklediğiniz proje |
| İnternet bağlantısı | Kurulum ve model indirme için. Model indirildikten sonra Pi internetsiz çalışır. |
💡 İpucu
Edge Impulse’un hazır “noise” ve “unknown” ses örnekleri vardır (Keyword Spotting Dataset). Kendi gürültü ve bilinmeyen kelime kayıtlarınız az kaldıysa bu örneklerden bir kısmını da projenize ekleyebilirsiniz. Komut kelimeleri ise mutlaka sizin ve arkadaşlarınızın sesinden olmalı.
Neden Teachable Machine Değil de Edge Impulse?
Görüntü modelimizi Teachable Machine ile eğittik ve Pi’de sorunsuz çalıştırdık. Teachable Machine’in ses projeleri de var ve TensorFlow Lite olarak dışa aktarılabiliyor. O hâlde neden aynı yoldan gitmiyoruz? Çünkü bu yolu araştırdığımızda Raspberry Pi için şu sorunlarla karşılaştık:
| Konu | Teachable Machine (ses) | Edge Impulse |
|---|---|---|
| Sesin işlenmesi | Model tarayıcıda, tarayıcının kendi ses analiziyle (WebAudio FFT) eğitilir. Dışa aktarılan TFLite modeline bu analizi taklit eden bir ön işleme katmanı eklenir; Pi’de hesaplanan özellikler eğitimdekilerle birebir aynı olmayabilir. | Ses analizi (MFCC) ve model tek bir .eim paketinin içindedir. Eğitimde ve Pi’de aynı kod çalışır. |
| Girdi biçimi | 44 100 Hz’de tam 44 032 örneklik ham ses bekler. 48 000 Hz’de çalışan birçok USB mikrofon için dönüştürme gerekir. | Modelin örnekleme hızını kütüphane bilir; mikrofonu bu hıza göre açar. |
| Pi’de çalıştırma | Resmî Raspberry Pi örneği tflite-support paketine dayanır. Bu paketin Bookworm’daki Python 3.11 için 64 bit ARM sürümü yayımlanmadığından kurulamıyor; kodu elle yazmak gerekiyor. |
Resmî Linux araçları ve Python SDK’sı var; Raspberry Pi 5 resmî olarak destekleniyor. |
| Veri toplama | Kayıtlar bilgisayarın mikrofonuyla yapılır; Pi’deki mikrofon farklı “duyar”. | Veriyi Pi’nin kendi mikrofonundan doğrudan toplayabilir ya da dosya olarak yükleyebilirsiniz. |
Kısacası, Teachable Machine ses modeli Pi’de çalıştırılabilir ama kırılgan bir yoldur; bir sınıf ortamında her öğrencide aynı sonucu verecek kadar güvenilir değildir. Teachable Machine’in ses projeleri tarayıcıda harika çalışır; ortaokul kursumuzda onları bu yüzden kullanıyoruz. Pi’deki sesli komutlar için ise Edge Impulse kullanacağız.
1. Adım: Impulse Tasarımı
Edge Impulse’ta modelin bütün iş akışına impulse denir: ham veriyi pencerelere bölmek, özellik çıkarmak ve sınıflandırmak.
- Projenizde Create impulse sayfasını açın.
- Time series data bloğunda pencere boyutunu (Window size) 1000 ms, frekansı 16000 Hz bırakın; kayıtlarımız zaten bir saniye.
- İşleme bloğu olarak Audio (MFCC), öğrenme bloğu olarak Classification ekleyin ve Save Impulse düğmesine basın.
MFCC, Ders 6’da gördüğümüz spektrogramın insan kulağına göre düzenlenmiş bir hâlidir. Kulağımız düşük frekanslardaki farkları yüksek frekanslardakilerden daha iyi ayırt eder; MFCC de konuşmayı ayırt etmeye yarayan bilgileri öne çıkarır.
2. Adım: Özellik Çıkarma ve Eğitim
- Soldaki menüden MFCC sayfasına gidin. Sağda seçtiğiniz kaydın MFCC görüntüsünü görürsünüz. Ayarları değiştirmeden Generate features sekmesine geçip düğmeye basın.
- İşlem bitince Feature explorer grafiğinde her kayıt bir nokta olarak görünür. Aynı renkteki noktalar kümeler oluşturuyorsa veri setiniz iyi ayrışıyor demektir. Başka bir kümenin ortasında kalmış noktaları tıklayıp dinleyin; yanlış etiketlenmiş bir kayıt olabilir.
- Classifier sayfasında Data augmentation seçeneğini açın. Bu seçenek eğitim sırasında kayıtlara gürültü ekleyerek ve küçük değişiklikler yaparak modelin gerçek ortama daha dayanıklı olmasını sağlar.
- Start training düğmesine basın. Eğitim birkaç dakika sürer.
Eğitim bitince sayfanın altında doğruluk ve bir karışıklık matrisi (confusion matrix) görürsünüz. Matrisin satırları gerçek sınıfı, sütunları modelin tahminini gösterir. Köşegendeki sayılar doğru tahminlerdir. Örneğin “ac” satırında “bilinmeyen” sütununda büyük bir sayı varsa model “aç” komutunu sık sık kaçırıyordur. Son olarak Model testing sayfasında test verisinin hepsini sınıflandırın: Asıl başarı, modelin hiç görmediği bu kayıtlardaki başarıdır.
3. Adım: Raspberry Pi’ye Kurulum
Edge Impulse’un Linux araçları Node.js ile yazılmıştır. Aşağıdaki komutlar Edge Impulse’un Raspberry Pi 5 belgelerindeki komutlardır; Node.js sürümü değişirse güncel komutu oradan kontrol edin:
# 1) Edge Impulse komut satırı araçları (Node.js gerektirir)
sudo apt update
curl -sL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt install -y gcc g++ make build-essential nodejs sox gstreamer1.0-tools \
gstreamer1.0-plugins-good gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps
sudo npm install edge-impulse-linux -g --unsafe-perm
# 2) Python SDK'sı için ses kütüphaneleri (apt) ve paket (yzenv içinde pip)
sudo apt install -y portaudio19-dev python3-pyaudio python3-six
source ~/yzenv/bin/activate
pip install edge_impulse_linux
Python paketi edge_impulse_linux mikrofonu PyAudio ile açar. PyAudio’yu pip ile derlemek yerine apt ile hazır paket olarak kuruyoruz; sanal ortamımız --system-site-packages ile oluşturulduğu için onu görebilir.
Şimdi Pi’yi projeye bağlayıp modeli indirelim:
# Pi'yi projeye bağlayın (ilk seferde e-posta/parola ve proje sorulur)
edge-impulse-linux
# Modeli Pi'de canlı deneyin (Ctrl+C ile çıkılır)
edge-impulse-linux-runner
# Modeli dosya olarak indirin
edge-impulse-linux-runner --download model_ses.eim
chmod +x model_ses.eim
edge-impulse-linux komutu Pi’yi projenize bir “cihaz” olarak ekler. Bu sayede isterseniz Data acquisition sayfasından doğrudan Pi’nin mikrofonuyla yeni kayıt da toplayabilirsiniz. edge-impulse-linux-runner modeli projeden indirip Pi için derler ve mikrofonu dinlemeye başlar; terminalde her pencere için sınıfların olasılıklarını görürsünüz. --download seçeneği ise modeli dosya olarak kaydeder. .eim dosyası ses analizini ve modeli içeren, Pi’de doğrudan çalışan bir programdır.

4. Adım: Sesli Komut Programı
# dosya: sesli_komut.py (Edge Impulse modeliyle "aç" / "kapat" komutlarını algılar)
import os
import time
from edge_impulse_linux.audio import AudioImpulseRunner
KLASOR = os.path.dirname(os.path.abspath(__file__))
MODEL = os.path.join(KLASOR, "model_ses.eim")
CIHAZ = None # None: program mikrofon listesini gösterip numara sorar
ESIK = 0.80 # komut sayılması için gereken en düşük güven
BEKLEME = 1.5 # bir komuttan sonra kaç saniye yeni komut alınmasın
KOMUTLAR = ("ac", "kapat")
son_komut = 0.0
with AudioImpulseRunner(MODEL) as runner:
try:
bilgi = runner.init()
print("Model:", bilgi["project"]["name"])
print("Etiketler:", bilgi["model_parameters"]["labels"])
print("Dinliyorum... (çıkmak için Ctrl+C)")
for sonuc, ses in runner.classifier(device_id=CIHAZ):
olasiliklar = sonuc["result"]["classification"]
etiket = max(olasiliklar, key=olasiliklar.get)
guven = olasiliklar[etiket]
simdi = time.time()
if etiket in KOMUTLAR and guven >= ESIK and simdi - son_komut > BEKLEME:
son_komut = simdi
print(f"KOMUT: {etiket} (%{guven * 100:.0f})")
except KeyboardInterrupt:
print("Durduruldu.")
finally:
runner.stop()
Örnek çıktı: (Raspberry Pi 5 ve USB mikrofonla örnek çıktı. “selected Audio device” satırını Edge Impulse kütüphanesi yazar; CIHAZ = None bırakılırsa bundan önce mikrofon listesi gösterilir ve numara sorulur.)
Model: geri-donusum-sesli-komut
Etiketler: ['ac', 'bilinmeyen', 'gurultu', 'kapat']
Dinliyorum... (çıkmak için Ctrl+C)
selected Audio device: 1
KOMUT: ac (%94)
KOMUT: kapat (%88)
^CDurduruldu.
Program, kütüphanenin classifier() fonksiyonundan sürekli sonuç alır. Kütüphane mikrofondan gelen sesi bir saniyelik pencerelere böler ve pencereyi her seferinde biraz kaydırarak modeli tekrar çalıştırır. Bu yüzden aynı “aç” kelimesi art arda iki üç pencerede yakalanabilir. BEKLEME değişkeni bunu önler: Bir komut algılandıktan sonra 1,5 saniye boyunca yeni komut kabul edilmez. max(olasiliklar, key=olasiliklar.get) ifadesi sözlükte değeri en büyük olan anahtarı, yani en olası etiketi bulur.
⚠️ Önemli Not
“aç” tek heceli, çok kısa bir kelimedir. Tek heceli komutlar “saç”, “ağaç” gibi benzer kelimelerle kolayca karışır; büyük şirketlerin sesli asistanlarında üç heceli uyandırma kelimeleri kullanılmasının nedeni budur. Model çok sık yanılıyorsa “bilinmeyen” sınıfına benzer kelimeler ekleyin, eşiği yükseltin ya da komutu “açıl” gibi daha uzun bir kelimeyle değiştirin. Edge Impulse ücretsiz hesapta da çalışır, ancak eğitim işlerinin süresi sınırlıdır; çok büyük veri setleriyle uzun eğitimler başlatmayın.
Sıra Sizde
- Kolay:
ESIKdeğerini 0.6 ve 0.95 yaparak programı deneyin. Hangisinde komutlar daha sık kaçırılıyor, hangisinde yanlış komut daha sık algılanıyor? Gözlemlerinizi yazın. - Orta: Programı, her algılanan komutu saatiyle birlikte
komutlar.txtdosyasına kaydedecek şekilde değiştirin. - Zor: Bir komutun kabul edilmesi için art arda iki pencerede aynı komutun eşiği geçmesini şart koşun. Bu değişiklik yanlış algılamaları nasıl etkiledi?
Kendini Dene
- Bu derste ses modeli için neden Teachable Machine yerine Edge Impulse kullandık? İki neden yazın.
- Karışıklık matrisinde köşegendeki sayılar neyi gösterir?
- Programdaki
BEKLEMEdeğişkeni olmasaydı ne olurdu?
Cevaplar
- Örneğin: Teachable Machine ses modelinin özellik çıkarma adımı tarayıcıya göre tasarlanmıştır ve Pi’de birebir aynı sonuçları vermeyebilir; resmî Raspberry Pi örneğinin dayandığı paket Bookworm’daki Python sürümü için kurulamıyor. Edge Impulse’ta ise ses analizi ve model tek pakette gelir, Pi 5 resmî olarak desteklenir ve veriyi Pi’nin kendi mikrofonundan toplayabiliriz.
- Doğru tahminleri, yani gerçek sınıfı ile tahmin edilen sınıfı aynı olan örneklerin sayısını gösterir.
- Pencereler birbirinin üzerine bindiği için tek bir “aç” kelimesi art arda birkaç kez algılanabilir; kutu tek komutla birkaç kez açılmaya çalışırdı.