SilentVoice AI อ่านริมฝีปากแปลเป็นคำพูดด้วย TensorFlow Lite

SilentVoice Lip Reading AI System Using Web Camera and TensorFlow Lite
SilentVoice ระบบ Edge AI ตรวจจับการขยับริมฝีปากผ่านกล้องเรียลไทม์ แปลงเป็นคำพูดสำคัญช่วยเหลือผู้ป่วยและผู้พิการ โดย Yash Sharda

สวัสดีเพื่อนๆ ชาว Maker, สาย AI และผู้พัฒนาเทคโนโลยีอัจฉริยะทุกคนครับ! 🤐🤖 เคยจินตนาการไหมครับว่า หากผู้ป่วยในห้องฉุกเฉิน หรือผู้พิการที่ไม่สามารถเปล่งเสียงพูดออกมาได้ ต้องการขอความช่วยเหลือ เช่น ต้องการน้ำ หรือเจ็บตรงไหน พวกเขาจะสื่อสารกับเราได้อย่างไรหากไม่มีเสียง?

คุณ **[yashsharda2006]** ได้สร้างโปรเจกต์สุดล้ำในชื่อ **SilentVoice** ระบบ Edge AI ต้นแบบขนาดจิ๋วที่ใช้เพียงกล้องมือถือหรือเว็บบอร์ดทั่วไป ตรวจจับการขยับริมฝีปากแบบเรียลไทม์ แล้วแปลงออกมาเป็นคำพูดสำคัญ 7 คำ ได้แก่ **"help", "water", "pain", "doctor", "breathe", "yes", และ "no"** โดยไม่ต้องส่งเสียง และไม่จำเป็นต้องใช้ฮาร์ดแวร์ GPU ราคาแพงเลยครับ!

สถาปัตยกรรมระบบ: ดึงพิกัดริมฝีปากด้วย MediaPipe & 1D CNN ⚙️🧠

แทนที่จะส่งภาพวิดีโอขนาดใหญ่เข้าโมเดลประมวลผลซึ่งต้องใช้การคำนวณสูงและเปลืองแบนด์วิธ SilentVoice เลือกใช้สถาปัตยกรรมที่ชาญฉลาดแบ่งเป็น 3 ส่วนหลัก:

  • Frontend (MediaPipe Face Mesh บนเบราว์เซอร์): ดึงจุดพิกัดตำแหน่งริมฝีปาก 40 จุด (คิดเป็นค่าพิกัด X, Y รวม 80 ค่าต่อเฟรม) รวบรวมข้อมูลเป็นวินโดว์ละ 30 เฟรม ประมวลผลบนเบราว์เซอร์ฝั่งคลายเอนต์ทั้งหมด ทำให้วิดีโอจริงไม่ถูกส่งออกจากเครื่อง ปลอดภัยเรื่องความเป็นส่วนตัว 100%
  • Backend Server (Flask & WebSocket): จัดการหน้า UI, บันทึกตัวอย่างข้อมูลการขยับปาก และส่งพิกัดไปให้โมเดลประมวลผลคำนวณคาดการณ์
  • Machine Learning Model (1D CNN & TFLite): เทรนโครงข่ายประสาทแบบ 1D Convolutional Neural Network (1D CNN) เพื่ออ่านอนุกรมการขยับพิกัดริมฝีปากตามลำดับเวลา แปลงเป็นไฟล์ TensorFlow Lite ขนาดจิ๋วเพียง **~197 KB** เหมาะสำหรับรันบนบอร์ด Edge AI อย่าง Arduino UNO Q1 หรือมินิพีซีขนาดเล็ก

💡 อยากเริ่มทำโปรเจกต์ Edge AI วิเคราะห์ภาพ หรือสั่งพิมพ์เคสยึดบอร์ดกล้อง 3D Print?

ในการทำอุปกรณ์กล้องตรวจจับ AI พกพา การออกแบบและสั่งพิมพ์เคสยึดกล้อง หรือขาตั้งปรับระดับด้วย **3D Printing** จะช่วยล็อกตำแหน่งกล้องให้ตั้งตรงมุมปาก ป้องกันแรงสั่นสะเทือน และทำให้ชุดอุปกรณ์พกพาไปใช้งานจริงได้อย่างสะดวกครับ!

หากเพื่อนๆ กำลังมองหา **บอร์ดพัฒนา Arduino, โมดูลกล้อง, บอร์ดประมวลผล AI, อุปกรณ์อิเล็กทรอนิกส์** หรือต้องการสั่งทำเคสยึดบอร์ดผ่าน บริการรับปริ้นท์ชิ้นส่วน 3D (3D Printing Service) สามารถนำไฟล์ STL มาประเมินราคากับร้าน **Globalbyte Shop** ได้เลยครับ!

ขั้นตอนการติดตั้งและการทดสอบใช้งาน Step-by-Step 💻⚡

  1. การจัดเตรียมสภาพแวดล้อม Python: สร้าง Virtual Environment และติดตั้งแพ็กเกจที่จำเป็น

    `pip install flask flask-socketio tensorflow numpy mediapipe opencv-python scikit-learn`

  2. การเก็บข้อมูลตัวอย่าง (Data Collection Phase): เปิดรัน `python3 app.py` สลับเข้าโหมด Training Mode บันทึกตัวอย่างการขยับปากพูดคำศัพท์ทั้ง 7 คำ (บันทึกคำละประมาณ 10–20 ตัวอย่าง) ระบบจะเซฟพิกัด 30 เฟรมลงโฟลเดอร์ `training_data/` ในรูปแบบ JSON
  3. การเทรนโมเดล (train.py): รันสคริปต์ `python3 train.py` เพื่ออ่านไฟล์ JSON เพิ่มข้อมูลตัวอย่างด้วย Gaussian Noise แล้วเทรนผ่าน 1D CNN จนได้ไฟล์โมเดล `lrw_model.tflite`
  4. การรันเปิดใช้งานบนมือถือผ่าน Cloudflare Tunnel: สั่งรันแอปพลิเคชัน และทำลิงก์ปลอดภัย HTTPS ผ่าน Cloudflare Tunnel

    `./cloudflared tunnel --url http://localhost:5000`

    นำลิงก์ HTTPS ไปเปิดบนเบราว์เซอร์มือถือ ส่องกล้องมาที่ริมฝีปาก และขยับปากพูดคำศัพท์ ระบบจะแปลออกมาเป็นข้อความพร้อมระดับความมั่นใจ (Confidence Score) เรียลไทม์!

สามารถส่องซอร์สโค้ดโอเพนซอร์สฉบับเต็มได้ที่คลัง Lip Reader Repository on GitHub ครับ!

⚠️ ข้อควรระวังในการเทรนโมเดลและการเชื่อมต่อเครือข่าย!

เบราว์เซอร์บนสมาร์ตโฟนจำเป็นต้องเชื่อมต่อผ่าน HTTPS เท่านั้นจึงจะยอมให้สิทธิ์เข้าถึงกล้อง การทำ Cloudflare Tunnel ช่วยให้ใช้งาน HTTPS ได้โดยไม่ต้องตั้งค่า Router และการเทรนโมเดลเริ่มต้นด้วยชุดข้อมูลขนาดเล็กอาจทำให้อ่านปากบุคคลอื่นคลาดเคลื่อนได้ ควรเก็บตัวอย่างการขยับปากจากผู้ใช้หลายๆ คนเพิ่มขึ้นครับ!

🔗 ข้อมูลอ้างอิงและจุดวาร์ปอ่านต่อ:

สำหรับเพื่อนๆ ที่ต้องการศึกษาโค้ดและพัฒนาต่อยอด สามารถตามลิงก์ไปส่องต่อได้เลยครับ:

*Disclaimer (ข้อจำกัดความรับผิดชอบ): เนื้อหาบทความนี้ถูกเรียบเรียงและสรุปมาจากโปรเจกต์วิจัยภาษาอังกฤษ สเปกและการใช้งานโมเดลควรศึกษาเพิ่มเติมจาก คู่มือทางการบน GitHub ของ Yash Sharda ก่อนลงมือทำจริงทุกครั้งครับ!

Blog posts