Эх сурвалжийг харах

修改bug 修改人脸识别的操作
提交内容 修改人脸识别的操作

Bitliker 7 жил өмнө
parent
commit
22f720a822

+ 0 - 1
WeiChat/build.gradle

@@ -167,7 +167,6 @@ dependencies {
     androidTestCompile deps.leakcanaryNp
     debugCompile deps.leakcanary
     releaseCompile deps.leakcanaryNp
-
     compile project(':common')
     compile project(':appmessages')
     compile project(':network')

+ 1 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/MainActivity.java

@@ -43,7 +43,6 @@ import com.baidu.android.pushservice.PushConstants;
 import com.baidu.android.pushservice.PushManager;
 import com.baidu.autoupdatesdk.BDAutoUpdateSDK;
 import com.baidu.autoupdatesdk.UICheckUpdateCallback;
-import com.baidu.idl.face.platform.ui.config.FaceConfig;
 import com.common.LogUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.ListUtils;
@@ -634,7 +633,7 @@ public class MainActivity extends BaseActivity implements ImStatusListener, NetW
         LogUtil.d("OnCreate end:" + DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS));
 
         //初始化面部识别
-        FaceConfig.initFace(ct);
+        com.baidu.aip.excep.utils.FaceConfig.initFace(ct);
 
     }
 

+ 3 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java

@@ -22,7 +22,7 @@ import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
 
-import com.baidu.idl.face.platform.ui.FaceVeriftyActivity;
+import com.baidu.aip.excep.activity.RealTimeDetectFaceActivty;
 import com.common.data.DateFormatUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
@@ -343,7 +343,7 @@ public class MessageFragment extends SupportToolBarFragment implements IMessageV
                         requestPermissions(permissions, PermissionUtil.DEFAULT_REQUEST);
                     } else {
                         if (presenter.isCanPaly()) {
-                            startActivityForResult(new Intent(ct, FaceVeriftyActivity.class), 0x223);
+                            startActivityForResult(new Intent(ct, RealTimeDetectFaceActivty.class), 0x223);
                         }
                     }
                 } else {
@@ -362,7 +362,7 @@ public class MessageFragment extends SupportToolBarFragment implements IMessageV
                 ToastUtil.showToast(ct, com.uas.appworks.R.string.not_camera_permission);
             } else {
                 if (presenter.isCanPaly()) {
-                    startActivityForResult(new Intent(ct, FaceVeriftyActivity.class), 0x223);
+                    startActivityForResult(new Intent(ct, RealTimeDetectFaceActivty.class), 0x223);
                 }
             }
         }

+ 3 - 3
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Thu Jul 05 16:23:32 CST 2018
+#Fri Jul 06 12:20:28 CST 2018
 debugName=502
-versionName=638
+versionName=639
 debugCode=502
-versionCode=179
+versionCode=180

+ 1 - 1
app_modular/appworks/build.gradle

@@ -23,5 +23,5 @@ dependencies {
     compile project(':apputils')
     compile project(path: ':imageload')
     compile 'com.android.support.constraint:constraint-layout:1.0.2'
-    compile project(':faceplatform-ui')
+    compile project(':facesdk')
 }

+ 2 - 2
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkActivity.java

@@ -21,7 +21,7 @@ import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.afollestad.materialdialogs.MaterialDialog;
-import com.baidu.idl.face.platform.ui.FaceVeriftyActivity;
+import com.baidu.aip.excep.activity.RealTimeDetectFaceActivty;
 import com.baidu.mapapi.model.LatLng;
 import com.baidu.mapapi.search.core.PoiInfo;
 import com.common.data.CalendarUtil;
@@ -277,7 +277,7 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
                     requestPermission(Manifest.permission.CAMERA, new Runnable() {
                         @Override
                         public void run() {
-                            startActivityForResult(new Intent(ct, FaceVeriftyActivity.class), 0x223);
+                            startActivityForResult(new Intent(ct, RealTimeDetectFaceActivty.class), 0x223);
                         }
                     }, new Runnable() {
                         @Override

+ 47 - 0
app_modular/appworks/src/main/res/layout/item_expense_details_table.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:whatever="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginLeft="10dp"
+    android:layout_marginRight="10dp"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <View style="@style/expense_table_v_1dp" />
+
+        <com.andreabaccega.widget.FormEditText
+            android:id="@+id/details_money_tv"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:layout_weight="4"
+            android:background="@null"
+            android:hint="备注:"
+            android:paddingLeft="10dp"
+            android:textColor="@color/text_main"
+            android:textSize="14sp"
+            whatever:customRegexp="^[0-9]+(.[0-9]{2})?$"
+            whatever:testErrorString="限制输入8位有效正实数(保留两位小数)"
+            whatever:testType="regexp" />
+
+        <View style="@style/expense_table_v_1dp" />
+
+        <ImageView
+            android:id="@+id/details_delete_im"
+            android:layout_width="0dp"
+            android:layout_height="20dp"
+            android:layout_gravity="center_vertical"
+            android:layout_weight="1"
+            android:paddingLeft="10dp"
+            android:src="@drawable/delete" />
+
+        <View style="@style/expense_table_v_1dp" />
+    </LinearLayout>
+
+    <View style="@style/expense_table_h_1dp" />
+</LinearLayout>

+ 0 - 25
app_modular/faceplatform-ui/src/main/java/com/baidu/idl/face/platform/ui/FaceVeriftyLiveActivity.java

@@ -69,31 +69,6 @@ public class FaceVeriftyLiveActivity extends FaceLivenessActivity {
 
     }
 
-    /**
-     * 验证后返回弹出窗口
-     *
-     * @param message
-     */
-    private void showErrorRegister(final boolean isPass, final String message) {
-        new VeriftyDialog.Builder(this)
-                .setCanceledOnTouchOutside(false)
-                .setContent(message)
-                .setShowCancel(false)
-                .build(new VeriftyDialog.OnDialogClickListener() {
-                    @Override
-                    public void result(boolean clickSure) {
-                        if (isPass) {
-                            setResult(clickSure ? RESULT_OK : 0);
-                            finish();
-                        } else {
-                            setResult(0);
-                            finish();
-                        }
-                    }
-                });
-
-    }
-
 
     //验证和注册错误
     private void showErrorDialog(String result) {

+ 0 - 20
app_modular/faceplatform-ui/src/main/java/com/baidu/idl/face/platform/ui/widget/FaceRoundView.java~HEAD

@@ -1,20 +0,0 @@
-package com.baidu.idl.face.platform.ui.widget;
-
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.util.AttributeSet;
-import android.view.View;
-
-public class FaceRoundView extends View {
-    public FaceRoundView(Context context) {
-        super(context);
-    }
-
-    public FaceRoundView(Context context, @Nullable AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public FaceRoundView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-}

+ 0 - 20
app_modular/faceplatform-ui/src/main/java/com/baidu/idl/face/platform/ui/widget/FaceRoundView.java~HEAD_0

@@ -1,20 +0,0 @@
-package com.baidu.idl.face.platform.ui.widget;
-
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.util.AttributeSet;
-import android.view.View;
-
-public class FaceRoundView extends View {
-    public FaceRoundView(Context context) {
-        super(context);
-    }
-
-    public FaceRoundView(Context context, @Nullable AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public FaceRoundView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-}

+ 54 - 0
app_modular/facesdk/src/main/java/com/baidu/aip/excep/model/FaceVerify.java

@@ -0,0 +1,54 @@
+package com.baidu.aip.excep.model;
+
+public class FaceVerify {
+    private final int SCORE_PASS = 80;
+
+    private String mpbBase64;
+    private String userId;
+    private String groupId;
+    private String userInfo;
+    private float score;
+
+    public String getMpbBase64() {
+        return mpbBase64;
+    }
+
+    public void setMpbBase64(String mpbBase64) {
+        this.mpbBase64 = mpbBase64;
+    }
+
+    public boolean isPass(){
+        return score>=SCORE_PASS;
+    }
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getUserInfo() {
+        return userInfo;
+    }
+
+    public void setUserInfo(String userInfo) {
+        this.userInfo = userInfo;
+    }
+
+    public float getScore() {
+        return score;
+    }
+
+    public void setScore(float score) {
+        this.score = score;
+    }
+}

+ 92 - 0
app_modular/facesdk/src/main/java/com/baidu/aip/excep/utils/Base64Util.java

@@ -0,0 +1,92 @@
+package com.baidu.aip.excep.utils;
+
+import android.annotation.SuppressLint;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+public class Base64Util {
+    public static void gcBitmap(Bitmap bitmap) {
+        if (bitmap != null && !bitmap.isRecycled()) {
+            bitmap.recycle(); // 回收图片所占的内存
+            bitmap = null;
+            System.gc(); // 提醒系统及时回收
+        }
+    }
+
+    /**
+     * 
+     * @Title: bitmapToBase64 
+     * @Description: TODO(Bitmap 转换为字符串)       
+     * @param @param bitmap
+     * @param @return    设定文件
+     * @return String    返回类型    
+     * @throws
+     */
+
+    @SuppressLint("NewApi")
+    public static String bitmapToBase64(Bitmap bitmap) {
+
+        // 要返回的字符串
+        String reslut = null;
+
+        ByteArrayOutputStream baos = null;
+
+        try {
+
+            if (bitmap != null) {
+
+                baos = new ByteArrayOutputStream();
+                /**
+                 * 压缩只对保存有效果bitmap还是原来的大小
+                 */
+                bitmap.compress(Bitmap.CompressFormat.JPEG, 30, baos);
+
+                baos.flush();
+                baos.close();
+                // 转换为字节数组
+                byte[] byteArray = baos.toByteArray();
+
+                // 转换为字符串
+                
+                reslut = android.util.Base64.encodeToString(byteArray, android.util.Base64.DEFAULT);
+            } else {
+                return null;
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+
+            try {
+                if (baos != null) {
+                    baos.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+        }
+        return reslut;
+
+    }
+
+    /**
+     * 
+     * @Title: base64ToBitmap 
+     * @Description: TODO(base64l转换为Bitmap)       
+     * @param @param base64String
+     * @param @return    设定文件
+     * @return Bitmap    返回类型    
+     * @throws
+     */
+    public static Bitmap base64ToBitmap(String base64String){
+
+        byte[] decode = android.util.Base64.decode(base64String, android.util.Base64.DEFAULT);
+
+        Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);
+
+        return bitmap;
+    }
+}

+ 109 - 0
app_modular/facesdk/src/main/java/com/baidu/aip/excep/utils/FaceConfig.java

@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2017 Baidu, Inc. All Rights Reserved.
+ */
+package com.baidu.aip.excep.utils;
+
+
+import android.content.Context;
+import android.text.TextUtils;
+
+import com.baidu.aip.FaceEnvironment;
+import com.baidu.aip.FaceSDKManager;
+import com.baidu.idl.facesdk.FaceTracker;
+import com.common.LogUtil;
+import com.common.config.BaseConfig;
+import com.common.data.JSONUtil;
+import com.me.network.app.http.HttpClient;
+import com.me.network.app.http.Method;
+import com.me.network.app.http.rx.Result2Listener;
+import com.me.network.app.http.rx.ResultSubscriber;
+
+
+public class FaceConfig {
+
+
+    // 为了apiKey,secretKey为您调用百度人脸在线接口的,如注册,识别等。
+    // 为了的安全,建议放在您的服务端,端把人脸传给服务器,在服务端端进行人脸注册、识别放在示例里面是为了您快速看到效果
+    public static String apiKey = "8B4k81ViOG3XWAoG4dDgSB2I";
+    public static String secretKey = "hryH0Lhmmt0yvGSXTveTwcMIRCA7rfIK";
+    public static String licenseID = "UUFaceID-face-android";
+    public static String licenseFileName = "idl-license.face-android";
+    public static String accessToken;
+
+    public static void initFace(Context context) {
+        FaceSDKManager.getInstance().init(context, licenseID, licenseFileName);
+        FaceTracker tracker = FaceSDKManager.getInstance().getFaceTracker(context);  //.getFaceConfig();
+        // SDK初始化已经设置完默认参数(推荐参数),您也根据实际需求进行数值调整
+
+        // 模糊度范围 (0-1) 推荐小于0.7
+        tracker.set_blur_thr(FaceEnvironment.VALUE_BLURNESS);
+        // 光照范围 (0-1) 推荐大于40
+        tracker.set_illum_thr(FaceEnvironment.VALUE_BRIGHTNESS);
+        // 裁剪人脸大小
+        tracker.set_cropFaceSize(FaceEnvironment.VALUE_CROP_FACE_SIZE);
+        // 人脸yaw,pitch,row 角度,范围(-45,45),推荐-15-15
+        tracker.set_eulur_angle_thr(FaceEnvironment.VALUE_HEAD_PITCH, FaceEnvironment.VALUE_HEAD_ROLL,
+                FaceEnvironment.VALUE_HEAD_YAW);
+
+        // 最小检测人脸(在图片人脸能够被检测到最小值)80-200, 越小越耗性能,推荐120-200
+        tracker.set_min_face_size(FaceEnvironment.VALUE_MIN_FACE_SIZE);
+        //
+        tracker.set_notFace_thr(FaceEnvironment.VALUE_NOT_FACE_THRESHOLD);
+        // 人脸遮挡范围 (0-1) 推荐小于0.5
+        tracker.set_occlu_thr(FaceEnvironment.VALUE_OCCLUSION);
+        // 是否进行质量检测
+        tracker.set_isCheckQuality(true);
+        // 是否进行活体校验
+        tracker.set_isVerifyLive(false);
+
+
+    }
+
+
+    public static void loadToken(FaceTokenListener mFaceTokenListener) {
+        if (mFaceTokenListener != null) {
+            if (!TextUtils.isEmpty(accessToken)) {
+                mFaceTokenListener.callBack(accessToken);
+            } else {
+                initToken(mFaceTokenListener);
+            }
+        }
+    }
+
+    public static void initToken(final FaceTokenListener mFaceTokenListener) {
+        HttpClient httpClient = new HttpClient.Builder("https://aip.baidubce.com/").isDebug(BaseConfig.isDebug())
+                .connectTimeout(5000)
+                .readTimeout(5000).build();
+        httpClient.Api().get(new HttpClient.Builder()
+                .add("grant_type", "client_credentials")
+                .add("client_id", apiKey)
+                .method(Method.GET)
+                .url("oauth/2.0/token")
+                .add("client_secret", secretKey).build(), new ResultSubscriber<>(new Result2Listener<Object>() {
+            @Override
+            public void onResponse(Object o) {
+                LogUtil.i("gong", "initToken onResponse=" + o.toString());
+                try {
+                    String message = o.toString();
+                    accessToken = JSONUtil.getText(message, "access_token");
+                    if (mFaceTokenListener != null) {
+                        mFaceTokenListener.callBack(accessToken);
+                    }
+                } catch (Exception e) {
+
+                }
+            }
+
+            @Override
+            public void onFailure(Object t) {
+                LogUtil.i("gong", "initToken onFailure=" + t.toString());
+            }
+        }));
+    }
+
+
+    public interface FaceTokenListener {
+        void callBack(String accessToken);
+    }
+
+}

BIN
app_modular/facesdk/src/main/res/mipmap-xxhdpi/ic_success.png


+ 2 - 0
settings.gradle

@@ -19,6 +19,7 @@ include ':apptasks'
 include ':apputils'
 include  ':appmusic'
 include  ':faceplatform-ui'
+include  ':facesdk'
 include  ':faceplatform-release'
 //第三库模块
 
@@ -53,6 +54,7 @@ project(':apptasks').projectDir = new File('app_modular/apptasks')
 project(':apputils').projectDir = new File('app_modular/apputils')
 project(':appmusic').projectDir = new File('app_modular/appmusic')
 project(':faceplatform-ui').projectDir = new File('app_modular/faceplatform-ui')
+project(':facesdk').projectDir = new File('app_modular/facesdk')
 project(':faceplatform-release').projectDir = new File('app_modular/faceplatform-release')
 //第三库模块