资讯专栏INFORMATION COLUMN

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

kuangcaibao / 2749人阅读

摘要:阿里云就提供了许多人工智能的服务,进一步降低了开发者的使用门槛。比如阿里云大学在线考试系统使用的身份证识别人脸比对技术,就来自阿里云提供人脸识别产品。

目前人工智能的发展正如火如荼,基于此的应用也是层出不穷。比如实时的现场多语种翻译机,还有各种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 GMT"),
        );
        $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
".$headers["accept"]."
"
                .$bodymd5."
".$headers["content-type"]."
".$headers["date"]."
".$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,便是人脸的位置。剩下的开发就轻而易举啦。

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

详情请阅读原文

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19701.html

相关文章

  • opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别

    摘要:实现实时人脸识别本文记录了在学习深度学习过程中,使用,开发环境为,实现局域网连接手机摄像头,对目标人员进行实时人脸识别,效果并非特别好,会继续改进这里是项目地址项目中用到的大文件地址如果各位老爷看完觉得对你有帮助的话,请给个小星星,当前时间 opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,...

    megatron 评论0 收藏0

发表评论

0条评论

kuangcaibao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<