• โอเพนซอร์สที่เป็นการพัฒนา ระบบรู้จำและระบุเสียงความเร็วสูง บน Rust ซึ่งได้รับแรงบันดาลใจจาก Shazam
  • ออกแบบโดยเน้นความเร็ว ประสิทธิภาพ และความเรียบง่าย และสามารถทำ การทำดัชนีและค้นหาไฟล์เสียง ผ่าน CLI ได้

คุณสมบัติและข้อดีหลัก

  • ความเร็วสูงในการทำดัชนีและค้นหา: ประมวลผลไฟล์เสียงหลายร้อยไฟล์ได้อย่างรวดเร็ว
  • คำสั่ง CLI ที่เรียบง่าย: ใช้งานได้อย่างเข้าใจง่ายผ่านคำสั่ง index และ search
  • การพัฒนาประสิทธิภาพสูงบน Rust: ใช้ทรัพยากรระบบได้อย่างมีประสิทธิภาพ
  • ใช้ วิธีทำลายนิ้วมือเสียงแบบคล้าย Shazam

วิธีการทำงานภายใน

การประมวลผลล่วงหน้า (Preprocessing)

  • แปลงสเตอริโอเป็นโมโน (เฉลี่ยช่องซ้าย/ขวา)
  • ลดอัตราการสุ่มสัญญาณเพื่อลดภาระการคำนวณ: 44.1kHz → 11.025kHz
  • ก่อนการลดอัตราการสุ่มสัญญาณ จะใช้ตัวกรอง IIR low-pass เพื่อตัดความถี่ที่สูงกว่า Nyquist

การแปลงเป็นสเปกโตรแกรม

  • ใช้ Short-Time Fourier Transform (STFT)
    • หน้าต่าง Hamming ขนาด 1024 ตัวอย่าง
    • ซ้อนทับกัน 50%
  • แปลงเป็นโดเมนเวลา-ความถี่เพื่อดึงจุดพีค
    • แบ่งแต่ละหน้าต่างเวลาออกเป็นย่านความถี่ และเก็บไว้เฉพาะแอมพลิจูดที่สูงที่สุดในแต่ละย่าน
    • ลบแอมพลิจูดที่ต่ำกว่าค่าเฉลี่ยออกเพื่อคงไว้เฉพาะจุดพีคของคุณลักษณะ

วิธีจัดเก็บข้อมูลลายนิ้วมือ

  • จัดเก็บจุดพีคในรูปของแฮช
    • ใช้จุดพีค anchor หนึ่งจุดเป็นเกณฑ์ และจัดเก็บตำแหน่งสัมพัทธ์กับจุดพีครอบข้างเป็นทูเพิล
    • อยู่ในรูปแบบ (anchor freq, peak freq, delta time)
    • แปลงเป็นจำนวนเต็ม 32 บิตหรือ 64 บิตได้

อัลกอริทึมการค้นหาและจัดเรียง

  • สร้างลายนิ้วมือจากตัวอย่างอินพุต
  • ค้นหาลายนิ้วมือที่เป็นผู้สมัครจากฐานข้อมูล แล้วจัดเรียงตามลำดับเวลา
  • วิเคราะห์ความต่อเนื่องเชิงเวลาด้วย Longest Increasing Subsequence
  • ใช้ sliding window เพื่อค้นหาช่วงของจุดพีคที่จับคู่กันได้หนาแน่นที่สุด
  • คำนวณคะแนนการจับคู่ และจัดเรียงผลลัพธ์ตามคะแนนจากสูงไปต่ำ

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น