当前位置: 移动技术网 > IT编程>开发语言>Java > 人脸识别

人脸识别

2018年06月07日  | 移动技术网IT编程  | 我要评论

qq黄钻升级,dnf清理废旧钢筋任务怎么做,玉浦团电影完整

今天介绍的是通过face++联网API实现人脸识别功能、打开相机及从相册获取图片功能。

文档请到face++官网查看(https://www.faceplusplus.com.cn/)

程序的主流程:

1、创建一个人脸的集合FaceSet,用于存储人脸标识 face_token

调用face++的url:https://api-cn.faceplusplus.com/facepp/v3/faceset/create

 1 RequestParams params = new RequestParams();
 2 params.put("api_key",Constant.Key);
 3 params.put("api_secret",Constant.Secret);
 4 params.put("display_name","FaceSet");
 5 params.put("outer_id","faceSet");
 6 
 7 HttpUtil.post(Constant.createUrl,params,new AsyncHttpResponseHandler(){
 8     @Override
 9     public void onSuccess(String resultJson) {
10         super.onSuccess(resultJson);
11         Log.e("createFaceSet==Success","success");
12         Log.e("resultJson===",resultJson.toString());
13     }
14 
15     @Override
16     public void onFailure(Throwable throwable, String resultJson) {
17         super.onFailure(throwable, resultJson);
18         Log.e("createFaceSet==Error","error");
19         Log.e("resultJson===",resultJson.toString());
20         Toast.makeText(MainActivity.this,"createFaceSet=="+resultJson.toString(),Toast.LENGTH_SHORT).show();
21     }
22 });

2、传入图片进行人脸检测和人脸分析

调用face++的url:https://api-cn.faceplusplus.com/facepp/v3/detect

 1 Bitmap bitmap = BitmapFactory.decodeFile(urlImg);
 2 ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
 3 bitmap.compress(Bitmap.CompressFormat.JPEG,100,outputStream );
 4 byte[] imagebyte = outputStream.toByteArray();
 5 String image_base64 = Constant.encode(imagebyte);
 6 RequestParams params = new RequestParams();
 7 params.put("api_key", Constant.Key);
 8 params.put("api_secret",Constant.Secret);
 9 params.put("image_base64",image_base64);
10 params.put("return_attributes","gender,age");
11 
12 HttpUtil.post(Constant.detectUrl,params,new AsyncHttpResponseHandler(){
13     @Override
14     public void onSuccess(String resultJson) {
15         super.onSuccess(resultJson);
16         Log.e("detect==testSuccess","success");
17         Log.e("resultJson===",resultJson.toString());
18         result.setText(resultJson.toString());
19         if(resultJson != null){
20                 JSONObject object;
21                 try {
22                     object = new JSONObject(resultJson);
23                     JSONArray array = object.getJSONArray("faces");
24                     String face_token = null;
25                     for(int i = 0;i<array.length();i++){
26                         JSONObject oj = (JSONObject) array.get(i);
27                         face_token = (String) oj.get("face_token");
28                     }
29                     if(face_token != null){
30                         Log.e("face_token",face_token);
31                         if (state == 1){
32                             addFace(face_token);
33                         }else if(state == 2){
34                             serachFace(face_token);
35                         }else{
36                             Toast.makeText(MainActivity.this,"state=="+state,Toast.LENGTH_SHORT).show();
37                         }
38                     }else{
39                         Toast.makeText(MainActivity.this,"上传图片无法获取人脸标识",Toast.LENGTH_SHORT).show();
40                     }
41                 } catch (JSONException e) {
42                     e.printStackTrace();
43                 }
44             }
45 
46         }
47 
48         @Override
49         public void onFailure(Throwable throwable, String resultJson) {
50             super.onFailure(throwable, resultJson);
51             Log.e("detect==testError","error");
52             Log.e("resultJson===",resultJson.toString());
53             Toast.makeText(MainActivity.this,"detect=="+resultJson.toString(),Toast.LENGTH_SHORT).show();
54             result.setText(resultJson.toString());
55         }
56     });

3、为一个已创建的人脸集合FaceSet 添加人脸标识face_token

调用face++的url: https://api-cn.faceplusplus.com/facepp/v3/faceset/addface

 1 RequestParams params = new RequestParams();
 2 params.put("api_key",Constant.Key);
 3 params.put("api_secret",Constant.Secret);
 4 params.put("faceset_token",faceset_token);
 5 params.put("face_tokens",face_token);
 6 
 7 HttpUtil.post(Constant.addfaceUrl,params,new AsyncHttpResponseHandler(){
 8     @Override
 9     public void onSuccess(String resultJson) {
10         super.onSuccess(resultJson);
11         Log.e("addFace==Success","success");
12         Log.e("resultJson===",resultJson.toString());
13         JSONObject object;
14         try {
15             object = new JSONObject(resultJson);
16             int face_added = Integer.parseInt(object.getString("face_added"));
17             if(face_added > 0){
18                 Toast.makeText(MainActivity.this,"添加人脸标识成功!",Toast.LENGTH_SHORT).show();
19             }else{
20                 Toast.makeText(MainActivity.this,"添加人脸标识失败!",Toast.LENGTH_SHORT).show();
21             }
22         } catch (JSONException e) {
23             e.printStackTrace();
24         }
25     }
26 
27     @Override
28     public void onFailure(Throwable throwable, String resultJson) {
29         super.onFailure(throwable, resultJson);
30         Log.e("addFace==Error","error");
31         Log.e("resultJson===",resultJson.toString());
32         Toast.makeText(MainActivity.this,"addFace=="+resultJson.toString(),Toast.LENGTH_SHORT).show();
33     }
34 });

4、在一个已有的人脸集合FaceSet 中找出与目标人脸最相似的一张或多张人脸,返回置信度和不同误识率下的阈值

调用face++的url:https://api-cn.faceplusplus.com/facepp/v3/search

 1 RequestParams params = new RequestParams();
 2 params.put("api_key",Constant.Key);
 3 params.put("api_secret",Constant.Secret);
 4 params.put("face_token",face_token);
 5 params.put("faceset_token",faceset_token);
 6 /**
 7  * 控制返回比对置信度最高的结果的数量。合法值为一个范围 [1,5] 的整数。默认值为 1
 8  */
 9 
10 HttpUtil.post(Constant.searchUrl,params,new AsyncHttpResponseHandler(){
11     @Override
12     public void onSuccess(String resultJson) {
13         super.onSuccess(resultJson);
14         Log.e("serachFace==Success","success");
15         Log.e("resultJson===",resultJson.toString());
16         JSONObject object;
17         try {
18             object = new JSONObject(resultJson);
19             JSONArray array = object.getJSONArray("results");
20             //比对结果置信度
21             int confidence = 0;
22             for(int i = 0;i<array.length();i++){
23                 JSONObject oj = (JSONObject) array.get(i);
24                 confidence = oj.getInt("confidence");
25             }
26             if(confidence != 0){
27                 Log.e("confidence",confidence+"");
28                 if(confidence >= 80){
29                     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
30                     builder.setTitle("比对结果");
31                     builder.setMessage("通过");
32                     byte[] requestData;
33                     requestData = CommandGenerate.generateLockCmd(CommandGenerate.CMD.UNLOCK,4);
34                     sendDataToSerial(requestData);
35                     builder.show();
36                 }else{
37                     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
38                     builder.setTitle("比对结果");
39                     builder.setMessage("未通过");
40                     builder.show();
41                     //Toast.makeText(MainActivity.this,"比对结果置信度低于80=="+confidence,Toast.LENGTH_SHORT).show();
42                 }
43             }else {
44                 Toast.makeText(MainActivity.this,"FaceSet中未搜索到相吻合的信息",Toast.LENGTH_SHORT).show();
45             }
46         } catch (JSONException e) {
47             e.printStackTrace();
48         }
49     }
50     @Override
51     public void onFailure(Throwable throwable, String resultJson) {
52         super.onFailure(throwable, resultJson);
53         Log.e("serachFace==Error","error");
54         Log.e("resultJson===",resultJson.toString());
55         Toast.makeText(MainActivity.this,"serachFace=="+resultJson.toString(),Toast.LENGTH_SHORT).show();
56     }
57 });

项目源码:

希望对大家有用,如有问题请多多指教。关注我哟

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网