10 điểm bởi xguru 2025-04-04 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Bản triển khai mã nguồn mở bằng Rust của hệ thống nhận diện và định danh âm thanh tốc độ cao lấy cảm hứng từ Shazam
  • Được thiết kế tập trung vào tốc độ, hiệu quả và sự đơn giản, cho phép lập chỉ mục và tìm kiếm tệp âm thanh thông qua CLI

Các tính năng và ưu điểm chính

  • Tốc độ lập chỉ mục và tìm kiếm cao: có thể xử lý nhanh hàng trăm tệp âm thanh
  • Lệnh CLI đơn giản: cung cấp cách sử dụng trực quan thông qua các lệnh indexsearch
  • Triển khai hiệu năng cao dựa trên Rust: sử dụng tài nguyên hệ thống hiệu quả
  • Áp dụng phương pháp dấu vân tay âm thanh tương tự Shazam

Cách hoạt động bên trong

Tiền xử lý (Preprocessing)

  • Chuyển stereo sang mono (lấy trung bình kênh trái/phải)
  • Downsample để giảm khối lượng tính toán: 44.1kHz → 11.025kHz
  • Trước khi downsample, áp dụng bộ lọc thông thấp IIR để loại bỏ các tần số vượt quá tần số Nyquist

Chuyển đổi sang phổ tần (Spectrogram)

  • Sử dụng Short-Time Fourier Transform (STFT)
    • Cửa sổ Hamming 1024 mẫu
    • Chồng lấp 50%
  • Chuyển sang miền thời gian-tần số để trích xuất các đỉnh
    • Chia mỗi cửa sổ thời gian thành các dải tần số và chỉ giữ lại biên độ cao nhất ở mỗi dải
    • Loại bỏ các biên độ thấp hơn trung bình để chỉ giữ lại các đỉnh đặc trưng

Cách lưu trữ dữ liệu dấu vân tay

  • Lưu các đỉnh dưới dạng hàm băm
    • Dựa trên một đỉnh neo, lưu bộ tuple vị trí tương đối với các đỉnh lân cận
    • Có dạng (anchor freq, peak freq, delta time)
    • Có thể chuyển đổi thành số nguyên 32 bit hoặc 64 bit

Thuật toán tìm kiếm và sắp xếp

  • Tạo dấu vân tay từ mẫu đầu vào
  • Tra cứu các dấu vân tay ứng viên trong cơ sở dữ liệu rồi sắp xếp theo thứ tự thời gian
  • Phân tích tính liên tục theo thời gian dựa trên Longest Increasing Subsequence (LIS)
  • Dùng cửa sổ trượt để tìm đoạn có các đỉnh khớp dày đặc nhất
  • Tính điểm khớp và sắp xếp kết quả theo thứ tự điểm từ cao xuống thấp

Chưa có bình luận nào.

Chưa có bình luận nào.