[G-Assistant] สร้าง Google Assistant ด้วยตัวเองกับ Raspberry Pi แบบไม่ง้อชุด Kit
เมื่อบทความที่แล้วเราได้ลองเล่น Google Assistant จาก Google AIY Voice Kit ไปแล้ว ([G-Assistant] ก้าวแรกสู่ AI ด้วย AIY Projects — Voice Kit) ซึ่งก็สนุกและง่ายมากครับ แต่ปัญหามันอยู่ที่ว่า เจ้าชุดคิทที่ว่านี่ช่างหายากซะจริงๆ วันนี้เราจะมาทำ Google Assistant กันเอง แบบไม่ต้องใช้ชุดคิทกันครับ
อุปกรณ์ที่ต้องใช้
- 1 x Raspberry Pi 3 Model B*
- 1 x Micro SD Card (ขนาด 4 GB ขึ้นไป)
- 1 x USB Power Adapter
- 1 x USB Microphone**
- 1 x ลำโพง (ที่มีช่องช่อง Audio In 3.5 มม.)
- 1 x ปุ่มกด แบบ Push Button
- 1 x LED
- 1 x โปรโตบอร์ด
- สายไฟ, สายจั๊ม
- อื่นๆ เช่น จอ HDMI, USB mouse/keyboard, Internet Connection
หมายเหตุ
*สามารถใช้งาน Raspberry Pi Zero (หรือ (Zero W) ได้เช่นกัน แต่ต้องใช้งานกับ Google Assistant gRPC API แทน
** ถ้าไม่มี USB Microphone สามารถใช้กล้อง USB webcam ที่มีไมค์โครโฟนมาใช้แทนได้นะครับ
หมายเหตุ: USB Microphone ในรูปมี 2 ตัว ผมลองทดสอบแล้ว สามารถใช้ได้เหมือนกันครับ จะใช้ตัวไหนก็ได้ครับ
ขั้นที่ 1 : ประกอบ Hardware เข้าด้วยกัน
ต่อปุ่ม และ LED
- ปุ่ม: ข้างหนึ่งต่อเข้ากับ GPIO 23 อีกข้างหนึ่งของปุ่มต่อกับขา Ground ของ Raspberry Pi (ใน Voice Kit ปุ่มจะเป็นแบบ active low)
- LED: ขาลบต่อกับ GPIO 25 ขาบวกต่อกับ + 5v ของ Raspberry Pi (ใน Voice Kit , LED จะเป็นแบบ active High)
ต่ออุปกรณ์อื่นๆ
- ต่อจอ HDMI เข้าที่ช่อง HDMI
- ต่อลำโพงเข้าที่ช่อง Audio 3.5 มม.
- ต่อ USB Microphone ที่ช่อง USB
- ต่อ USB Mouse/Keyboard ที่ช่อง USB
ขั้นที่ 2 : ตั้งค่า Software พื้นฐานบน Raspberry Pi
- ดาวโหลด AIY Voice Kit SD Image เมื่อโหลดเสร็จ ให้ทำการแตก Zip จะได้ไฟล์นามสกุล .img
- ติดตั้ง OS ลง Micro SD Card โดยสามาถใช้ Etcher.io หรือ Win32 Disk Imager เจ้าเก่าก็ได้เช่นกันครับ
- ใส่ Micro SD card ที่ติดตั้ง OS แล้วใน Raspberry Pi
- ถ้าใช้สาย LAN ให้เสียบสาย Ethernet
- จากนั้นเปิด Raspberry Pi ได้เลยครับ
- ตั้งค่า เปิดการใช้งาน SSH และ VNC
- ตั้งค่าวันที่ให้ถูกต้อง
- เชื่อมต่อ Wi-Fi
ขั้นที่ 3 : ตั้งค่าเสียง (ไมค์/ลำโพง)
ตั้งค่าลำโพงและไมค์
- เนื่องจาก AIY Image นั้นได้ถูกแก้ไขให้ใช้งานกับ Voice Kit เราจึงต้องทำการปรับแต่ง โดยแก้ไขให้เสียงกลับมาออกที่ช่อง Audio โดยแก้ไขที่ไฟล์
พิมพ์คำสั่ง
sudo nano /boot/config.txt
- ให้เอาเครื่องหมาย # หน้าบรรทัด dtparam=audio=on ออก ดังโค๊ดตัวอย่าง
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
#dtoverlay=i2s-mmap
#dtoverlay=googlevoicehat-soundcard
- แก้ไขแล้ว ออกมาได้ครับ โดยกดปุ่ม Ctrl+X แล้วกดปุ่ม Y เพื่อยืนยันว่าจะเซฟและกด Enter เพื่อยืนยันและออกครับ
- แก้ไขไฟล์ asound.conf โดยพิมพ์คำสั่ง
sudo nano /etc/asound.conf
- ลบโค๊ดเดิมทั้งหมด แล้วเพิ่มโค๊ดทั้งหมดนี้ลงไปแทน
pcm.!default {
type asym
capture.pcm "mic"
playback.pcm "speaker"
}
pcm.mic {
type plug
slave {
pcm "hw:2,0"
}
}
pcm.speaker {
type plug
slave {
pcm "hw:0,0"
}
}
- แก้ไขแล้ว ออกมาได้ครับ โดยกดปุ่ม Ctrl+X แล้วกดปุ่ม Y เพื่อยืนยันว่าจะเซฟและกด Enter เพื่อยืนยันและออกครับ
Note:
- ต้องเปลี่ยนเลข card number และ device number ของ Mic และ Speaker ต้องเปลี่ยนให้เหมาะกับอุปกรณ์ของเรา
pcm "hw:<card number>,<device number>"
- Mic ดูได้จากคำสั่ง
arecord -l
- ส่วน Speaker ดูได้จากคำสั่ง
aplay -l
- ให้ทำการ reboot
sudo reboot
- แก้ไขไฟล์ทดสอบเสียง โดยพิมพ์คำสั่ง
nano /home/pi/AIY-voice-kit-python/checkpoints/check_audio.py
แก้ไขจาก
VOICEHAT_ID = ‘googlevoicehat’
เป็น
VOICEHAT_ID = ‘bcm2835’
- แก้ไขแล้ว ออกมาได้ครับ โดยกดปุ่ม Ctrl+X แล้วกดปุ่ม Y เพื่อยืนยันว่าจะเซฟและกด Enter เพื่อยืนยันและออกครับ
ทดสอบลำโพง
- ให้ไปที่หน้าจอ Desktop ของ Raspberry Pi
- ดับเบิ้ลคลิ๊กที่ไฟล์ Check Audio ที่หน้า Desktop หรือ พิมพ์คำสั่ง
/home/pi/AIY-voice_kit-python/checkpoints/check_audio.py
- โดยควรจะได้ยินเสียงออกจากลำโพงว่า “Front Cneter”
- ถ้าได้ยินเสียงพิมพ์ Y แล้วกด Enter
- ถ้าไม่ได้ยินให้เช็คลำโพงใหม่ครับ ว่าเปิดอยู่หรือไม่? ตั้งค่าถูกไหม?
- จากนั้น Script จะบอกให้เราลองพูดทดสอบอัดเสียง ซึ่งเราพูดว่าอะไรก็ได้ครับ ในตัวอย่างคือ “Testing, 1 2 3”
- ถ้าพร้อมจะอัดเสียงก็กด Enter แล้วพูดได้เลยครับ
- เมื่อพูดเสร็จ มันก็จะเล่นเสียงเราที่อัดไว้ ให้ออกลำโพงครับ
- ถ้าสามารถอัดเสียงจากไมค์ได้ก็พิมพ์ Y แล้วกด Enter ก็ถือว่าผ่านแล้วครับ
ขั้นที่ 5: ตั้งค่าโปรเจ็คบน Google Cloud
Step 1: Google Cloud Platform (GCP)
- เปิด Chromium Browser ที่ Raspberry Pi
- เข้าไปที่ Cloud Console (https://console.cloud.google.com/)
- ล๊อคอินเข้า GCP
Step 2: สร้าง Project ใหม่
- ที่ด้านบนของ GCP ให้คลิ๊กที่สัญลักษณ์ลูกศรชี้ลง แล้วเลือก Create Project
- กดปุ่มบวก เพื่อสร้างโปรเจคใหม่
Step 3: ตั้งชื่อโปรเจค
- ตั้งชื่อโปรเจค
Step 4: เปิดใช้งานAPI
- คลิ๊กที่ ENABLE APIS AND SERVICES
- ที่ช่อง Search พิมพ ์Google Assistant API
- ที่หน้า Google Assistant API ให้คลิ๊กที่ปุ่ม ENABLE
Step 5: สร้าง Credentials
- กลับมาที่หน้า APIs & Services โดยในแทปเมนูซ้ายมือ ให้เลือกที่ Credentials
- กด Create credentials
- เลือก OAuth client ID
- กดที่ Configure Consent Screen
Step 6: สร้าง Client Name
- ที่หน้า Create client ID
- Application Type: ให้เลือก Other
- Name : ให้พิมพ์ชื่อ Client name ของเรา โดยเป็นอะไรก็ไดครับ โดยตัวอย่างคือ My GoogleAssistant
- เสร็จแล้วกด Create
Step 7: Client ID และ Client Secret
- เมื่อเสร็จแล้ว เราจะได้ Client Id และ Client Secret มา ซึ่งเราไม่จำเป็นต้องจดไว้ครับ
- กด OK ได้เลย
Step 8: Download JSON
- ที่หน้า Credentials
- ให้ Download ไฟล์นามสกุล .JSON ที่สัญลักษณ์ลูกศรชี้ลง
Step 9: เปลี่ยนชื่อ Credentials
- ไปที่ไฟล์นามสกุล .JSON ที่เราเพิ่งดาวโหลดมา ซึ่งจะชื่อว่า
client_secrets_XXXX.json
- ให้เราเปลี่ยนชื่อไฟล์มาเป็น
assistant.json
- ย้ายไฟล์ดังกล่าวมาไว้ที่
/home/pi/assistant.json
Step 10: Activity Controls
- ไปที่ Activity Controls panel(https://myaccount.google.com/activitycontrols)
- ล๊อคอินด้วย Goole Account เดิมที่เราใช้
- ให้ทำการเปิดใช้งานดังต่อไปนี้:
- Web and app activity
- Device information
- Voice and audio activity
Step 11: เริ่มใช้งานครั้งแรก
- ที่หน้าจอ Desktop ของ Rasbperry Pi ให้ดับเบิ้ลคลิ๊กที่ icon ชื่อว่า Start Dev terminal
- เริ่มใช้งาน โดยการพิมพ์คำสั่ง
src/assistant_library_demo.py
- สำหรับครั้งแรก ระบบจะให้เรายืนยัน credential ซึ่งจะเปิด Browser มาให้เราทำการล๊อคอินด้วย Google Account ที่เราใช้งาน
- กด ALLOW เพื่ออนุญาตให้อุปกรณ์เราใช้งาน Google Assistant ได้
- ถ้าเสร็จสมบูรณ์ ที่ Browser จะขึ้นว่า “The authentication flow has completed, you may close this windows”
- ปิด Browser ได้
ขั้นที่ 6: มาลองเล่นกัน
- ทดลองเล่นได้ง่ายๆ เพียงพูด OK Google ! แล้วตามด้วยคำสั่งต่างๆ
คำสั่งต่างๆที่ลองเล่น
- Who are you?
- What time is it?
- What is the weather?
- Who am I ?
- Give me a love quote.
- What does the fox say?
ทดสอบแบบ Wake Word , OK Google !
- ที่ Start Dev terminal
- พิมพ์คำสั่ง
src/assistant_library_demo.py
ทดสอบแบบใช้ปุ่มกดแทน Wake word
- ที่ Start Dev terminal
- พิมพ์คำสั่ง
src/assistant_grpc_demo.py
แก้ไข State ของ LED
เนื่องจาก LED ของ AIY Voice Kit จะกลับสถานะจากปกต ิเราจึงต้องทำการแก้ไขโค๊ดนิดนึงครับ
- ที่ตำแหน่ง
/home/pi/AIY-voice-kit-python/src/aiy/_drivers/_led.py
- แก้ไขไฟล์
_led.py
- แก้ไข set.pwm.ChangeDutyCycle(0) เป็น set.pwm.ChangeDutyCycle(100)
- แก้ไข set.pwm.ChangeDutyCycle(100) เป็น set.pwm.ChangeDutyCycle(0)
- จากนั้นกด Save ได้เลยครับ
G-Assistant The Series
- [G-Assistant] ก้าวแรกสู่ AI ด้วย AIY Projects — Voice Kit
- [G-Assistant] ตั้งค่าพื้นฐาน Raspberry Pi โดยไม่ใช้จอ HDMI และคีย์บอร์ด
- [G-Assistant] สร้าง Google Assistant ด้วยตัวเองกับ Raspberry Pi แบบไม่ง้อชุด Kit
- [G-Assistant] เพิ่มคำสั่งใหม่ๆ ง่ายๆ ด้วย Cloud Speech API