Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

UNCLE-JARVIS - Voice Assistant ด้วย Python + OpenRouter + gTTS

ไฟล์นี้อธิบายการทำงานของโค้ด Python สำหรับสร้างระบบผู้ช่วยอัจฉริยะสั่งงานด้วยเสียงแบบง่าย ๆ คล้าย JARVIS โดยระบบจะรับเสียงจากไมโครโฟน แปลงเสียงเป็นข้อความ ส่งข้อความให้ AI คิดคำตอบ แล้วแปลงคำตอบกลับมาเป็นเสียงพูดภาษาไทย


1. โค้ดนี้คืออะไร

โค้ดนี้คือโปรแกรม Voice AI Assistant Pipeline หรือระบบผู้ช่วย AI แบบสั่งงานด้วยเสียง โดยทำงานเป็นลำดับดังนี้

  1. อัดเสียงจากไมโครโฟนของผู้ใช้
  2. บันทึกเสียงเป็นไฟล์ .wav
  3. ส่งไฟล์เสียงไปให้ระบบ Speech-to-Text เพื่อแปลงเสียงพูดเป็นข้อความ
  4. ส่งข้อความที่ได้ไปให้โมเดล AI ผ่าน OpenRouter
  5. รับคำตอบจาก AI
  6. แปลงข้อความคำตอบเป็นเสียงภาษาไทยด้วย gTTS
  7. เล่นเสียงตอบกลับผ่านลำโพง

พูดง่าย ๆ คือ ผู้ใช้พูดกับคอมพิวเตอร์ แล้ว AI จะตอบกลับเป็นเสียงภาษาไทย


2. ภาพรวมการทำงานของระบบ

ไมโครโฟน
   ↓
record_audio()
   ↓
บันทึกเป็น user_command.wav
   ↓
speech_to_text()
   ↓
แปลงเสียงเป็นข้อความด้วย Whisper ผ่าน OpenRouter
   ↓
ask_jarvis_brain()
   ↓
ส่งข้อความให้โมเดล AI คิดคำตอบ
   ↓
text_to_speech()
   ↓
แปลงคำตอบเป็นเสียง MP3 ด้วย gTTS
   ↓
เล่นเสียงผ่านลำโพง

3. ไลบรารีที่ใช้

โค้ดนี้ใช้ไลบรารีหลักดังนี้

ไลบรารี ใช้ทำอะไร
sounddevice อัดเสียงจากไมโครโฟน
scipy บันทึกไฟล์เสียงเป็น .wav
requests ส่งไฟล์เสียงไปยัง API ของ OpenRouter
openai ใช้เรียกโมเดลภาษา AI ผ่าน OpenRouter
gTTS แปลงข้อความเป็นเสียงพูดภาษาไทย
playsound เล่นไฟล์เสียง .mp3
base64 แปลงไฟล์เสียงเป็น Base64 ก่อนส่ง API
os, time ไลบรารีพื้นฐานของ Python
k ไฟล์แยกสำหรับเก็บ API Key

4. การติดตั้งไลบรารี

ติดตั้งไลบรารีที่จำเป็นด้วยคำสั่งนี้

pip install sounddevice scipy openai gTTS playsound==1.2.2 requests

ถ้าใช้ Windows แล้วติดตั้ง sounddevice ไม่ผ่าน อาจต้องติดตั้ง Visual C++ Redistributable หรืออัปเดต Python/pip ให้เรียบร้อยก่อน

python -m pip install --upgrade pip

5. การเตรียม API Key

โค้ดนี้ดึง API Key จากไฟล์ชื่อ k.py

ให้สร้างไฟล์ k.py ไว้ในโฟลเดอร์เดียวกับไฟล์ Python หลัก แล้วใส่โค้ดนี้

API_KEY = "ใส่_OPENROUTER_API_KEY_ของคุณตรงนี้"

ตัวอย่างโครงสร้างไฟล์

project-folder/
│
├── main.py
└── k.py

ไม่ควรใส่ API Key ตรง ๆ ในไฟล์หลักที่จะแชร์ให้คนอื่น เพราะอาจทำให้ Key รั่วได้


6. การตั้งค่าหลักในโค้ด

OPENROUTER_API_KEY = API_KEY
MODEL_NAME = "nousresearch/hermes-3-llama-3.1-405b"

ส่วนนี้คือการกำหนด API Key และชื่อโมเดล AI ที่จะใช้เป็นสมองของ JARVIS

ถ้าต้องการให้ตอบเร็วขึ้น สามารถเปลี่ยนโมเดลเป็นตัวที่เบากว่า เช่น

MODEL_NAME = "google/gemini-2.5-flash"

7. การตั้งค่าเสียง

SAMPLE_RATE = 44100
DURATION = 10
AUDIO_INPUT_FILE = "user_command.wav"
AUDIO_OUTPUT_FILE = "jarvis_response.mp3"

ความหมายของแต่ละตัวแปร

ตัวแปร ความหมาย
SAMPLE_RATE คุณภาพการอัดเสียง หน่วยเป็น Hz
DURATION ระยะเวลาอัดเสียงต่อครั้ง หน่วยเป็นวินาที
AUDIO_INPUT_FILE ชื่อไฟล์เสียงที่อัดจากไมโครโฟน
AUDIO_OUTPUT_FILE ชื่อไฟล์เสียงตอบกลับจาก AI

ค่า DURATION = 10 หมายความว่า โปรแกรมจะฟังเสียงผู้ใช้เป็นเวลา 10 วินาทีต่อรอบ


8. อธิบายฟังก์ชันสำคัญ

8.1 ฟังก์ชัน record_audio()

def record_audio():
    print(f"\n🎙️ JARVIS กำลังฟัง... (พูดได้เลย {DURATION} วินาที)")
    recording = sd.rec(int(DURATION * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=1, dtype='int16')
    sd.wait()
    wavfile.write(AUDIO_INPUT_FILE, SAMPLE_RATE, recording)
    print("💾 บันทึกเสียงลงเครื่องเรียบร้อยแล้ว...")

ฟังก์ชันนี้ทำหน้าที่อัดเสียงจากไมโครโฟนเป็นเวลา 10 วินาที แล้วบันทึกเป็นไฟล์ user_command.wav

ขั้นตอนภายในฟังก์ชัน

  1. แสดงข้อความว่า JARVIS กำลังฟัง
  2. ใช้ sounddevice อัดเสียง
  3. รอจนกว่าอัดเสียงเสร็จ
  4. บันทึกเสียงเป็นไฟล์ .wav

8.2 ฟังก์ชัน speech_to_text()

def speech_to_text():
    print("🤖 กำลังแปลงเสียงเป็นข้อความ (ผ่าน Base64 JSON)...")

ฟังก์ชันนี้ทำหน้าที่แปลงเสียงพูดเป็นข้อความภาษาไทย โดยส่งไฟล์เสียงไปยัง OpenRouter endpoint

ขั้นตอนการทำงาน

  1. เปิดไฟล์ user_command.wav
  2. อ่านข้อมูลเสียงเป็น binary
  3. แปลงไฟล์เสียงเป็น Base64
  4. ส่งข้อมูลไปยัง API
  5. รับข้อความที่แปลงแล้วกลับมา

โมเดลที่ใช้สำหรับถอดเสียงคือ

"openai/whisper-large-v3"

ใน payload มีการกำหนดภาษาเป็นภาษาไทย

"language": "th"

จุดนี้ช่วยให้ระบบพยายามถอดเสียงเป็นภาษาไทยโดยตรง


8.3 ฟังก์ชัน ask_jarvis_brain(user_text)

def ask_jarvis_brain(user_text):
    print(f"👤 คุณพูดว่า: '{user_text}'")
    print(f"🧠 กำลังส่งให้ {MODEL_NAME} ประมวลผลความคิด...")

ฟังก์ชันนี้ส่งข้อความของผู้ใช้ไปให้ AI ประมวลผล แล้วรับคำตอบกลับมา

ในส่วน system prompt มีการกำหนดบุคลิกของ AI ว่า

คุณคือ JARVIS ผู้ช่วยอัจฉริยะในห้องทำงานของ Tony Stark
ตอบกลับสั้นกระชับ เป็นกันเอง สุภาพ และมีไหวพริบ
โดยต้องตอบเป็นภาษาไทยเท่านั้น

ดังนั้น AI จะพยายามตอบกลับเป็นภาษาไทยในโทนแบบ JARVIS


8.4 ฟังก์ชัน text_to_speech(ai_response_text)

def text_to_speech(ai_response_text):
    print(f"🤖 JARVIS คิดคำตอบ: '{ai_response_text}'")
    print("🔊 กำลังสังเคราะห์เสียงเพื่อตอบกลับ...")

ฟังก์ชันนี้ใช้ gTTS แปลงข้อความคำตอบจาก AI เป็นเสียงพูดภาษาไทย แล้วบันทึกเป็นไฟล์ jarvis_response.mp3

จากนั้นใช้ playsound() เล่นเสียงตอบกลับ

tts = gTTS(text=ai_response_text, lang='th')
tts.save(AUDIO_OUTPUT_FILE)
playsound(AUDIO_OUTPUT_FILE)

9. ขั้นตอนการรันโปรแกรม

ขั้นตอนที่ 1: ติดตั้ง Python

แนะนำให้ใช้ Python 3.10 ขึ้นไป

ตรวจสอบเวอร์ชัน Python

python --version

หรือ

python3 --version

ขั้นตอนที่ 2: ติดตั้งไลบรารี

pip install sounddevice scipy openai gTTS playsound==1.2.2 requests

ขั้นตอนที่ 3: สร้างไฟล์ k.py

API_KEY = "ใส่_OPENROUTER_API_KEY_ของคุณ"

ขั้นตอนที่ 4: บันทึกโค้ดหลักเป็นไฟล์

เช่น

main.py

ขั้นตอนที่ 5: รันโปรแกรม

บน Windows

python main.py

บน macOS หรือ Linux

python3 main.py

ขั้นตอนที่ 6: พูดกับระบบ

เมื่อเห็นข้อความนี้

🎙️ JARVIS กำลังฟัง... (พูดได้เลย 10 วินาที)

ให้พูดคำสั่งหรือคำถามใส่ไมโครโฟน เช่น

วันนี้ควรวางแผนงานอย่างไร

หลังจากนั้นระบบจะ

  1. บันทึกเสียง
  2. แปลงเสียงเป็นข้อความ
  3. ส่งให้ AI คิดคำตอบ
  4. พูดตอบกลับผ่านลำโพง

10. ตัวอย่างการใช้งาน

ผู้ใช้พูดว่า

ช่วยสรุปงานที่ควรทำวันนี้ให้หน่อย

ระบบอาจตอบกลับว่า

ได้ครับ วันนี้ควรเริ่มจากงานสำคัญที่สุดก่อน แบ่งเป็น 3 ส่วนคือ งานเร่งด่วน งานที่ต้องติดต่อคนอื่น และงานที่ต้องใช้สมาธิสูงครับ

แล้วโปรแกรมจะเล่นเสียงคำตอบนี้ออกทางลำโพง


11. ข้อควรระวัง

11.1 ต้องมีอินเทอร์เน็ต

ระบบนี้ต้องใช้อินเทอร์เน็ต เพราะต้องเรียกใช้งาน OpenRouter และ gTTS

ถ้าไม่มีอินเทอร์เน็ต ระบบจะไม่สามารถแปลงเสียงหรือสร้างเสียงตอบกลับได้


11.2 ต้องตั้งค่าไมโครโฟนให้ถูกต้อง

ถ้าโปรแกรมอัดเสียงไม่ได้ ให้ตรวจสอบว่า

  • เครื่องมีไมโครโฟน
  • ระบบปฏิบัติการอนุญาตให้ Python ใช้ไมโครโฟน
  • เลือก input device ถูกต้อง
  • ไมโครโฟนไม่ได้ถูกใช้งานโดยโปรแกรมอื่นอยู่

11.3 ระวัง API Key รั่ว

ไม่ควรโพสต์ไฟล์ k.py ลง GitHub หรือส่งให้คนอื่น เพราะมี API Key อยู่ข้างใน

ควรเพิ่มไฟล์ .gitignore

k.py

11.4 playsound อาจมีปัญหาบางเครื่อง

ถ้า playsound เล่นเสียงไม่ได้ ให้ลองติดตั้งเวอร์ชันที่กำหนดไว้

pip install playsound==1.2.2

หรือเปลี่ยนไปใช้ไลบรารีอื่น เช่น pygame หรือ pydub


12. ปัญหาที่พบบ่อยและวิธีแก้

ปัญหา: ไม่มีเสียงเข้า

แนวทางแก้ไข

  • ตรวจสอบว่าไมโครโฟนเปิดอยู่
  • ตรวจสอบ permission ของไมโครโฟน
  • ลองพูดใกล้ไมโครโฟนมากขึ้น
  • ทดสอบไมโครโฟนด้วยโปรแกรมอัดเสียงของเครื่องก่อน

ปัญหา: API Error

แนวทางแก้ไข

  • ตรวจสอบว่า API Key ถูกต้อง
  • ตรวจสอบว่ายังมีเครดิตในบัญชี OpenRouter
  • ตรวจสอบชื่อโมเดลว่าถูกต้อง
  • ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต

ปัญหา: AI ตอบช้า

สาเหตุที่เป็นไปได้

  • โมเดลที่ใช้มีขนาดใหญ่
  • อินเทอร์เน็ตช้า
  • ไฟล์เสียงมีขนาดใหญ่
  • Server ของ API ตอบช้า

วิธีแก้

  • ลด DURATION จาก 10 วินาทีเหลือ 5 วินาที
  • เปลี่ยนไปใช้โมเดลที่เร็วกว่า
  • ใช้โมเดลขนาดเล็กลง
  • ใช้ระบบฟังแบบกดปุ่มแทนการอัดเสียงยาว

ปัญหา: เสียงตอบกลับทับไฟล์เดิมไม่ได้

บางครั้งไฟล์ jarvis_response.mp3 อาจยังถูกโปรแกรมเล่นเสียงล็อกไว้อยู่ ทำให้บันทึกทับไม่ได้

แนวทางแก้คือใช้ชื่อไฟล์ใหม่ทุกครั้ง เช่นใส่ timestamp ต่อท้ายชื่อไฟล์


13. จุดที่สามารถพัฒนาต่อได้

โค้ดนี้เป็นเวอร์ชันเริ่มต้น สามารถพัฒนาต่อได้หลายทาง เช่น

  1. ทำให้ระบบฟังต่อเนื่องแบบ Wake Word เช่น “Hey JARVIS”
  2. ลดเวลา delay ให้ตอบเร็วขึ้น
  3. เพิ่ม memory ให้จำบทสนทนาก่อนหน้าได้
  4. เพิ่มคำสั่งควบคุมอุปกรณ์ IoT
  5. เชื่อมกับ Home Assistant
  6. เชื่อมกับ LINE Notify หรือ Telegram
  7. เปลี่ยนจาก gTTS เป็นเสียงที่สมจริงกว่า
  8. เพิ่มหน้าจอ GUI ด้วย Tkinter, PyQt หรือ Web UI
  9. ทำระบบเลือกไมโครโฟนและลำโพง
  10. ทำเป็นแอปบน Raspberry Pi

14. สรุป

โค้ดนี้คือระบบต้นแบบของผู้ช่วย AI แบบ Voice-First ที่สามารถรับคำสั่งเสียงภาษาไทย แปลงเป็นข้อความ ส่งให้ AI ประมวลผล และตอบกลับเป็นเสียงภาษาไทยได้

เหมาะสำหรับใช้เป็นพื้นฐานในการสอนเรื่อง

  • Python Audio Processing
  • Speech-to-Text
  • Large Language Model
  • Text-to-Speech
  • Voice Assistant
  • Multi-AI Agent
  • ระบบ JARVIS ในห้องทำงาน

โดยโค้ดนี้ยังเป็นเวอร์ชันพื้นฐาน แต่สามารถต่อยอดเป็นระบบผู้ช่วยอัจฉริยะในห้องทำงานจริงได้ เช่น สั่งเปิดไฟ วิเคราะห์ข้อมูล เปิดโปรแกรม ควบคุม IoT หรือเชื่อมต่อกับ Agent หลายตัวในอนาคต

About

UNCLE-JARVIS

Resources

Stars

26 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages