javascript开发中如何使用face++,得到人脸数据(如何简单获取图片url,如何获取完整的人脸信息)

news/2024/7/19 14:54:23 标签: js, javascript, face++

首先给上自己开发的网站demo: 点击打开链接


首先是思路,face++要求获取图片的URL,因此

首先将前端上传的文件直接上传到云数据库(无需通过后台),我使用的是bmob云数据库,如何使用bmob请到官网查阅文档,很简单的

使用bmob记得要初始化,我这里就不贴了,直接贴获取url的代码

javascript">function uploadBmob(){
	  $("#loading").show();
      var fileUploadControl = $("#fileElem")[0]; 
      if (fileUploadControl.files.length > 0) {
        var file = fileUploadControl.files[0];  //将文件赋值给file
        var name = "face.jpg";   //保存后的文件名,随便取
        var file = new Bmob.File2(name, file);   //将文件上传至云
        file.save().then(function(obj) {
		 var url=obj.url();   //就这么简单的就获取到了图片的URL
	     getFaceInfo(url);  
       }, function(error) {
  // the save failed.
      alert("不好意思,服务器大姨妈,图片无法取得url");
	  document.getElementById("pleasewait").innerHTML="<p class='text-danger' >    图片信息获取失败!</p>";
      });
	  }

    }

接着要通过url,就能获取人脸信息

javascript">function  getFaceInfo(urlstr){   //urlstr 为图片url
 var api = new FacePP('xxxxxxxxxxxxxxx', 'xxxxxxxxxxxxxxx');  //此处改成你face++项目的
 api.request('detection/detect', {
      url:urlstr,     
      attribute:"glass,pose,gender,age,race,smiling"   //这样才能获取glass和pose的信息
    }, function(err, result) {
     if (err) {
      // TODO handle error
	   alert("人脸云端识别出错,请重试!");
	         return;  
      }
        // TODO 2.use result
	   var json= JSON.stringify(result, null, 2);
	   getwuguan(json); //获取五官信息
	   
	   document.getElementById("pleasewait").innerHTML="<p class='text-success' >    图片上传成功!</p>";
  });
}

最后就是解析json,我也贴上吧

javascript">function getwuguan(json){
   alert(json);
   var obj = eval ("(" + json + ")");   //解析json
javascript">   //下面的代码是我自己的项目如何使用变量的,做个例子
   facenum=obj.face.length;
   if(facenum>1)     //检测到多张脸,弹出提示
   $('#lianbuqiehuan').popover('show');
   var H=document.getElementById("myCanvas").height*0.01;
   var W=document.getElementById("myCanvas").width*0.01;
   for(var i=0;i<facenum;i++){
	   faceID[i]=obj.face[i].face_id;
	   facecenterX[i]=obj.face[i].position.center.x*W;
	   facecenterY[i]=obj.face[i].position.center.y*H;
	   facewidth[i]=obj.face[i].position.width*W;
	   faceheight[i]=obj.face[i].position.height*H;
       lefteyeX[i]=obj.face[i].position.eye_left.x*W;
	   lefteyeY[i]=obj.face[i].position.eye_left.y*H;
	   righteyeX[i]=obj.face[i].position.eye_right.x*W;
	   righteyeY[i]=obj.face[i].position.eye_right.y*H;
	   noseX[i]=obj.face[i].position.nose.x*W;
	   noseY[i]=obj.face[i].position.nose.y*H;
	   leftmouthX[i]=obj.face[i].position.mouth_left.x*W;
       leftmouthY[i]=obj.face[i].position.mouth_left.y*H;
       rightmouthX[i]=obj.face[i].position.mouth_right.x*W;
	   rightmouthY[i]=obj.face[i].position.mouth_right.y*H;
	   age_value[i]=obj.face[i].attribute.age.value;
	   age_range[i]=obj.face[i].attribute.age.range;
	   gender_value[i]=obj.face[i].attribute.gender.value;
	   gender_confidence[i]=obj.face[i].attribute.gender.confidence;
	  /* glass_value[i]=obj.face[i].attribute.glass.value;
	   glass_confidence[i]=obj.face[i].attribute.glass.confidence;*/
	   race_value[i]=obj.face[i].attribute.race.value;
	   race_confidence[i]=obj.face[i].attribute.race.confidence;
       smiling_value[i]=obj.face[i].attribute.smiling.value;
    //   pitch_angle[i]=obj.face[i].attribute.pose.pitch_angle;

	   facecenterY[i]+=faceheight[i]*0.05;
   }
  // obj.face[0].position.eye_left.x
}

有疑问请留言,不定期上博客回复


http://www.niftyadmin.cn/n/1548814.html

相关文章

线段树模板合集--单点替换,区间替换,区间增加3种情况

1.单点覆盖&#xff0c;区间查询 #include <cstdio> #include <algorithm> #include <iostream> using namespace std; #define lson l , m , rt << 1 #define rson m 1 , r , rt << 1 | 1 const int maxn 100007; const int INF0x7fffffff; i…

html5常用的小控件,收藏了

完善&#xff1a;HTML5表单新特征简介与举例 这篇文章发布于 2011年01月6日&#xff0c;星期四&#xff0c;00:29&#xff0c;归类于 css相关。 阅读 44141 次, 今日 19 次by zhangxinxu from http://www.zhangxinxu.com 本文地址&#xff1a; http://www.zhangxinxu.com/wordp…

如何使用js将canvas保存为图片文件,并且可以自定义文件名

1、从canvas中直接提取图片元数据 // 图片导出为 png 格式var type png;var imgData canvas.toDataURL(type);上面的代码得到的数据格式为&#xff1a;data:image/png;base64,..... 2、将mime-type改为image/octet-stream&#xff0c;强制让浏览器直接download /*** 获取mime…

topo排序(邻接表) 判断topo序列是否存在,是否唯一,以及输出序列

const int maxn1e37; struct Topo {int indeg[maxn],n;vector<int> G[maxn],path;void init(int n) {this->nn;for(int i0; i<n; i)G[i].clear();memset(indeg,0,sizeof(indeg));path.clear();}void addEdge(int u,int v) { //添加有向边G[u].push_back(v);indeg…

高斯消元(求解double,int型方程组)

#include<iostream> #include<algorithm> #include<vector> #include<map> #include<cstdio> #include<cmath> using namespace std; const int maxn507; const double eps1e-7; double A[2*maxn][maxn]; //增广矩阵 double x[maxn]; //…

求一个数最少能表示成几个数的平方和(比如5=1+4,返回2)

bool is_sqrt(long long n) {int m sqrt(n);if (m*m n)return true;elsereturn false; } int solve(long long n) {if (is_sqrt(n))return 1;while (n % 4 0)n / 4;if (n % 8 7)return 4;for (int i 0; i*i < n; i) {if (is_sqrt(n - i*i))return 2;}return 3; }

Mysql #1366 无法插入中文解决办法(ubuntu,mysql5.7) php中文变量值为???的解决

数据表插入不了中文&#xff0c;折腾了1个小时&#xff0c;终于找到错误所在。 首先设置数据库的默认字符集 &#xff1a; 打开终端&#xff0c;输入 mysql -uroot -p &#xff0c;输入密码&#xff0c;进入mysql命令行 输入 status; 查看当前字符集状态,我的终端上显示如…

Linux下切换python2和python3为默认执行版本的方式(也能作用于sublime等编辑器的默认执行方式)

使用 alternate 机制可以自由切换python默认版本&#xff0c;只需要在终端输入简单的几个指令&#xff1a; sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 15…