300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android基于虹软SDK实现离线人脸识别

Android基于虹软SDK实现离线人脸识别

时间:2022-07-02 22:55:08

相关推荐

Android基于虹软SDK实现离线人脸识别

一、需求

Android端实现离线人脸识别功能,即对比两张人脸是否是同一个人。

二、解决方案

选用虹软人脸识别SDK来实现人脸特征数据比对。

三、步骤

1. 打开虹软开发者中心开发者中心

2. 新建应用

3. 获取APP_ID,SDK_KEY,ACTIVE_KEY

4. 编写代码

4.1 填写SDK激活需要的APP_ID,SDK_KEY,ACTIVE_KEY

public static final String APP_ID = "官网获取的APP_ID";public static final String SDK_KEY = "官网获取的SDK_KEY ";public static final String ACTIVE_KEY = "官网获取的ACTIVE_KEY,如果是试用,就填写试用码";

4.2 布局文件的编写,这里对比两张人脸来判断是否是同一个人。用两个ImageView显示人脸照片吧。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:orientation="horizontal"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/iv_register_image"android:layout_width="200dp"android:layout_height="200dp"android:layout_weight="1"android:maxHeight="200dp"android:minHeight="100dp" /><ImageViewandroid:id="@+id/iv_recognize_image"android:layout_width="200dp"android:layout_height="200dp"android:layout_weight="1"android:maxHeight="200dp"android:minHeight="100dp" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:orientation="horizontal"><Buttonandroid:layout_width="150dp"android:layout_height="50dp"android:layout_weight="1"android:layout_marginLeft="30dp"android:layout_marginRight="10dp"android:background="@drawable/angle_button"android:onClick="addRegisterImage"android:text="添加注册照"android:textColor="@android:color/white"android:textSize="20sp" /><Buttonandroid:layout_width="150dp"android:layout_height="50dp"android:layout_weight="1"android:layout_marginLeft="10dp"android:layout_marginRight="30dp"android:background="@drawable/angle_button"android:onClick="addRecognizeImage"android:text="添加识别照"android:textColor="@android:color/white"android:textSize="20sp" /></LinearLayout><TextViewandroid:id="@+id/tv_similar"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:text="相似度:--"android:textColor="@android:color/black"android:textSize="26sp" /><Buttonandroid:layout_width="match_parent"android:layout_height="50dp"android:layout_marginTop="200dp"android:layout_marginLeft="80dp"android:layout_marginRight="80dp"android:background="@drawable/angle_button"android:onClick="faceCompare"android:text="人脸比对"android:textColor="@android:color/white"android:textSize="20sp" /></LinearLayout>

4.3 代码编写

4.3.1 激活人脸识别引擎,第一次使用需要联网激活SDK,激活成功后无需联网。

if (!isActivated(this)) {runOnSubThread(() -> FaceEngine.activeOnline(this,Constants.ACTIVE_KEY,Constants.APP_ID,Constants.SDK_KEY));}

4.3.2 初始化人脸识别SDK

// 初始化人脸识别SDKprivate void initEngine() {faceEngine = new FaceEngine();faceEngineCode = faceEngine.init(this, DetectMode.ASF_DETECT_MODE_IMAGE, DetectFaceOrientPriority.ASF_OP_ALL_OUT,6, INIT_MASK);if (faceEngineCode != ErrorInfo.MOK) {showToast(getString(R.string.init_failed, faceEngineCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(faceEngineCode)));}}

4.3.3 人脸检测

// 人脸检测private List<FaceInfo> detectFace(byte[] bgr24, int width, int height){// 人脸信息集合(人脸框、人脸角度)List<FaceInfo> faceInfoList = new ArrayList<>();// 人脸检测int detectCode = faceEngine.detectFaces(bgr24, width, height, FaceEngine.CP_PAF_BGR24, faceInfoList);if (detectCode != 0 || faceInfoList.isEmpty()) {showToast("face detection finished, code is " + detectCode + ", face num is " + faceInfoList.size());return null;}return faceInfoList;}

4.3.4 人脸特征提取

// 提取人脸特征数据private FaceFeature extractFaceFeatureData(byte[] bgr24, int width, int height, List<FaceInfo> faceInfoList){// 口罩信息结果List<MaskInfo> maskInfoList = new ArrayList<>();faceEngine.getMask(maskInfoList);int isMask = MaskInfo.UNKNOWN;if (!maskInfoList.isEmpty()) {isMask = maskInfoList.get(0).getMask();}// 人脸特征FaceFeature faceFeature = new FaceFeature();faceEngine.extractFaceFeature(bgr24, width, height,FaceEngine.CP_PAF_BGR24,faceInfoList.get(0),ExtractType.RECOGNIZE, isMask, faceFeature);return faceFeature;}

4.3.5 人脸特征比对

// 比较两个人脸的相似度private float faceCompare(FaceFeature previewFaceFeature, FaceFeature idCardFaceFeature){FaceSimilar faceSimilar = new FaceSimilar();int compareCode = pareFaceFeature(previewFaceFeature, idCardFaceFeature, CompareModel.ID_CARD, faceSimilar);if (compareCode == ErrorInfo.MOK){// 两个人脸的相似度float score = faceSimilar.getScore();return score;} else {Log.i(TAG, "compare failed, code is : " + compareCode);return 0;}}

4.3.6 实际效果

四、源码

需要完整源码的伙伴可以到这里下载

Android基于虹软SDK实现离线人脸识别/article/235.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。