使用API.AI的語音控制PHP應用
我們將在本教程中使用的所有文件都可以在此GitHub存儲庫中使用。
>
通過處理文本或語音以及以JSON格式返回可行的數據,
- api.ai允許開發人員創建與Siri相似的自然語言輸入的PHP應用程序。
API.AI中的關鍵概念包括代理(應用程序),實體(貨幣等自定義概念),意見(基於用戶命令的操作),上下文(用戶表達式上下文),別名(代碼中的實體引用)和域(實體引用)和域(預定義的知識包)。
- >教程展示了構建一個PHP應用程序,使用API.AI,Google的地理編碼API和TimeZone API在任何位置獲取當前時間,說明瞭如何將API數據集成和轉換為可用響應。
- > api.ai的域功能(仍處於beta中),通過提供需要最小設置的內置實體和意圖來簡化集成,從而可以快速創建諸如視頻搜索(YouTube)的應用程序。 >
- >該教程還涵蓋了使用API.AI創建貨幣轉換器PHP應用程序,展示如何處理用戶輸入,定義意圖和實體,並與外部API集成,例如用於實時數據的CurrencyLayer。 api.ai支持多個平台和語言,為開發人員提供了靈活性,可以在網絡環境(包括移動和桌面應用程序)以外創建支持語音的應用程序。
- 概念
- 在我們繼續進行實際部分之前,重要的是要首先了解以下概念:
>
實體 - 實體是我們要將其納入應用程序的自定義概念。他們通過添加示例為特定概念提供了一種賦予特定概念的方式。樣本實體將是“貨幣”。我們通過添加諸如“美元”,“美元”或“美元”之類的同義詞來定義它。然後將每個同義詞分配給可以在代碼中使用的參考值。這只是一個可以用來指代該概念的單詞列表。 API.AI已經提供了一些基本實體,例如 @sys.number,該實體是指任何數字的實體,以及 @sys.email,它是指任何電子郵件地址的實體。我們可以通過將@SYS指定為前綴來使用內置實體。
意圖 - 目的允許我們根據用戶所說的內容來定義程序將執行哪些操作。樣本意圖是“轉換貨幣”。然後,我們列出用戶是否要轉換貨幣的所有可能的短語或句子。例如,用戶可以說“ @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>
>
>如何將API.AI與PHP集成以進行語音識別? >將API.AI與PHP集成以進行語音識別涉及幾個步驟。首先,您需要在API.AI中創建一個新代理。該代理將負責了解用戶的語音輸入並將其轉換為可行的數據。創建代理後,您需要用短語和響應來訓練它。培訓代理後,您可以使用API.AI PHP SDK將代理集成到您的PHP應用程序中。 SDK提供了將語音數據發送給代理並接收處理後數據的方法。>使用api.ai?
構建語音控制的PHP應用程序的先決條件是什麼,使用API.AI構建語音控制的PHP應用 - 面向編程。您還需要對API.AI及其工作方式有工作知識。此外,您需要擁有可以託管PHP應用程序的服務器。最後,您需要在服務器上安裝API.AI php SDK。
>我可以使用其他語音識別API,wpp?
是的,您可以使用帶有PHP的其他語音識別API 。 API.AI的一些流行替代方案包括IBM Watson,Microsoft Azure認知服務和Google Cloud語音到文本。這些API還提供了可以用來將其集成到PHP應用程序中的PHP SDK。>
>如何在PHP應用程序中提高語音識別的準確性?>提高語音識別的準確性在您的PHP應用程序中,涉及對您的API.AI代理進行更多的短語和響應。代理擁有的數據越多,它就越能理解和處理語音輸入。您還可以使用代理商的機器學習功能來不斷地提高其性能。因此,您可以訓練代理商以理解和響應不同語言的語音輸入。在向代理髮送語音數據時,您可以在請求中指定語言。然後,代理將根據指定的語言處理語音輸入。
>我可以在我的php應用程序中使用api.ai進行文本到語音嗎? AI用於PHP應用程序中的文本到語音。 API.AI提供了將文本轉換為語音的方法。您可以使用這些方法使您的應用程序向用戶說出響應或說明。
>如何在PHP應用程序中保護語音數據?
>在PHP應用中保護語音數據在將數據發送到API.AI之前,涉及對數據進行加密。您可以使用PHP的內置加密功能來加密數據。此外,您應該將https用於應用程序和api.ai之間的所有通信以防止數據截距。 >
>我可以將api.ai用於語音控制的Web應用程序嗎?使用API.AI進行語音控制的Web應用程序。 API.AI PHP SDK可用於任何PHP應用程序,包括Web應用程序。您可以使用JavaScript在瀏覽器中捕獲用戶的語音輸入,然後將其發送到您的PHP後端進行處理。>
>如何測試我的PHP應用程序的語音識別功能?可以通過創建一組測試短語和響應來測試PHP應用程序的語音識別功能。然後,您可以使用這些測試來檢查應用程序是否正確理解和處理語音輸入。>我可以將API.AI用於語音控制的移動應用程序嗎?但是,您需要將API.AI SDK用於特定的移動平台(Android或iOS)而不是PHP SDK。移動SDK提供了用於捕獲用戶語音輸入並將其發送到API.AI進行處理的方法。
以上是使用API.AI的語音控制PHP應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

在PHP中,異常處理通過try,catch,finally,和throw關鍵字實現。 1)try塊包圍可能拋出異常的代碼;2)catch塊處理異常;3)finally塊確保代碼始終執行;4)throw用於手動拋出異常。這些機制幫助提升代碼的健壯性和可維護性。

PHP中有四種主要錯誤類型:1.Notice:最輕微,不會中斷程序,如訪問未定義變量;2.Warning:比Notice嚴重,不會終止程序,如包含不存在文件;3.FatalError:最嚴重,會終止程序,如調用不存在函數;4.ParseError:語法錯誤,會阻止程序執行,如忘記添加結束標籤。

在PHP中,include,require,include_once,require_once的區別在於:1)include產生警告並繼續執行,2)require產生致命錯誤並停止執行,3)include_once和require_once防止重複包含。這些函數的選擇取決於文件的重要性和是否需要防止重複包含,合理使用可以提高代碼的可讀性和可維護性。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

HTTP請求方法包括GET、POST、PUT和DELETE,分別用於獲取、提交、更新和刪除資源。 1.GET方法用於獲取資源,適用於讀取操作。 2.POST方法用於提交數據,常用於創建新資源。 3.PUT方法用於更新資源,適用於完整更新。 4.DELETE方法用於刪除資源,適用於刪除操作。
