第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文章
1706瀏覽量
105610 -
語音助手
+關注
關注
7文章
235瀏覽量
26799
發布評論請先 登錄
相關推薦
評論