[G-Assistant] สร้าง Google Assistant ด้วยตัวเองกับ Raspberry Pi แบบไม่ง้อชุด Kit

Sathittham (Phoo) Sangthong
SS Blog
Published in
6 min readDec 2, 2017

เมื่อบทความที่แล้วเราได้ลองเล่น 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 Mic กับลำโพง

หมายเหตุ: 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)
การต่อวงจรปุ่มกดและ LED
ปุ่มกดและ LED ที่ต่อกับ Raspberry Pi

ต่ออุปกรณ์อื่นๆ

  • ต่อจอ HDMI เข้าที่ช่อง HDMI
  • ต่อลำโพงเข้าที่ช่อง Audio 3.5 มม.
  • ต่อ USB Microphone ที่ช่อง USB
  • ต่อ USB Mouse/Keyboard ที่ช่อง USB
ต่อ Hardware ประมาณนี้ครับ

ขั้นที่ 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
แก้ไขไฟล์ config.txt โดยการพิมพ์คำสั่ง sudo nano /boot/config.txt
  • ให้เอาเครื่องหมาย # หน้าบรรทัด dtparam=audio=on ออก ดังโค๊ดตัวอย่าง
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
#dtoverlay=i2s-mmap
#dtoverlay=googlevoicehat-soundcard
เอาเครื่องหมาย # หน้าบรรทัด dtparam=audio=on ออก
  • แก้ไขแล้ว ออกมาได้ครับ โดยกดปุ่ม 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"
}
}
แก้ไขไฟล์ asound.conf
  • แก้ไขแล้ว ออกมาได้ครับ โดยกดปุ่ม Ctrl+X แล้วกดปุ่ม Y เพื่อยืนยันว่าจะเซฟและกด Enter เพื่อยืนยันและออกครับ

Note:

  • ต้องเปลี่ยนเลข card number และ device number ของ Mic และ Speaker ต้องเปลี่ยนให้เหมาะกับอุปกรณ์ของเรา
pcm "hw:<card number>,<device number>"
  • Mic ดูได้จากคำสั่ง
arecord -l
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’
เปลี่ยน googlevoicehat เป็น bcm2835
  • แก้ไขแล้ว ออกมาได้ครับ โดยกดปุ่ม Ctrl+X แล้วกดปุ่ม Y เพื่อยืนยันว่าจะเซฟและกด Enter เพื่อยืนยันและออกครับ

ทดสอบลำโพง

  • ให้ไปที่หน้าจอ Desktop ของ Raspberry Pi
  • ดับเบิ้ลคลิ๊กที่ไฟล์ Check Audio ที่หน้า Desktop หรือ พิมพ์คำสั่ง
/home/pi/AIY-voice_kit-python/checkpoints/check_audio.py
Check audio
  • โดยควรจะได้ยินเสียงออกจากลำโพงว่า “Front Cneter”
  • ถ้าได้ยินเสียงพิมพ์ Y แล้วกด Enter
  • ถ้าไม่ได้ยินให้เช็คลำโพงใหม่ครับ ว่าเปิดอยู่หรือไม่? ตั้งค่าถูกไหม?
ทดสอบเสียงออกลำโพง
  • จากนั้น Script จะบอกให้เราลองพูดทดสอบอัดเสียง ซึ่งเราพูดว่าอะไรก็ได้ครับ ในตัวอย่างคือ “Testing, 1 2 3”
  • ถ้าพร้อมจะอัดเสียงก็กด Enter แล้วพูดได้เลยครับ
  • เมื่อพูดเสร็จ มันก็จะเล่นเสียงเราที่อัดไว้ ให้ออกลำโพงครับ
  • ถ้าสามารถอัดเสียงจากไมค์ได้ก็พิมพ์ Y แล้วกด Enter ก็ถือว่าผ่านแล้วครับ
ทดสอบอัดเสียงผ่านไมค์

ขั้นที่ 5: ตั้งค่าโปรเจ็คบน Google Cloud

Step 1: Google Cloud Platform (GCP)

Step 2: สร้าง Project ใหม่

  • ที่ด้านบนของ GCP ให้คลิ๊กที่สัญลักษณ์ลูกศรชี้ลง แล้วเลือก Create Project
Google Cloud Platform Dashboard
  • กดปุ่มบวก เพื่อสร้างโปรเจคใหม่
Create New Project

Step 3: ตั้งชื่อโปรเจค

  • ตั้งชื่อโปรเจค
Create My GoogleAssistant Project

Step 4: เปิดใช้งานAPI

  • คลิ๊กที่ ENABLE APIS AND SERVICES
Enable APIS and Service
  • ที่ช่อง Search พิมพ ์Google Assistant API
Google Assistant API
  • ที่หน้า Google Assistant API ให้คลิ๊กที่ปุ่ม ENABLE
Enable Google Assistant API

Step 5: สร้าง Credentials

  • กลับมาที่หน้า APIs & Services โดยในแทปเมนูซ้ายมือ ให้เลือกที่ Credentials
  • กด Create credentials
  • เลือก OAuth client ID
Create credentials
  • กดที่ Configure Consent Screen
Configure Consent Screen

Step 6: สร้าง Client Name

  • ที่หน้า Create client ID
  • Application Type: ให้เลือก Other
  • Name : ให้พิมพ์ชื่อ Client name ของเรา โดยเป็นอะไรก็ไดครับ โดยตัวอย่างคือ My GoogleAssistant
  • เสร็จแล้วกด Create
Create client ID

Step 7: Client ID และ Client Secret

  • เมื่อเสร็จแล้ว เราจะได้ Client Id และ Client Secret มา ซึ่งเราไม่จำเป็นต้องจดไว้ครับ
  • กด OK ได้เลย
Client Id และ Client Secre

Step 8: Download JSON

  • ที่หน้า Credentials
  • ให้ Download ไฟล์นามสกุล .JSON ที่สัญลักษณ์ลูกศรชี้ลง
Download Credentials

Step 9: เปลี่ยนชื่อ Credentials

  • ไปที่ไฟล์นามสกุล .JSON ที่เราเพิ่งดาวโหลดมา ซึ่งจะชื่อว่า client_secrets_XXXX.json
  • ให้เราเปลี่ยนชื่อไฟล์มาเป็น assistant.json
เปลี่ยนชื่อไฟล์ client_secrets_XXXX.json เป็น assistant.json
  • ย้ายไฟล์ดังกล่าวมาไว้ที่ /home/pi/assistant.json
ย้ายไฟล์มาที่ /home/pi/assistant.json

Step 10: Activity Controls

  1. Web and app activity
  2. Device information
  3. Voice and audio activity
เปิดใช้งาน Web and app activity
เปิดใช้งาน Device information
เปิดใช้งาน Voice and audio activity

Step 11: เริ่มใช้งานครั้งแรก

  • ที่หน้าจอ Desktop ของ Rasbperry Pi ให้ดับเบิ้ลคลิ๊กที่ icon ชื่อว่า Start Dev terminal
  • เริ่มใช้งาน โดยการพิมพ์คำสั่ง

src/assistant_library_demo.py

src/assistant_library_demo.py
  • สำหรับครั้งแรก ระบบจะให้เรายืนยัน credential ซึ่งจะเปิด Browser มาให้เราทำการล๊อคอินด้วย Google Account ที่เราใช้งาน
Login Google Account
  • กด ALLOW เพื่ออนุญาตให้อุปกรณ์เราใช้งาน Google Assistant ได้
Allow Google Assistant
  • ถ้าเสร็จสมบูรณ์ ที่ Browser จะขึ้นว่า “The authentication flow has completed, you may close this windows”
  • ปิด Browser ได้
Authetication completed

ขั้นที่ 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

ทดสอบเล่น Google Assistant แบบใช้ Wake word, OK Google !

ทดสอบแบบใช้ปุ่มกดแทน Wake word

  • ที่ Start Dev terminal
  • พิมพ์คำสั่ง

src/assistant_grpc_demo.py

ทดสอบเล่น Google Assistant แบบใช้ปุ่มกด แทน Wake word, OK Google !

แก้ไข 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

อ้างอิง

--

--

Sathittham (Phoo) Sangthong
SS Blog

Hi! It's me Phoo! I’m a Software Developer 👨‍💻 , a Startup Entrepreneur 📱 and a Runner 🏃 . Currently, I’m a Co-Founder and CTO of a Startup name “Urbanice”.