十分钟搭建人脸识别小游戏

目前人工智能的发展正如火如荼,基于此的应用也是层出不穷。比如实时的现场多语种翻译机,还有各种App里出现的实名认证活体检测技术。以至于小学生都已经在用Python开发人工智能程序了!

看到这么多应用,虽然小学生都在开发人工智能程序了,但是对于初次接触的人来说,搭建环境、构建模型、编写程序、调试应用,花费的时间也不少。其门槛能不能进一步降低,从而让我们快速上手呢?

答案当然是可以的。毕竟一切都可以服务化。阿里云就提供了许多人工智能的服务,进一步降低了开发者的使用门槛。比如阿里云大学在线考试系统使用的身份证识别、人脸比对技术,就来自阿里云提供人脸识别产品(https://data.aliyun.com/produ... )。

我们以一个宠物匹配小游戏为例,来介绍下如何快速上手。

思路是我们先找到一些动物的照片,看看他们的脸型比例。通过与人脸的比例进行匹配,我们大概就能判断出每个人与其相似的宠物了。所以人脸接测定位的服务(https://help.aliyun.com/knowl... ),就能满足我们的需求了。实际上这些服务也接入了云市场(https://market.aliyun.com/pro... ),区别在于前者API校验是其自己的规范,后者走的是APPCODE简单身份认证或者云市场API网关统一的签名认证。其他方面并没有太大差别。

我们以前者为例,先开通产品,然后就可以按照文档(https://help.aliyun.com/knowl... )进行开发调试了。以PHP为例,我们传入一个图片,看看返回结果:

 "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);
    }
}

测试一下调用:

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便是我们需要的结果:

位置262、25,大小141、90,便是人脸的位置。剩下的开发就轻而易举啦。

最近我们利用人脸识别技术开发了一款测试宠物缘的游戏,有兴趣的小伙伴可以尝试一下,扫下图海报的二维码吧!

详情请阅读原文

你可能感兴趣的:(人脸识别,url,人工智能)