尝试使用 GCP 的 Vision API
你好。
我是Mandai,负责Wild 开发团队。
我之前使用过 Microsoft 的 Emotion API,但 Google Cloud Platform (GCP) 也有一个使用类似机器学习的图像检测 API。
这次我总结了玩这个Vision API的准备工作。
需要谷歌帐户
使用 GCP 所需的只是一个 Google 帐户和一张信用卡。
GCP的API有一个免费层,如果你只是想尝试一下,你可以使用它,但有些需要信用卡注册。
Vision API 正是这种类型的 API,如果未注册信用卡,则会出现一个对话框,显示“需要付款”。
当您被告知需要付费时,您可能不愿意按下按钮,但这没关系,因为在超出免费限额之前,您会被要求确认!
这个心理障碍是相当大的。
如果您想启用计费,请进入计费帐户创建页面。
如果您注册为新会员,您将收到 300 美元的积分,可在注册后 60 天内使用。
另外,Vision API的使用有免费套餐,只要你不乱用,就可以免费使用。
在 GCP 上启用 Vision API
创建一个合适的项目并从左上角的汉堡包中打开 API Manager。
单击仪表板标题旁边的“启用 API”链接
点击库中“Google Cloud Machine Learning”列表中的“Vision API”
单击 Google Cloud Vision API 标题旁边的“启用”以启用该 API。
获取API密钥
启用 API 后,创建 API 密钥以访问 API。
从左侧菜单中选择“凭据”,然后按“创建凭据”按钮
从下拉菜单中选择“API 密钥”。
将出现一个对话框,显示 API 密钥,因此复制并粘贴它并将其保存在本地。
创建时,任何人都可以通过将 API 密钥添加到请求参数来使用它,因此请使用“限制密钥”链接来限制 API 密钥的使用。
有四种方法可以限制密钥。
HTTP 引荐来源网址
此类型使用 HTTP 标头中嵌入的引用者信息来限制 API 使用。
此方法在与浏览器等一起使用时有效。
IP地址
在服务器上执行批处理等时,使用 IP 地址(IPv4/IPv6)的限制。
您可以注册多个IP地址,以便可以从多个服务器进行访问,也可以使用子网掩码指定范围。
安卓应用程序
如果您想限制Android应用程序的使用,请在开发环境中获取SHA-1签名证书的指纹并将其与包名称一起注册。
iOS应用程序
如果您想限制 iOS 应用程序的使用,则需要注册捆绑包 ID。
即使您仅将其用于测试目的,最好对其进行限制,但如果绝对必要,您可以多次创建 API 密钥,因此我们强烈建议您在以下情况下立即删除它:你已经用完了。
现在您可以使用该 API 了。
测试代码
现在准备工作已经完成,我想测试从 PHP 运行 API。
基本信息均在Google Cloud Vision API 文档 | Google Cloud Vision API | Google Cloud Platform可以从Getting Started | API Client Library for PHP (Beta) | Google Developers
这次我要用curl来写彻底。
Vision API是图像识别API,因此请求数据中需要包含图像信息。
可以使用以下图像信息。
- 本地图像数据
- 放置在 Google Cloud Storage 上的图像数据
附带说明一下,在顺序分析本地图像数据时,流量是一个需要考虑的问题。
在实施全面的生产环境时,关注带宽使用情况可能是个好主意。
在这种情况下,您需要注意服务器存储,因此您可能需要考虑将图像存储在Google Cloud Storage中。
公共 Internet URI 不被接受为外部源,因此如果您想与 AWS S3 等集成,则需要进行一些更改。
使用 API 密钥使用 Vision API 非常简单,因此请随意发布代码。
<?php $path = '/path/to/image.jpg'; $url = 'https://vision.googleapis.com/v1/images:annotate?key='. 'YOUR_SECRET_API_KEY'; $body = []; $res = []; file_exists($path) or die("file not found. path:". $path); $image = base64_encode(file_get_contents($path)); $body = [ 'requests' => [ [ 'image' => ['content' => $image], 'features' => [ ['type' => 'LABEL_DETECTION'], ['type' => 'TEXT_DETECTION'], ['type' => > 'FACE_DETECTION'], ['type' => 'LANDMARK_DETECTION'], ['type' => 'LOGO_DETECTION'], ['type' => 'SAFE_SEARCH_DETECTION'], ['type' => 'IMAGE_PROPERTIES'], ], ], ], ]; $ch = curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => [ '内容类型: application/json', ], CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, CURLOPT_VERBOSE => true, CURLOPT_POSTFIELDS => json_encode($body), ]); 尝试 { $response = curl_exec($ch); } catch (Exception $ex){ var_dump($ex->getMessage()) ; } $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); echo "-- header --\n". substr($response, 0, "\n"; .substr($response, $header_size).
如果您在$path中指定本地镜像文件的绝对路径,并在“YOUR_SECRET_API_KEY”中输入API密钥,则会对其进行分析。
(在我的PHP5.6环境下确认运行)
我遇到的一个问题是我忘记在标头中包含 Content-Type,但使用 Microsoft Motion API,所以我很难注意到。
很容易说您可以通过查看请求来理解它,但正如 Google 所期望的那样,围绕此的规范非常严格......
嗯,请问您成功收到回复了吗?
在主机上玩时,根据图像,屏幕流动得不是很快?
该API很容易分析,但组织响应数据是要求最高的API。
返回的数据太多!
看响应数据似乎很痛苦,所以我想重新整理后再做。
就是这样。