使用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传输。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。
