zoukankan      html  css  js  c++  java
  • PC端操作阿里云人脸识别(vue+php)

    html参考:

    1.需要引入 tracking.js 第三方库

    2.检测到人脸自动 stop

    3.canvas 压缩图片体积   正在上传中...........  

    <video id="video" preload autoplay loop muted></video>
    <canvas id="canvas" width="500" height="500"  style="position:absolute;top:0;left:0;"></canvas>
    export default {
        name: 'componentName',
        data() {
            return {
                videoEle: null,
                trackerTask:null,
                first:null
            } 
        },
        created(){
            this.openCamera();
        },
        mounted(){
        },
        methods: {
            openCamera () {
     
              var video = document.getElementById('video');
              var canvas = document.getElementById('canvas');
              var context = canvas.getContext('2d');
     
              var tracker = new tracking.ObjectTracker('face');  // 引入第三方 库
              tracker.setInitialScale(1);          
              tracker.setStepSize(2);
              tracker.setEdgesDensity(0.1);
     
              this.trackerTask = tracking.track('#video', tracker, { camera: true });
              //-------  指定 canvas 的宽高 ,auto 自动播放
              let constraints = {
                    video: { 500, height: 500},
                    audio: true
                };
     
              let promise = navigator.mediaDevices.getUserMedia(constraints);   // h5 新的API
                 
                promise.then(function (MediaStream) {
                    video.srcObject = MediaStream;
                    video.play();
                }).catch(function (PermissionDeniedError) {
                    console.log(PermissionDeniedError);
                })
                //--------------
                let that = this;
                that.tracker_fun(tracker,video,context,canvas); //open 摄像头,执行tracker_fun( 传入参数 )
     
          },
          tracker_fun(tracker,video,context,canvas){
            let that = this;
            let set_clear;
            set_clear = setTimeout(function(){ // 每秒 检测人脸 结果
                  tracker.on('track', function(event) {     // 视频流
                    // context.clearRect(0, 0, canvas.width, canvas.height);
                  if(!that.first){     // if  --- > else  检测到人脸 success() =>{}
                  event.data.forEach(function(rect) {
                    if(rect.x){
                      that.first = rect.x;
                      video.pause();    // success  将暂停 video
                      console.log(rect)
                      console.log(video)
                      context.drawImage(video, 0, 0, 500, 500);   // 绘制到 canvas
                      context.font = '11px Helvetica';
                      context.fillText("",100,40);
                      context.strokeStyle = '#a64ceb';
                      context.strokeRect(rect.x, rect.y, rect.width, rect.height);
                      var data_url = canvas.toDataURL('image/png'); //base64 request
                      console.log(data_url)
     
                      // video.load();
                      // that.first = null;
                      // that.tracker_fun(tracker,video,context,canvas)
                      return;
                    }
                  });
                  }
                });
                  clearTimeout(set_clear)
                  console.log('-------')
            },5000)
             
          }
        },
        mounted() {
     
        },
        destroyed() {
            // 停止侦测
            this.trackerTask.stop()
            // 关闭摄像头
            window.tracking.closeCamera()
        }   
    }

    PHP操作阿里云介绍

    1、composer.json环境依赖

    {
        "require": {
          "guzzlehttp/guzzle": "~6.0"
       }
    }

    2、使用网络图片

    <?php
    
    use GuzzleHttp\Psr7\Request;
    use GuzzleHttp\Client;
    require_once 'vendor\autoload.php';
    
    // 参数设置
    $akId = "********";
    $akSecret = "********";
    $body1 = '{"type":"0","image_url":"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1553926699&di=3e4484731c8897c57e67b3f632801f9a&src=http://b-ssl.duitang.com/uploads/item/201603/28/20160328121906_ErzAB.jpeg"}';
    $url = "https://dtplus-cn-shanghai.data.aliyuncs.com/face/attribute";
    
    $date1 = gmdate("D, d M Y H:i:s \G\M\T");
    // 参数构造
    $options = array(
        'http' => array(
            'header' => array(
                'accept'=> "application/json",
                'content-type'=> "application/json",
                'date'=> $date1,
                'authorization' => ''
            ),
            'method' => "POST", //可以是 GET, POST, DELETE, PUT
            'content' => $body1
    //         'content' => json_encode($body1)
        )
    );
    
    $http = $options['http'];
    $header = $http['header'];
    $urlObj = parse_url($url);
    if(empty($urlObj["query"]))
        $path = $urlObj["path"];
        else
            $path = $urlObj["path"]."?".$urlObj["query"];
            $body = $http['content'];
            if(empty($body))
                $bodymd5 = $body;
                else
                    $bodymd5 = base64_encode(md5($body,true));
                    $stringToSign = $http['method']."\n".$header['accept']."\n".$bodymd5."\n".$header['content-type']."\n".$header['date']."\n".$path;
                    $signature = base64_encode(
                        hash_hmac(
                            "sha1",
                            $stringToSign,
                            $akSecret, true));
    
    $authHeader = "Dataplus "."$akId".":"."$signature";
    $options['http']['header']['authorization'] = $authHeader;
     
    #  构造Rest API Client请求
    $client = new Client();
    $headers = ['Content-type' => 'application/json', 'Accept' => 'application/json', 'Authorization' => $options['http']['header']['authorization'], 'Date' => $date1];
    
    $request = new Request('POST','https://dtplus-cn-shanghai.data.aliyuncs.com/face/attribute',$headers,$body1);
    
    $response = $client->send($request);
    echo $response->getBody();
    
    ?>

    3、使用本地图片

    <?php
    
    use GuzzleHttp\Psr7\Request;
    use GuzzleHttp\Client;
    require_once 'vendor\autoload.php';
    
    // 参数设置
    $akId = "********";
    $akSecret = "********";
    
    # 读取本地图片
    $image_file = 'C:\Users\Administrator\Desktop\time.jpeg';
    $image_info = getimagesize($image_file);
    $base64_image_content = "data:{$image_info['mime']};base64," . chunk_split(base64_encode(file_get_contents($image_file)));
    
    function trimall($str)//删除所有的空格
    {
        $qian=array(" "," ","\t","\n","\r");
        $hou=array("","","","","");
        return str_replace($qian,$hou,$str);
    }
    
    $base64_image_content = substr($base64_image_content, 23);
    
    $base64_image_content = trimall($base64_image_content);
    
    // echo $base64_image_content;
    
    $body1 = '{"type":"1","content":"'.$base64_image_content.'"}';
    
    $url = "https://dtplus-cn-shanghai.data.aliyuncs.com/face/attribute";
    
    $date1 = gmdate("D, d M Y H:i:s \G\M\T");
    // 参数构造
    $options = array(
        'http' => array(
            'header' => array(
                'accept'=> "application/json",
                'content-type'=> "application/json",
                'date'=> $date1,
                'authorization' => ''
            ),
            'method' => "POST", //可以是 GET, POST, DELETE, PUT
            'content' => $body1
        )
    );
    
    $http = $options['http'];
    $header = $http['header'];
    $urlObj = parse_url($url);
    if(empty($urlObj["query"]))
        $path = $urlObj["path"];
        else
            $path = $urlObj["path"]."?".$urlObj["query"];
            $body = $http['content'];
            if(empty($body))
                $bodymd5 = $body;
                else
                    $bodymd5 = base64_encode(md5($body,true));
                    $stringToSign = $http['method']."\n".$header['accept']."\n".$bodymd5."\n".$header['content-type']."\n".$header['date']."\n".$path;
                    $signature = base64_encode(
                        hash_hmac(
                            "sha1",
                            $stringToSign,
                            $akSecret, true));
    
    $authHeader = "Dataplus "."$akId".":"."$signature";
    $options['http']['header']['authorization'] = $authHeader;
    
    #  构造Rest API Client请求
    $client = new Client();
    $headers = ['Content-type' => 'application/json', 'Accept' => 'application/json', 'Authorization' => $options['http']['header']['authorization'], 'Date' => $date1];
    $request = new Request('POST','https://dtplus-cn-shanghai.data.aliyuncs.com/face/attribute',$headers,$body);
    
    $response = $client->send($request);
    echo $response->getBody();
    ?>

    SSL错误处理

    问题描述

    在使用 PHP 的 http 客户端工具(如 Guzzle)调用认知服务时出现证书认证问题,错误信息如下:

    Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException' with message 'cURL error 60: SSL certificate problem: unable to get local issuer certificate
    

    解决方法

    该问题的出现是由于没有配置信任的服务器 HTTPS 验证。默认 cURL 是被设为不信任任何 CAs 的,因此这就是无法访问相关服务器的原因。解决该问题的最好方法是指定一组默认受信任的 CAs。

    • CA 证书

      数字证书认证机构(Certificate Authority, 缩写为 CA),是负责发放和管理数字证书的权威机构,它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。证书通常包括所有者的公钥、 证书的到期时间、所有者的名称和其他关于所有者的信息。

    所以可以通过下载证书的方式解决该问题,具体操作方法如下:

    1. 下载证书保存到本地,下载地址:https://curl.haxx.se/ca/cacert.pem
    2. 配置 php.ini 文件:curl.cainfo =<filepath>/cacert.pem
    3. 重启 Apache 服务器,问题即可解决。
    通往牛逼的路上,在意的只有远方!
  • 相关阅读:
    linux初识1
    linux初识
    练习题
    linux 创建虚拟机常见错误
    DevGridControl中GridView排序问题
    小工具:火车票查询
    小工具:邮件发送
    小工具:截图&简单图像处理
    Winform 控件的入门级使用(一)
    Winform & Devexpress Chart使用入门
  • 原文地址:https://www.cnblogs.com/ccdr/p/15791792.html
Copyright © 2011-2022 走看看