安卓SDK——人脸识别

news/2024/11/20 9:33:59/

还是讯飞,前两篇文章

语音识别

https://blog.csdn.net/nishigesb123/article/details/90478104

语音合成

https://blog.csdn.net/nishigesb123/article/details/90478584


参考链接

官网:https://www.xfyun.cn/

人脸识别说明文档:https://doc.xfyun.cn/msc_android/%E4%BA%BA%E8%84%B8%E8%AF%84%E6%B5%8B.html

API文档:http://mscdoc.xfyun.cn/android/api/


人脸识别

概述

人脸识别(Face Recognize),是一项提取人脸特征信息进行智能分析的生物识别技术,识别率高达99.4%,比肉眼更准确。 MSC SDK 中人脸识别(IdentityVerifier)功能,主要分为下面几类型:

(1)人脸验证——1:1 相似度对比 通过提取两张人脸的特征,进行相似度对比,最终返回相应的置信度得分,系统根据特征匹配程度决定“拒绝”或者“接受”。用于判断两个输入人脸是否属于同一人。

(2)人脸检索——1:N相似度对比 在大规模人脸数据库中快速找出与待检索人脸相似度最高的一个或多个人脸。


导入集成

参考第一篇文章

https://blog.csdn.net/nishigesb123/article/details/90478104


权限及初始化

这部分也依旧(实际上权限并不是照旧,可以有选择的去掉一部分,当然不去掉也行)

    <!-- 连接网络权限,用于执行云端语音能力 --><uses-permission android:name="android.permission.INTERNET" /> <!-- 获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 --><uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 读取网络信息状态 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取当前wifi状态 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许程序改变网络连接状态 --><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 读取手机信息权限 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 读取联系人权限,上传联系人需要用到此权限 --><uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 外存储写权限,构建语法需要用到此权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 外存储读权限,构建语法需要用到此权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 配置权限,用来记录应用配置信息 --><uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 手机定位信息,用来为语义等功能提供定位,提供更精准的服务 --><!-- 定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 --><uses-permission android:name="android.permission.CAMERA" />
package com.example.a5_23face;import android.app.Application;import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechUtility;public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn// 请勿在“=”与appid之间添加任何空字符或者转义符//我这里已经换了...SpeechUtility.createUtility(this, SpeechConstant.APPID +"=5ce61df0");}
}

人脸注册

布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="注册"android:id="@+id/button_reg"android:onClick="regClick"app:layout_constraintTop_toTopOf="parent" /><ImageViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/imageView"app:layout_constraintTop_toBottomOf="@+id/button_reg"/></android.support.constraint.ConstraintLayout>

代码

package com.example.a5_23face;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;import com.iflytek.cloud.FaceRequest;
import com.iflytek.cloud.RequestListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechUtility;import java.io.ByteArrayOutputStream;public class MainActivity extends AppCompatActivity {private ImageView imageView;private static final int REQUESR_CODE_CAPTURE_CAMERA = 0x1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView = findViewById(R.id.imageView);}//人脸注册public void regClick(View view) {//捕获照片Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");startActivityForResult(getImageByCamera, REQUESR_CODE_CAPTURE_CAMERA);}@Overrideprotected void onActivityResult(int requestCode, int resultCode,Intent data) {//是否返回正确if (resultCode == Activity.RESULT_OK && requestCode == REQUESR_CODE_CAPTURE_CAMERA) {//即拍照所得的BitmapBitmap bitmap = (Bitmap) data.getExtras().get("data");imageView.setImageBitmap(bitmap);//开始请求平台识别//请求对象FaceRequest face = new FaceRequest(this);//设置参数face.setParameter(SpeechConstant.WFR_SST, "reg");//唯一IDface.setParameter(SpeechConstant.AUTH_ID, "test2019");//把bitmap转换成字节数组ByteArrayOutputStream out = new ByteArrayOutputStream();//一定要是JPEG,bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);byte[] imgData = out.toByteArray();face.sendRequest(imgData, mRequestListener);}}private RequestListener mRequestListener = new RequestListener() {@Overridepublic void onEvent(int i, Bundle bundle) {}@Overridepublic void onBufferReceived(byte[] bytes) {}@Overridepublic void onCompleted(SpeechError speechError) {//完成,存在if (speechError == null) {Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_SHORT).show();System.out.println("注册成功");}else {Toast.makeText(MainActivity.this, speechError.toString(), Toast.LENGTH_SHORT).show();}}};
}

效果

可能会遇到没反应的情况,所以专门补了一句

Toast.makeText(MainActivity.this, speechError.toString(), Toast.LENGTH_SHORT).show();

如果使用安卓9.0可能会出现错误代码

其实是老生常谈的问题了,适配一下就好

https://blog.csdn.net/nishigesb123/article/details/90481437

人脸验证

布局

在之前的基础上完成,增加一个按钮即可

代码

增加对应的点击事件、修改onActivityResult和监听器

package com.example.a5_23face;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;import com.iflytek.cloud.FaceRequest;
import com.iflytek.cloud.RequestListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechUtility;import java.io.ByteArrayOutputStream;public class MainActivity extends AppCompatActivity {private ImageView imageView;private static final int REQUESR_CODE_CAPTURE_CAMERA = 0x1;private static final int REQUESR_CODE_CAPTURE_CAMERA_LOGIN = 0x2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView = findViewById(R.id.imageView);}//人脸注册public void regClick(View view) {//捕获照片Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");startActivityForResult(getImageByCamera, REQUESR_CODE_CAPTURE_CAMERA);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {//是否返回正确if (resultCode == Activity.RESULT_OK && requestCode == REQUESR_CODE_CAPTURE_CAMERA) {//即拍照所得的BitmapBitmap bitmap = (Bitmap) data.getExtras().get("data");imageView.setImageBitmap(bitmap);//开始请求平台识别//请求对象FaceRequest face = new FaceRequest(this);//设置参数face.setParameter(SpeechConstant.WFR_SST, "reg");//唯一IDface.setParameter(SpeechConstant.AUTH_ID, "test2019");//把bitmap转换成字节数组ByteArrayOutputStream out = new ByteArrayOutputStream();//一定要是JPEG,bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);byte[] imgData = out.toByteArray();face.sendRequest(imgData, mRequestListener);} else if (resultCode == Activity.RESULT_OK && requestCode == REQUESR_CODE_CAPTURE_CAMERA_LOGIN) {Bitmap bitmap = (Bitmap) data.getExtras().get("data");imageView.setImageBitmap(bitmap);FaceRequest face = new FaceRequest(this);face.setParameter(SpeechConstant.MFV_SST, "verify");face.setParameter(SpeechConstant.AUTH_ID, "test2019");// 设置验证模式,单一验证模式:sinface.setParameter(SpeechConstant.MFV_VCM, "sin");//把bitmap转换成字节数组ByteArrayOutputStream out = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);byte[] imgData = out.toByteArray();face.sendRequest(imgData, mRequestListener);}}private RequestListener mRequestListener = new RequestListener() {@Overridepublic void onEvent(int i, Bundle bundle) {}@Overridepublic void onBufferReceived(byte[] bytes) {//获取数据String json = new String(bytes);System.out.println(json);}@Overridepublic void onCompleted(SpeechError speechError) {//完成,存在if (speechError == null) {Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_SHORT).show();System.out.println("注册成功");} else {Toast.makeText(MainActivity.this, speechError.toString(), Toast.LENGTH_SHORT).show();}}};//人脸登录public void loginClick(View view) {Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");startActivityForResult(getImageByCamera, REQUESR_CODE_CAPTURE_CAMERA_LOGIN);}}

效果

返回一个byte数据,含有一个score,后续可以根据这个来判断是否符合,送佛送到西,顺便补一个简单的参考好了

如下即可拿到分数

        @Overridepublic void onBufferReceived(byte[] bytes) {//获取数据System.out.println("test");String json = new String(bytes);try {JSONObject jsonObject = new JSONObject(json);System.out.println(jsonObject.get("score"));} catch (JSONException e) {e.printStackTrace();}System.out.println(json);}

 


http://www.ppmy.cn/news/836830.html

相关文章

Android实现人脸识别(人脸检测)初识

title: Android实现人脸识别&#xff08;人脸检测&#xff09;初识 categories: Android tags:人脸识别人脸检测相机处理 date: 2020-05-21 11:35:51 介绍 本篇文章主要介绍一下移动端Android的人脸识别大致逻辑&#xff0c;后续文章会陆续放出干货&#xff0c;首先我们要明确…

人脸识别考勤系统安卓APP(手把手教学-手动滑稽)

由于百度API开始收费&#xff0c;所以这个应用暂时无法使用了&#xff0c;代码部分仍然有参考价值&#xff0c;建议大家自行更换token去验证。个人博客的下载验证码bug&#xff0c;已经fix。可以继续下载了。 更新于2022.02.13 ————————————————————我是分…

Android 人脸识别 活体检测 人脸对比

人脸识别技术应用于支付、门禁、以及手机解锁在当下已经非常成熟&#xff0c;作为一个Android 开发者&#xff0c;掌握人脸识别技术已经是必须做的事情了&#xff0c;市面上比较流行的人脸识别API主要有阿里云&#xff08;5000条以内免费&#xff09;、腾讯云&#xff08;收费&…

Android开发实现人脸识别

之前看到有人在博客写用face做人脸识别app&#xff0c;后来我也照着教程去试了一遍&#xff0c;发现根本行不通&#xff0c;原因在于他调用的库是旧版本&#xff0c;face已经全面更新了版本.后来我照着face官网新版本的API文档打了一遍代码&#xff0c;发现识别的结果还算差强人…

Android自带的人脸识别

1. Android自带的人脸识别Android自带的人脸识别只能识别出人脸在画面中的位置&#xff0c;中点&#xff0c;眼间距&#xff0c;角度等基本特性&#xff0c;提供给拍照性质的应用使用。从基本功能中不能得出明显的特征数据 2. 底层库支持external/neven/* 3. 接口…

Android 实现人脸识别

引言 基于虹软人脸识别引擎&#xff0c;在Android平台上实现人脸识别功能&#xff0c;即使在离线的情况下依旧运行&#xff0c;不被人采集个人照片的感觉&#xff0c;还是爽爽的。经过整个测试过来&#xff0c;虹软的人脸识别还是很强大的&#xff0c;人脸检测可以控制在20ms之…

Android 人脸识别

1.人脸识别测试&#xff0c;如下&#xff1a; 2.导入新项目如下&#xff1a; 3.翻译 template:模板 tracker:跟踪器 lock:锁定 purge:清除 frame:框架我同事发给我这项目&#xff0c;叫我改目录才能查看&#xff0c;他说这项目的人脸识别可以注册人脸图和特征&#xff0c;注册…

APK的数字签名检测

检测命令&#xff1a; C:\Program Files\Java\jdk1.8.0_111\bin\jarsigner.exe -verify APK 文 件 路 径 -verbose –certs 当输出结果为“jar 已验证”时&#xff0c;表示签名正常 检测签名的 CN 及其他字段是否正确标识客户端程序的来源和发布者身份 如上图&#xff0c;说明…