- โอเพนซอร์สที่เป็นการพัฒนา ระบบรู้จำและระบุเสียงความเร็วสูง บน 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 เพื่อค้นหาช่วงของจุดพีคที่จับคู่กันได้หนาแน่นที่สุด
- คำนวณคะแนนการจับคู่ และจัดเรียงผลลัพธ์ตามคะแนนจากสูงไปต่ำ
ยังไม่มีความคิดเห็น