目前人工智能的发展正如火如荼, 基于此的应用也是层出不穷比如实时的现场多语种翻译机, 还有各种 App 里出现的实名认证活体检测技术以至于小学生都已经在用 Python 开发人工智能程序了!
看到这么多应用, 虽然小学生都在开发人工智能程序了, 但是对于初次接触的人来说, 搭建环境构建模型编写程序调试应用, 花费的时间也不少其门槛能不能进一步降低, 从而让我们快速上手呢?
答案当然是可以的毕竟一切都可以服务化阿里云就提供了许多人工智能的服务, 进一步降低了开发者的使用门槛比如阿里云大学在线考试系统使用的身份证识别人脸比对技术, 就来自阿里云提供人脸识别产品(https://data.aliyun.com/product/face )
我们以一个宠物匹配小游戏为例, 来介绍下如何快速上手
思路是我们先找到一些动物的照片, 看看他们的脸型比例通过与人脸的比例进行匹配, 我们大概就能判断出每个人与其相似的宠物了所以人脸接测定位的服务(https://help.aliyun.com/knowledge_detail/53399.html ), 就能满足我们的需求了实际上这些服务也接入了云市场(https://market.aliyun.com/products/57124001/cmapi020042.html ), 区别在于前者 API 校验是其自己的规范, 后者走的是 APPCODE 简单身份认证或者云市场 API 网关统一的签名认证其他方面并没有太大差别
我们以前者为例, 先开通产品, 然后就可以按照文档 (https://help.aliyun.com/knowledge_detail/53399.html ) 进行开发调试了以 PHP 为例, 我们传入一个图片, 看看返回结果:
- <?php
- class FaceApi
- {
- const HTTP_TIMEOUT = 5;
- /**
- * 人脸属性识别
- * https://help.aliyun.com/knowledge_detail/53520.html
- */
- public static function faceAttribute($content)
- {
- $url = 'https://dtplus-cn-shanghai.data.aliyuncs.com/face/attribute';
- $headers = array(
- 'accept' => "application/json",
- 'content-type' => "application/json",
- 'date' => gmdate("D, d M Y H:i:s \G\M\T"),
- );
- $body = array(
- 'type' => 1,
- 'content' => base64_encode($content),
- );
- $headers['authorization'] = self::calcSignature($url, $body, $headers);
- $headers = array_map(function($k, $v) {
- return $k.':'.$v;
- }, array_keys($headers), $headers);
- return self::_request($url, $body, $headers);
- }
- /**
- * 计算人脸比对 API 需要的签名
- *
- * https://help.aliyun.com/document_detail/30245.html
- */
- protected static function calcSignature($url, $body, $headers)
- {
- $urlinfo = parse_url($url);
- $path = empty($urlinfo['query']) ? $urlinfo['path'] : $urlinfo['path'].'?'.$urlinfo['query'];
- if (is_array($body)) {
- $body = json_encode($body);
- }
- $bodymd5 = empty($body) ? '' : base64_encode(md5($body,true));
- $stringToSign = "POST\n".$headers['accept']."\n"
- .$bodymd5."\n".$headers['content-type']."\n".$headers['date']."\n".$path;
- $ak = self::getAccessKey();
- $signature = base64_encode(
- hash_hmac("sha1", $stringToSign, $ak['secret'], true)
- );
- return "Dataplus ${ak['id']}:".$signature;
- }
- protected static function getAccessKey()
- {
- // 填写从 https://ak-console.aliyun.com / 获取的 AK 信息
- return array('id' => '','secret'=>'');
- }
- private static function _request($url, $data, $headers)
- {
- $options = array(
- CURLOPT_URL => $url,
- CURLOPT_POST => true,
- CURLOPT_RETURNTRANSFER => 1,
- CURLOPT_TIMEOUT => self::HTTP_TIMEOUT,
- CURLOPT_HTTPHEADER => $headers,
- CURLOPT_POSTFIELDS => json_encode($data),
- );
- $curl = curl_init();
- curl_setopt_array($curl, $options);
- $response = curl_exec($curl);
- curl_close($curl);
- if (!$response) {
- return false;
- }
- return json_decode($response, true);
- }
- }
测试一下调用:
- $content = file_get_contents('test.jpg');
- var_dump(FaceApi::faceAttribute($content));
- array(15) {
- ["face_num"]=>
- int(1)
- ["face_rect"]=>
- array(4) {
- [0]=>
- int(262)
- [1]=>
- int(25)
- [2]=>
- int(141)
- [3]=>
- int(190)
- }
- ["face_prob"]=>
- array(1) {
- [0]=>
- float(1)
- }
- ["pose"]=>
- array(3) {
- [0]=>
- float(4.1272883415222)
- [1]=>
- float(-1.8178242444992)
- [2]=>
- float(0.42051115632057)
- }
- ...
按照文档说明, face_rect 便是我们需要的结果:
位置 26225, 大小 14190, 便是人脸的位置剩下的开发就轻而易举啦
来源: https://yq.aliyun.com/articles/568363