我們將在本教程中使用的所有文件都可以在此GitHub存儲庫中使用。
>
意圖 - 目的允許我們根據用戶所說的內容來定義程序將執行哪些操作。樣本意圖是“轉換貨幣”。然後,我們列出用戶是否要轉換貨幣的所有可能的短語或句子。例如,用戶可以說“ @sys.number:number @currency:@currency in @currency:tocurrency:tocurrency?'在此示例中,我們使用了兩個實體: @sys.number和@currency。實體之後使用結腸允許我們為該實體定義一個別名。然後可以在我們的代碼中使用此別名來獲取實體的價值。我們需要給相同的實體一個不同的別名,以便我們可以在代碼中分別對待它們。為了使人類理解上述意圖,我們要做的就是替代具有實際價值觀的實體。因此,用戶可能會說“日元中的900美元是多少?對於Tocurrency @currency。
別名 - 別名提供了一種指代代碼中特定實體的方法,正如我們先前在意圖的解釋中所看到的那樣。
>
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
>現在我們對主要概念有了了解,我們可以繼續構建一個簡單的應用程序。我們要構建的第一件事是將當前時間置於特定位置的應用。
>
接下來,轉到代理頁面,並單擊“創建代理”按鈕創建新代理。在創建新代理的頁面中,輸入名稱,描述和語言,然後保存。
>這為您提供了訂閱密鑰,開發人員訪問令牌和客戶端訪問令牌。您可以使用這些來從客戶端(瀏覽器)或服務器向API提出請求。從服務器中提出請求的一個優點是將您的憑據隱藏。
接下來,安裝guzzle。我們將使用Guzzle 5向API.AI.
提出請求。然後,創建一個新的php文件(time.php)並添加以下代碼,以便我們可以使用文件中的guzzle。
之後,定義您的API鍵:
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
我們現在可以向API.AI提出請求。為了提出請求,我們需要將開發人員訪問令牌和訂閱密鑰作為標題傳遞。然後,我們將請求的正文作為JSON傳遞。請求主體應包含查詢和lang鍵。查詢通過郵政請求從客戶端提交。該應用程序查詢的一個示例是“西班牙巴塞羅那幾點鐘?”或“目前在日本伊克布庫羅的時間是多少?”。返回的響應是一個JSON字符串,因此我們通過調用$響應的JSON方法將其轉換為數組。
<span>composer require guzzlehttp/guzzle:~5.0</span>
>這是我們在上述請求時得到的示例響應:
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
如果我們獲得200個狀態代碼,則意味著請求成功。我們需要的數據存儲在結果項目中。在這種情況下,我們只需要從參數提取位置。如果未返回位置,那麼我們只會告訴用戶找不到位置。
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
如果找到位置,我們向Google Geocoding API提出請求,以將位置轉換為坐標。如果狀態可以,這意味著我們得到了結果。因此,我們只從第一個結果提取緯度和經度值。
><span>composer require guzzlehttp/guzzle:~5.0</span>
>
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
>
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>
>我們也有語音識別。 JS,我們用於將語音轉換為文本。這使用網絡語音API。可悲的是,在寫作時,它仍然僅在一些瀏覽器上得到部分支持,因此本教程將假定您使用Chrome(確實支持它)。
>讓我們解釋以上文件。首先是我們將用來存儲當前語音識別對象的全局變量。
接下來是StarTreagnition方法。這是創建一個新的語音識別對象。這將要求用戶使用麥克風。接下來,我們將語言設置為英語並開始語音識別。然後,我們聆聽Onstart活動。當觸發此事件時,這意味著語音識別已經開始。發生這種情況時,我們調用Updaterec方法,該方法更改了按鈕的文本,以啟動和停止語音識別。我們還聆聽on Result事件,當用戶停止講話幾秒鐘時,該事件會觸發。這包含語音識別的結果。我們必須循環瀏覽結果,並在每個結果中使用成績單項來獲取所需的文本。完成此操作後,我們調用SETINPUT方法,該方法更改查詢文本字段的值,並調用將查詢提交到服務器的發送方法。接下來,我們稱之為停止語音識別並更新UI的停止認知方法。我們還需要在ONEND事件中進行同樣的事情。
><span>$query = $_POST['query']; //the users query </span><span> </span><span>$response = $client->post('https://api.api.ai/v1/query', array( </span><span> 'headers' => array( </span><span> 'Authorization' => "Bearer {$apiai_key}", </span><span> 'ocp-apim-subscription-key' => $apiai_subscription_key, </span><span> 'Content-Type' => 'application/json; charset=utf-8' </span><span> ), </span><span> 'json' => array( </span><span> "query" => $query, </span><span> "lang" => "en" </span><span> ) </span><span>)); </span><span> </span><span>$result = $response->json();</span>
這是Updaterec方法。
>Array ( [id] => eb69f468-6e1a-41c9-883d-6ac7c71cd187 1739117986 => 2015-05-16T09:19:47.519Z [result] => Array ( [source] => domains [resolvedQuery] => What's the current time in Barcelona Spain? [speech] => [action] => clock.time [parameters] => Array ( [location] => Barcelona Spain ) [metadata] => Array ( [inputContexts] => Array ( ) [outputContexts] => Array ( ) [contexts] => Array ( ) ) ) [status] => Array ( [code] => 200 [errorType] => success ) )
setInput方法。
<span>if(!empty($result['result']) && !empty($result['result']['parameters']['location'])){ </span><span> $location = $result['result']['parameters']['location']; </span><span> </span><span>}else{ </span><span> echo "Sorry, I could not find that location."; </span><span>}</span>
>停止認知方法。
<span>$place_response = $client->get("http://maps.googleapis.com/maps/api/geocode/json?address={$location}&sensor=false"); </span><span> </span><span>$place_result = $place_response->json(); </span><span> </span><span>if($place_result['status'] == 'OK'){ </span><span> </span><span> $lat = $place_result['results'][0]['geometry']['location']['lat']; </span><span> $lng = $place_result['results'][0]['geometry']['location']['lng']; </span><span>}</span>
用戶按查詢字段上的Enter鍵時,這也觸發要發送到服務器的查詢。
<span>$timestamp = time(); //get the current unix timestamp </span><span> </span><span>$time_response = $client->get("https://maps.googleapis.com/maps/api/timezone/json?location={$lat},{$lng}×tamp={$timestamp}&key={$google_api_key}"); </span><span> </span><span>$time_result = $time_response->json(); </span><span> </span><span>if($time_result['status'] == 'OK'){ </span><span> $timezone = $time_result['timeZoneId']; </span><span> </span><span> date_default_timezone_set($timezone); </span><span> </span><span> echo 'It's currently ' . date('l, F j, Y g:i A') . ' in ' . $location; </span><span>}</span>
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
下一步是我們向服務器提交查詢的main.js文件。一旦得到響應,我們就會使用響應式聲音將其說出來,並將其輸出在響應容器中。這樣,我們可以從視覺上檢查響應。
<span>composer require guzzlehttp/guzzle:~5.0</span>
我們將要構建的下一個應用程序允許用戶將特定金額從一種貨幣轉換為另一種貨幣。
首先,創建一個新代理並稱其為貨幣轉換器。
>
>
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
>。
“動作”部分是我們定義要執行此特定意圖的操作或方法的地方。在這種情況下,我們不會定義任何內容,因為我們只是創建一個只能做一件事的應用程序。>
>“履行”部分是我們在使用意圖後要輸出的語音模板定義模板。例如,我們可以說以下內容:
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>
>完成後,單擊“保存”按鈕以保存意圖。
>
>現在我們準備繼續進行代碼。然後,在工作目錄中創建一個Exchange-rate.php文件,添加以下代碼:<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
>,它基本上與我們在上一個應用程序中的早期相同。只有這一次,我們添加了$ CurrencyLayer_Apikey變量。這將存儲我們從CurrencyLayer.com獲得的API密鑰,這是一種API,它使我們能夠從一種貨幣到另一種貨幣獲得當前的匯率。如果您想跟進,請繼續註冊API鍵。
> 接下來,我們檢查是否有任何結果,並提取所需的數據。在這種情況下,我們需要獲取用戶希望轉換的貨幣,將其轉換為金額的貨幣。。
然後,我們向API提出請求,然後從結果中提取匯率:<span>composer require guzzlehttp/guzzle:~5.0</span>
我們從API中獲得的結果如下:
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
>現在我們有了當前的匯率,我們現在要做的就是將速率乘以用戶提供的數量,然後輸出結果。
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>
>
<span>$query = $_POST['query']; //the users query </span><span> </span><span>$response = $client->post('https://api.api.ai/v1/query', array( </span><span> 'headers' => array( </span><span> 'Authorization' => "Bearer {$apiai_key}", </span><span> 'ocp-apim-subscription-key' => $apiai_subscription_key, </span><span> 'Content-Type' => 'application/json; charset=utf-8' </span><span> ), </span><span> 'json' => array( </span><span> "query" => $query, </span><span> "lang" => "en" </span><span> ) </span><span>)); </span><span> </span><span>$result = $response->json();</span>
>
Array ( [id] => eb69f468-6e1a-41c9-883d-6ac7c71cd187 1739117986 => 2015-05-16T09:19:47.519Z [result] => Array ( [source] => domains [resolvedQuery] => What's the current time in Barcelona Spain? [speech] => [action] => clock.time [parameters] => Array ( [location] => Barcelona Spain ) [metadata] => Array ( [inputContexts] => Array ( ) [outputContexts] => Array ( ) [contexts] => Array ( ) ) ) [status] => Array ( [code] => 200 [errorType] => success ) )
在本教程中,我們學會瞭如何使用API.AI來創建啟用語音的PHP應用程序。瀏覽器支持仍然非常有限,因為網絡語音API仍未得到廣泛實現。但是API.AI支持除Web之外的其他平台。 Android,Cordova,.net,iOS就是幾個例子。這意味著我們可以使用API.AI,而不必擔心這些平台上的支持。如果您想了解更多信息,請務必查看他們的文檔。我們在本教程中使用的文件可在此GitHub存儲庫中可用。
<span>if(!empty($result['result']) && !empty($result['result']['parameters']['location'])){ </span><span> $location = $result['result']['parameters']['location']; </span><span> </span><span>}else{ </span><span> echo "Sorry, I could not find that location."; </span><span>}</span>
構建語音控制的PHP應用程序的先決條件是什麼,使用API.AI構建語音控制的PHP應用 - 面向編程。您還需要對API.AI及其工作方式有工作知識。此外,您需要擁有可以託管PHP應用程序的服務器。最後,您需要在服務器上安裝API.AI php SDK。
>
>如何在PHP應用程序中提高語音識別的準確性?>我可以在我的php應用程序中使用api.ai進行文本到語音嗎? AI用於PHP應用程序中的文本到語音。 API.AI提供了將文本轉換為語音的方法。您可以使用這些方法使您的應用程序向用戶說出響應或說明。
>
>我可以將api.ai用於語音控制的Web應用程序嗎?使用API.AI進行語音控制的Web應用程序。 API.AI PHP SDK可用於任何PHP應用程序,包括Web應用程序。您可以使用JavaScript在瀏覽器中捕獲用戶的語音輸入,然後將其發送到您的PHP後端進行處理。以上是使用API.AI的語音控制PHP應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!