前段时间在一次微软的黑科技分享会上,体验到微软的人工智能发展得还不错,感觉都挺高大上的。
今天探索了一下人脸识别API的使用,这里分享一下。
首先通过微软的门户开通了认知服务账户,生成了密钥。在上面有API SDK的链接,打开后是github的1个项目,里面包含有android、ios、windows、Python的版本,下载windows后发现里面是一个WPF版的demo,试了一下可以运行。但是我其实想要用PHP调用,怎么办?难道要用这个demo修改1个C#版本的Web接口提供php访问?
想到之前有了解到微软人脸识别API其实应该是REST API方式提供,于是乎又到微软的网站上找找文档看看,最后找到https://dev.projectoxford.ai/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236,这里就是具体的API详细说明,并且上面有PHP的demo , OK! 这个就容易了。
在使用PHP调用时也不是那么的顺利,几经波折。下面分享一下遇到的几个问题及解决方法。
1、demo是依赖Http_Request2做的,首先得有Http_Request2支持
找到HTTP_Request2-2.3.0(http://pear.php.net/package/HTTP_Request2/download) 下载并解压到目录下,并没有成功运行,发现还需要PEAR和Net_URL2,于是乎又找到并下载了PEAR-.10.3(http://pear.php.net/package/PEAR/download)和Net_URL2-.1.2(http://pear.php.net/package/Net_URL2/download)。
2、再运行时又有 Need OpenSSL support for https…的报错,看起来是不支持https,于是检查php_openssl扩展,确实是没有打开。这个问题是根据自己的php配置产生的,有可能还会出现其他依赖函数缺少,根据报错做相应配置就好,比如可能会提示缺少popen,readlink之类的。
3、又来1个报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Fatal error: Uncaught
<table style="border: 1px" cellspacing="0">
<tr>
<td colspan="3" style="background: #ff9999"> <b>HTTP_Request2_ConnectionException</b>: Unable to connect to tls://api.cognitive.azure.cn:443. Error: stream_socket_client(): unable to connect to tls://api.cognitive.azure.cn:443 (Unknown error) stream_socket_client(): Failed to enable crypto stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in <b>F:\face\HTTP\Request2\Adapter\Socket.php</b> on line <b>332</b></td>
</tr>
<tr>
<td colspan="3" style="background-color: #aaaaaa; text-align: center; font-weight: bold;">Exception trace</td>
</tr>
<tr>
<td style="text-align: center; background: #cccccc; width:20px; font-weight: bold;">#</td>
<td style="text-align: center; background: #cccccc; font-weight: bold;">Function</td>
<td style="text-align: center; background: #cccccc; font-weight: bold;">Location</td>
</tr>
<tr>
<td style="text-ali in F:\face\HTTP\Request2\SocketWrapper.php on line 134
|
这个错就没什么头绪了,只有找度娘,发现有人说这个应该是证书验证的问题,可以设置Http_Request2的ssl_verify_peer参数来关闭。
设置为false后错误确实消失了。具体的就没有去深究了。
4、到这里接口就已经可以正常返回结果,但结果里提示1个错误信息是
Access denied due to invalid subscription key. Make sure you are subscribed to an API you are trying to call and provide the right key.
subscription key复制过来的怎么会有问题呢,反复核对检查了两遍,确实没有问题,难道是服务开通有问题?
在查看订阅账户信息时偶然看到 终结点https://api.cognitive.azure.cn/face/v1.0 ,这跟demo里的 https://westus.api.cognitive.microsoft.com/face/v1.0是不一样的,这才想到在官网介绍有中国版和全球版,我使用的中国版的订阅,接口demo里地址应该是全球版的,所以会报subscription key无效。
终于看到第一个返回结果了
1
2
3
4
5
6
7
8
9
10
11
|
[
{
"faceId": "62e54f75-91b2-4e96-982a-018d5dcacc5c",
"faceRectangle": {
"top": 166,
"left": 360,
"width": 109,
"height": 109
}
}
]
|
以下是发现人脸的api demo代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
require_once
'HTTP/Request2.php'
;
$request
=
new
Http_Request2(
'https://api.cognitive.azure.cn/face/v1.0/detect'
);
$url
=
$request
->getUrl();
$headers
=
array
(
// Request headers
'Content-Type'
=>
'application/json'
,
'Ocp-Apim-Subscription-Key'
=>
'c635b7e3ad354ea08f957eb1b65d0d77'
,
);
$request
->setConfig([
'ssl_verify_peer'
=>FALSE,
'ssl_verify_host'
=>FALSE]);
$request
->setHeader(
$headers
);
$parameters
=
array
(
// Request parameters
'returnFaceId'
=>
'true'
,
'returnFaceLandmarks'
=>
'false'
,
);
$url
->setQueryVariables(
$parameters
);
$request
->setMethod(HTTP_Request2::METHOD_POST);
// Request body
$request
->setBody(
'{"url":"要发现人脸的图片地址,也可以是[binary data]"}'
);
try
{
$response
=
$request
->send();
echo
$response
->getBody();
}
catch
(HttpException
$ex
)
{
echo
$ex
;
}
《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》
示例图片地址:http://p1.so.qhimgs1.com/bdr/_240_/t01182deb4809f95b31.jpg,(百度点击图片右键,‘复制图片地址’)
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c422461f1c71e4cf7f79435589822f3b1cfc091ab1a168252a5577f1c893d60bc0bc932e298d2233760b8735578845e7961b7ad621e659fdea44a7ecff25e2d9c5a0df4322c044720c97f1fb4d711edd1e800340e0b1e949025e60ad9c43728f5d60599c3434b450f991693243d2a8860a0b8374&p=c43dc54ad6c044ee43a8cb2d0214c6&newp=8b2a972999934eaf5be8c66617438e231610db2151d4d4116b82c825d7331b001c3bbfb423251205d0c47c660ba44f5ae1fb367433012ba3dda5c91d9fb4c57479e468&user=baidu&fm=sc&query=%CE%A2%C8%ED%C8%CB%C1%B3%CA%B6%B1%F0+InvalidURL&qid=e2ca8ad60000099f&p1=1
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
http://doc.okbase.net/borisjineman/archive/247508.html
https://www.cnblogs.com/yxhblogs/p/5869671.html
|