怎样通过树莓派上的Asterisk PBX运行Google语音助手

电子说

1.3w人已加入

描述

第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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分