第1步:要求
Raspberry Pi零,B +,2或3(请参见以下说明)
Raspian已安装Jessie并已通过Internet访问
Pi以太网或Wifi(最好是直接以太网)(最好是直接以太网)
SSH访问GitHub上的
软件:
https://github.com/rgrokett/RaspiAsteriskGoogle
一个SIP/VOIP电话(例如Grandstream GXP1620)或SoftPhone,例如:http://www.asteriskguru.com/tutorials/xlite_softp 。..点击HTTP://www.zoiper.com/en/voip-softphone/download/z 。..
注意 :尽管此方法可在Raspi Zero W上使用,但在Raspberry Pi 3上可运行得更好。
该项目假定您具有Raspian命令行,SSH的一些知识以及Asterisk PBX的一些初步知识。 。它还假定您具有配置了Raspian Jessie(精简版的Raspberry Pi)的Raspberry Pi,并已连接到网络。这不需要在Pi上使用GUI,因此假定无头操作和登录提示,终端或SSH访问。
步骤2:Pi上的Asterisk PBX配置
Pi需要出站Internet访问,但Asterisk PBX不需要任何外部SIP语音提供程序。该项目不使用呼入或呼出语音呼叫。
如果您从未使用过Asterisk,则可能应该查阅一些Asterisk教程。不过,这里不需要大多数信息。 http://www.asterisk.org/
请注意,它不使用“ FreePBX for Raspberry Pi”软件包,而只使用Raspian命令行安装版本。
该项目应在CLEAN RASPIAN JESSIE安装上完成。使用现有安装可能已经进行了一些修改,从而影响了Asterisk或Google SDK。
1)在Raspberry Pi上安装Asterisk PBX:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install asterisk git
依赖项很少,所以可能要花点时间!
2)从Github检索项目文件:(https://github.com/rgrokett/RaspiAsteriskGoogle)
$ cd /home/pi
$ git clone https://github.com/rgrokett/RaspiAsteriskGoogle.g.。.
3)更新Asterisk PBX,以添加此项目使用的SIP和分机条目。
$ cd /home/pi/RaspiAsteriskGoogle
$ bash 。/install.sh
注意 :
您将看到“ No client_secret.json…”和“ No Google API OAUTH…”错误消息,因为这些消息将在以后进行设置。暂时暂时忽略它们。
可以多次执行install.sh脚本。它将验证安装。
步骤3:将VOIP(SIP)电话添加到Asterisk PBX
4 )将SIP电话添加到您的星号。由于有很多方法可以做到这一点,所以我展示了一个通用配置。每个电话都有不同的选项,但这应该是所有需要的。
有关SIP(VOIP)软电话,请参阅前面的“要求”部分。 (基于PC的软件。需要带麦克风的耳机)或使用物理VOIP电话,例如Amazon的Grandstreams。低于50美元的廉价手机就可以了。
这将向Asterisk添加一个分机号为5310的SIP电话。请记住,这不包括呼入或呼出电话。仅内部通话。
使用以下选项配置您的SIP电话。大多数其他电话选项均未使用,因此通常可以忽略。
SIP Phone options:
SIP Proxy Server: 192.168.1.XX 《- The IP Address of your Raspi Pi $ hostname –I
Domain/Realm/Registration:
Username: 5310
Password: {blank}
请注意,您需要在电话的“扩展”部分中输入SIP代理IP(即Pi的IP地址)。 (某些电话具有多个分机,但该项目仅需要1。)
5)将SIP/VOIP电话摘机,看看是否可以获得拨号音。
如果是这样,请尝试在VOIP电话上拨打 1000#。您应该获得一个内置演示。
Debugging:
If you don’t get dial tone, your SIP Phone isn’t registering to your Asterisk server. Try the following:
a. Reboot the Raspberry and then the SIP phone to see if they reconnect.
b. Verify the files above are edited correctly.
c. Access Asterisk from command line:
$ sudo asterisk –r
CLI》 sip show peers
This should show your sip phone’s IP and status
Watch out for firewalls, particularly if using a softphone!
d. Verify IP addresses of the Sip Phone and Raspi and be sure you can ping the phone from the Raspi.
e. If still an issue, turn on SIP Debugging:
CLI》 sip set debug on
This will display SIP connection attempt messages. If you see nothing after a few minutes, then your SIP Phone isn’t even trying to talk to Asterisk. You need to dig into the SIP Phone’s setup instructions.
f. Asterisk log messages go to /var/log/asterisk/messages. But note there can be lots of nasty looking messages, most are for unused/unneeded features. So it can be difficult to decipher.
g. Google is your friend. Cut/paste any error messages you see into it to learn more!
步骤4:Google Assistant SDK安装
如果您已成功获得拨号音并“恭喜”演示,那么您现在可以使用Asterisk PBX!
现在,您需要在Google Developers网站上创建一个(免费)帐户,并安装其适用于Raspberry Pi的Python Google Assistant SDK。
摘录自Google Assistant SDK入门Raspberry Pi和Python:
https://developers.google.com/assistant/sdk/protot 。..
配置Google Developer Project
1)转到Google Projects页面:https://console.cloud.google.com/project
您可能需要创建Google Developers帐户或使用现有的Google( gmail)登录帐户凭据。
2)创建一个名为“ AsteriskSpeechAPI”的新项目(或您想要的任何所需名称)
3)为该项目启用Google Assistant API您选择了:
https://console.developers.google.com/apis/api/emb 。..
点击启用
4)创建一个Oauth客户端ID,其步骤如下:
a)创建客户端ID:https://console.developers.google.com/apis/creden 。..
b)如果询问,在上方输入与上面相同的项目名称OAuth同意屏幕选项卡上的产品名称,然后单击保存。
c)单击其他并为客户ID提供一个名称(再次与上面相同)没关系)。
d)单击创建。将会出现一个对话框,显示您的客户端ID和密码。
无需记住或保存该ID,只需关闭对话框即可。
e)单击最右侧的向下箭头。屏幕的顶部,以名为( client_secret_XXXX.json )
的JSON文件的形式下载客户端ID和密码(要再次重新获取凭据,请转到Google Assistant API管理器,上面的第3步,然后选择凭据,然后单击您项目的下载图标。)
f)将 client_secret_XXXX.json 文件复制到/home/pi/client_secret .json 在您的Raspi上。
(将其重命名为 client_secret.json )
您可以使用剪切/粘贴来执行此操作,如果您愿意:
$ cd /home/pi
$ nano /home/pi/client_secret.json
粘贴到编辑器中并保存
5)Google要求您与Google共享某些活动数据以使用其SDK。助手需要此信息才能正常运行。 (一旦不再希望使用Assistant SDK,可以再次关闭。)
a)转到“活动控件”页面:https://myaccount.google.com/activitycontrols
b)设置以下 ON (蓝色):
• Web & App Activity
• Location History
• Device Information
• Voice & Audio Activity
第5步:安装并编译Google Assistant Pi for Pi
1)获取Google Assistant Python SDK软件并安装:
在您的Raspi上,执行以下操作:
sudo apt-get update
sudo apt-get install python-dev
sudo apt-get install portaudio19-dev libffi-dev libssl-dev
sudo apt-get install python-pip
sudo python -m pip install --upgrade PySocks
sudo python -m pip install --upgrade google-auth-oauthlib[tool]
sudo python -m pip install --upgrade google-assistant-sdk
注意:在Pi Zero上,该代码可用于大约一个小时或更长时间,其中包含很多消息!
完成后,重新启动Pi:
$ sudo reboot
步骤6:设置Google OAUTH授权
1 )在您的Pi上,执行以下操作:
$ python -m google-oauthlib-tool --client-secrets /home/pi/client_secret.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless
您应该看到以下内容:
请转到以下URL:https://。.. Enter授权代码:
复制返回的长网址并将其粘贴到您的浏览器(任何PC上的任何浏览器)中。
选择用于设置项目的帐户。
批准后,浏览器中将显示一个代码,例如“ 4/XXXX ”。复制此代码并将此代码粘贴到Raspi终端中。它应显示如下:
已保存的凭证(和路径)
如果相反,它将显示: InvalidGrantError 输入了无效的代码。请重试,请小心复制并粘贴整个代码。
这会将您的oauth令牌保存到/home/pi/.config/googlesamples-assistant/assistant_credentials.json
第7步:测试Google Assistant SDK
1)执行测试程序:
$ cd /home/pi/RaspiAsteriskGoogle
$ bash 。/test.sh
您应该会看到类似以下的内容。
如果成功,这将发送一个将音频文件in.wav记录到Google助手,并收到音频文件out.wav响应。您可以将它们复制到PC上以在装有扬声器的Raspi上播放或播放。
Found client_secret.json OK
Found OAUTH assistant_credentials.json OK
Sending sample to Google Assistant API.。.
DEBUG:google.auth.transport.requests:Making request: POST https://accounts.google.com/o/oauth2/token
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): accounts.google.com
DEBUG:urllib3.connectionpool:https://accounts.google.com:443 “POST /o/oauth2/token HTTP/1.1” 200 None
INFO:root:Connecting to embeddedassistant.googleapis.com
INFO:root:Recording audio request.
DEBUG:root:ConverseRequest: config {
audio_in_config {
encoding: LINEAR16
sample_rate_hertz: 16000
}
audio_out_config {
encoding: LINEAR16
sample_rate_hertz: 16000
volume_percentage: 50
}
}
DEBUG:root:ConverseRequest: audio_in (6400 bytes)
DEBUG:root:ConverseRequest: audio_in (6400 bytes)
DEBUG:root:ConverseRequest: audio_in (6400 bytes)
DEBUG:root:ConverseRequest: audio_in (6400 bytes)
DEBUG:root:ConverseRequest: audio_in (6400 bytes)
DEBUG:root:ConverseRequest: audio_in (6400 bytes)
DEBUG:root:ConverseRequest: audio_in (6400 bytes)
DEBUG:root:ConverseRequest: audio_in (6400 bytes)
DEBUG:root:ConverseRequest: audio_in (4096 bytes)
DEBUG:root:ConverseRequest: audio_in (3200 bytes)
…(more)
DEBUG:root:ConverseResponse: event_type: END_OF_UTTERANCE
INFO:root:End of audio request detected
DEBUG:root:ConverseResponse: result {
spoken_request_text: “what is the current weather”
}
DEBUG:root:ConverseRequest: audio_in (3200 bytes)
INFO:root:Transcript of user request: “what is the current weather”。
INFO:root:Playing assistant response.
DEBUG:root:ConverseResponse: result {
conversation_state: “ &C#590…6f7-0000-2231-932c-94e…3c9ba¸:Kj93Nlg1eVpmWWMGlLSURpYUpWdkpXb2hRUW43YnNIcmdBQUFDQ1RjV0… ”
microphone_mode: CLOSE_MICROPHONE
}
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
DEBUG:root:ConverseResponse: audio_data (1600 bytes)
…(more)
DEBUG:root:ConverseResponse: audio_data (1044 bytes)
INFO:root:Finished playing assistant response.
AUDIO FILES:
-rw-r--r-- 1 pi pi 55340 Apr 30 17:02 in.wav
-rw-r--r-- 1 root root 252288 May 1 14:51 out.wav
If you have AUDIO on this Pi:
Verify Audio with:
$ speaker-test -t wav
Playback audio from Google:
$ aplay --format=S16_LE --rate=16k --file-type=wav out.wav
步骤8:现在,您可以尝试使用Asterisk PBX Google助手!
1。再次重新运行install.sh脚本,以确保OAUTH和客户端JSON正常:
$ cd /home/pi/RaspiAsteriskGoogle
$ bash 。/install.sh
2。重新启动Raspberry Pi。
3。使用您的SIP电话,拨号6666#
您应该先拨打音频,振铃,然后再输入语音提示。
如果要这样做,那就太好了!尝试向Google提问:
·现在几点了?
·乔治亚州亚特兰大的天气如何?
·地球有多大?
·在英国伦敦几点几点了?
·告诉我一个笑话
·等等……
注意:在Pi零,响应时间有5到7秒的延迟,部分原因是python SDK API开销。更快的Pi可以减少这种情况。
完成后就挂断电话。
第9步:故障排除指南
1)您确实获得了拨号音,并能够拨打Asterisk演示程序(1000#)了是吗?
2)在AGI程序中打开调试模式:
$ cd /home/pi/RaspiAsteriskGoogle
$ nano google.agi
Change my $debug = 0;
To my $debug = 1;
Save
$ bash 。/install.sh
3)访问Asterisk CLI进行调试:
$ sudo asterisk -r
CLI》 agi set debug on
CLI》 core set debug 4
4)再次拨打 6666#并查看消息。
5)您可以查看/home/pi/RaspiAsteriskGoogle/google.agi 用于将调试消息与代码匹配。请注意,除了消息
以外,Asterisk还显示许多其他调试信息。如果对Asterisk extensions.conf或sip.conf进行更改,则应重新启动Asterisk
CLI》 core restart now
如果您对google.agi进行了更改,请再次执行安装脚本以进行安装
$ bash 。/install.sh
6)如果电话响了无人接听,则extensions.conf在6666部分有问题。
如果您手动编辑了extensions.conf,则必须使用
CLI》 dialplan reload
重新加载。7)如果电话应答但没有音频,请确认星号目录中的文件由星号userid拥有:
sudo chown asterisk:asterisk /usr/share/asterisk/agi-bin/google.agi
sudo chown asterisk:asterisk /usr/share/asterisk/sounds/custom/google*.sln
8)查找在“ /tmp ”目录中创建的音频文件:
$ ls -l /tmp
-rw-rw---- 1 asterisk asterisk 32266 May 3 02:01 google_audio3424_8k.sln
-rw-rw---- 1 asterisk asterisk 73004 May 3 02:01 google_audio3424_in.wav
-rw-rw---- 1 asterisk asterisk 64576 May 3 02:01 google_audio3424_out.wav
-rw-rw---- 1 asterisk asterisk 6124 May 3 02:01 google_audio3441.wav
google_audio3441.wav -- Audio of your question
google_audio3424_in.wav -- Audio formatted for Google
google_audio3424_out.wav -- Audio response from Google
google_audio3424_8k.sln -- Audio formatted for Asterisk
9)如果您的问题没有得到Google的答复,请再次运行test.sh脚本以验证OAUTH令牌和SDK是否正确。
$ bash 。/test.sh
如果其他所有方法都失败,请执行步骤通过上面的命令返回,以确保您没有错过任何一个步骤!
步骤10:结果
我发现Google Assistant的语音识别功能
当与SIP电话和Asterisk PBX一起使用时,p》
非常好。无论是在听筒还是免提电话上,识别度都非常好。 Raspberry Pi Zero可以处理Asterisk音频处理,但运行SDK的速度较慢。当然,没有使用Home控件或Wake Word功能,Google Assistant可以处理的各种问题/答案等同于Google Home™。
责任编辑:wv
-
树莓派
+关注
关注
116文章
1697浏览量
105506 -
语音助手
+关注
关注
7文章
235浏览量
26791
发布评论请先 登录
相关推荐
评论