Raspberry Pi Ͱ GoogleAssistant Λମݧ͠Α͏͋Μ͍͟Ώ͖ʢ@yanzmʣGTUG Girls Meet Up #33
View Slide
ࢿྉgoo.gl/CDHpi4
Google Assistant• https://assistant.google.com/• SDK• https://developers.google.com/assistant/sdk/prototype/getting-started-pi-python/
ඞཁͳͷ• Raspberry Pi 3ʢRaspberry Pi 2 + WiFiυϯάϧͰՄʣ• Raspbian JessieͷΠϯετʔϧ͞ΕͨmicroSD• ిݯΞμϓλ ͘͠ microUSBέʔϒϧ• USB ϚΠΫ ͘͠ϚΠΫଂܕͷUSBΧϝϥ• εϐʔΧʔʢUSB or 3.5mmδϟοΫʣ
४උ• Raspberry Pi Λ WiFi ʹଓ͢Δ
४උ• Raspberry Pi ͰίϯιʔϧΛ։͖ɺifconfig ίϚϯυΛ࣮ߦͯ͠IPΞυϨεΛϝϞ͢Δ
४උ• Raspberry Pi Ͱ SSH Λ༗ޮʹ͢Δ• Preferences - Raspberry Pi Configuration - Interfaces• SSH Λ Enabled ʹͯ͠ OK ΛΫϦοΫ
४උ2• ࣌ࠁઃఆΛ֬ೝ͢Δʢ͕࣌ؒਖ਼͚͠ΕOKʣ• JST ʹ͍ͨ͠ͳΒ• Preferences - Raspberry Pi Configuration - Localisation• Set Timezone ΛΫϦοΫ• Area: Asia, Location: Tokyo• ࠶ىಈ
४උ3• Raspberry Pi ʹ PC ͔Β SSH ͰϩάΠϯ͢Δ$ ssh pi@[ϝϞͨ͠IPΞυϨε]password: [σϑΥϧτraspberry]• ࣌ࠁઃఆΛ֬ೝ͢Δʢ͕࣌ؒਖ਼͚͠ΕOKʣ$ date
։ൃϓϩδΣΫτͱΞΧϯτͷઃఆ• https://developers.google.com/assistant/sdk/prototype/getting-started-pi-python/config-dev-project-and-account Λ։͘• goo.gl/GxLUSW• Ҏ߱ɺ͜ͷϖʔδΛʮઃఆखॱυΩϡϝϯτʯͱݺͼ·͢ɻ
৽͍͠ϓϩδΣΫτΛ࡞Δ - 1• ʮઃఆखॱυΩϡϝϯτʯʹ͋Δ GO TO THEPROJECT PAGE ϘλϯΛΫϦοΫ͢Δ
৽͍͠ϓϩδΣΫτΛ࡞Δ - 2• ্ͷํʹ͋ΔϓϩδΣΫτΛ࡞ΛΫϦοΫ• ϓϩδΣΫτ໊Λೖྗͯ͠࡞ΛΫϦοΫ• ͳΜͰΑ͍Ͱ͢ɻAssistant with Raspberry Pi ͱ͔
Google Assistant API ༗ޮԽ• ʮઃఆखॱυΩϡϝϯτʯʹ͋Δ ENABLE THE APIϘλϯΛΫϦοΫ͢Δ
OAuth Client ID ͷઃఆ - 1• OAuth ಉҙը໘Λઃఆ͢Δ
OAuth Client ID ͷઃఆ - 2• OAuth ΫϥΠΞϯτ ID Λ࡞͢Δ
OAuth Client ID ͷઃఆ - 3• OAuth ΫϥΠΞϯτ ID Λ࡞͢Δ• μΠΞϩά͕දࣔ͞ΕͨΒ OK ΛΫϦοΫ
OAuth Client ID ͷઃఆ - 4• ΫϥΠΞϯτ ID secret JSON ϑΝΠϧΛμϯϩʔυ
OAuth Client ID ͷઃఆ - 5• μϯϩʔυͨ͠ΫϥΠΞϯτ ID secret JSONϑΝΠϧΛ Raspberry Pi ʹసૹ$ scp [μϯϩʔυͨ͠JSONϑΝΠϧ] pi@[ϝϞͨ͠IPΞυϨε]:/home/pi/password: [σϑΥϧτraspberry]
ΞΫςΟϏςΟίϯτϩʔϧͷઃఆ - 1• ʮઃఆखॱυΩϡϝϯτʯͷԼͷํʹ͋Δ ActivityControls page ͷϦϯΫΛ։͘
ΞΫςΟϏςΟίϯτϩʔϧͷઃఆ - 2• ҎԼͷ߲Λ༗ޮʹ͢Δ• ΣϒͱΞϓϦͷΞΫςΟϏςΟ• ϩέʔγϣϯཤྺ• ใ• ԻΞΫςΟϏςΟ
Իͷઃఆͱ֬ೝ - 0• RaspberryPi ʹ SSH ͰϩάΠϯ͢Δ
Իͷઃఆͱ֬ೝ - 1• εϐʔΧʔͷςετ• Front, Left ͕܁Γฦ͠ฉ͑͜ΕOK• Ի͕໐Βͳ͍ਓ࣍ͷεϥΠυ$ speaker-test -t wav
εϐʔΧʔ͔ΒԻ͕໐Βͳ͍ਓ͜ΕΛΔ$ sudo raspi-config• ʲAdvanced OptionsʳΛબ• ʲAudioʳΛબ• ʲForce 3.5mmʢ'headphone'ʣjackʳΛબ
Իͷઃఆͱ֬ೝ - 2• ϚΠΫͷςετʢ5ඵؒԻʣ• Τϥʔ͕ग़ͳ͔ͬͨΒదʹ͠Όͬͯ 7 • Τϥʔ͕ग़ͨΒ 3ʢ࣍ʣ$ arecord --format=S16_LE --duration=5 --rate=16k --file-type=raw out.raw
Իͷઃఆͱ֬ೝ - 3• ϚΠΫͷΧʔυ൪߸ͱσόΠε൪߸ΛௐΔ• ͜ΕͳΒΧʔυ൪߸ 1, σόΠε൪߸ 0$ arecord -l**** List of CAPTURE Hardware Devices ****card 1: Device [USB PnP Sound Device],device 0: USB Audio [USB Audio]
Իͷઃఆͱ֬ೝ - 4• εϐʔΧʔͷΧʔυ൪߸ͱσόΠε൪߸ΛௐΔ• ͜ΕͳΒΧʔυ൪߸ 0, σόΠε൪߸ 0$ aplay -l**** List of PLAYBACK Hardware Devices ****card 0: ALSA [bcm2835 ALSA], device 0:bcm2835 ALSA [bcm2835 ALSA]
Իͷઃఆͱ֬ೝ - 5• SSH ͷଓΛΔ• ઃఆϑΝΠϧΛ࡞Δ• ϑΝΠϧ໊ : .asoundrc• ༰: ࣍ͷεϥΠυ
pcm.!default {type asymcapture.pcm "mic"playback.pcm "speaker"}pcm.mic {type plugslave {pcm "hw:[ϚΠΫͷΧʔυ൪߸],[ϚΠΫͷσόΠε൪߸]"}}pcm.speaker {type plugslave {pcm "hw:[εϐʔΧʔͷΧʔυ൪߸],[εϐʔΧʔͷσόΠε൪߸]"}}
pcm.!default {type asymcapture.pcm "mic"playback.pcm "speaker"}pcm.mic {type plugslave {pcm "hw:1,0"}}pcm.speaker {type plugslave {pcm "hw:1,1"}}ྫʣ
Իͷઃఆͱ֬ೝ - 6• Raspberry Pi ͷ /home/pi/ ʹஔ͘• 2 ʹΔ$ scp .asoundrc pi@[ϝϞͨ͠IPΞυϨε]:/home/pi/password: [σϑΥϧτraspberry]
Իͷઃఆͱ֬ೝ - 7• 2ͰԻͨ͠ԻΛ࠶ੜ• ͳ͘Ի͞Ε͍ͯΕ OK• Իྔͷௐઅ$ aplay --format=S16_LE --rate=16kout.raw$ alsamixer
Python ͷઃఆ• Python virtual environment ΛͬͯγεςϜͷPython ύοέʔδ͔Β SDK ͱґଘ͢ΔΖΖΛִ• ݱঢ় Google Assistant ͷϥΠϒϥϦ Python 3.xͰͷΈಈ͘• Πϯετʔϧͷ్தͰฉ͔ΕͨΒ y ͰਐΜͰ͍ͩ͘͞
Python ͷઃఆ$ sudo apt-get update$ sudo apt-get install python3-devpython3-venv$ python3 -m venv env$ env/bin/python -m pip install --upgradepip setuptools$ source env/bin/activate
ϥΠϒϥϦͱαϯϓϧίʔυΛऔͬͯ͘Δ(env) $ python -m pip install --upgradegoogle-assistant-library
αϯϓϧίʔυͷೝূ - 1• ϒϥβΛ։͍ͯ Google ΞΧϯτʹϩάΠϯ͢Δ• ΞΫςΟϏςΟίϯτϩʔϧͷઃఆΛͨͭ͠• ೝূπʔϧΛΠϯετʔϧ͢Δ(env) $ python -m pip install --upgradegoogle-auth-oauthlib[tool]
αϯϓϧίʔυͷೝূ - 2• ೝূπʔϧΛ࣮ߦ͢Δ• จࣈίʔυͷΤϥʔ͕ग़ͨΒ(env) $ google-oauthlib-tool --client-secrets /home/pi/[લʹసૹ͓͍ͯͨ͠JSON] --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless(env) $ export LC_ALL=C.UTF-8(env) $ export LANG=C.UTF-8
• ͱදࣔ͞ΕΔͷͰ … ෦ͷ URL Λίϐʔͯ͠ϒϥβʹషΓ͚ͯදࣔ• ΞΧϯτΛબʢඞཁͳ߹ʣ͠ɺALLOW ʢڐՄʣΛΫϦοΫ• දࣔ͞ΕΔίʔυΛίϐʔ͠Please visit this URL to authorize thisapplication: …Enter the authorization code:• ʹೖྗ
αϯϓϧίʔυͷ࣮ߦ• OK, google. What’s the weather in Tokyo• ͱݴͬͯΈΑ͏(env) $ google-assistant-demo