- Shazam'dan ilham alan yüksek hızlı ses tanıma ve kimlik belirleme sisteminin Rust ile yazılmış açık kaynak bir uygulaması
- Hız, verimlilik ve sadeliğe odaklanarak tasarlanmıştır; CLI üzerinden ses dosyalarının indekslenmesi ve aranması yapılabilir
Başlıca özellikler ve avantajlar
- Yüksek hızlı indeksleme ve arama performansı: Yüzlerce ses dosyasını hızlıca işleyebilir
- Basit CLI komutları:
index ve search komutlarıyla sezgisel bir kullanım sunar
- Rust tabanlı yüksek performanslı uygulama: Sistem kaynaklarını verimli kullanır
- Shazam'a benzer bir ses parmak izi yöntemi benimser
İç çalışma şekli
Ön işleme (Preprocessing)
- Stereo sesi mono'ya dönüştürme (sol/sağ kanal ortalaması)
- Hesaplama yükünü azaltmak için downsampling: 44.1kHz → 11.025kHz
- Downsampling öncesinde, Nyquist frekansının üzerini kaldırmak için IIR low-pass filtre uygulanır
Spektrogram dönüşümü
- Short-Time Fourier Transform (STFT) kullanır
- 1024 örneklik Hamming penceresi
- %50 overlap
- Zaman-frekans alanına dönüştürerek peak'leri çıkarır
- Her zaman penceresini frekans bantlarına böler ve her bantta yalnızca en yüksek genliği korur
- Ortalama altındaki genlikleri kaldırarak yalnızca karakteristik peak'leri tutar
Parmak izi verisinin saklanma yöntemi
- Peak'leri hash olarak oluşturup saklar
- Bir anchor peak'i temel alarak çevredeki peak'lerle göreli konumları tuple olarak saklar
(anchor freq, peak freq, delta time) biçimindedir
- 32 bit veya 64 bit tamsayıya dönüştürülebilir
Arama ve sıralama algoritması
- Girdi örneğinden parmak izi oluşturur
- Veritabanında aday parmak izlerini sorgulayıp zaman sırasına göre sıralar
- Longest Increasing Subsequence (LIS) tabanlı zamansal süreklilik analizi
- Sliding window kullanarak en yoğun eşleşen peak aralığını bulur
- Eşleşme puanını hesaplar ve sonuçları yüksek puandan düşüğe sıralar
Henüz yorum yok.