人脸识别可以做什么
人脸检测:在图片中找到一个或多个人脸的位置,云端返回人脸坐标到客户端,来定位人脸在图片中的位置。
面部关键点检测:在检测到人脸框中,进一步定位人脸的五官和轮廓位置,目前采用关键点21点模型定位位置,关联关键你点的平均精确度高达96%。
人脸验证:用于快速判定两张照片是否为同一个人,此项技术可用于手机/电脑解锁、人员考勤、身份验证等各个领域。全球理领先的精确率在目前公开的LWF测试中,人脸验证可达到世界第一的99.15%,比肉眼更精确。
在科大讯飞平台下载对应的SDK
导入jar包
权限设置
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
MainActivity
package com.example.xfface;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Environment;
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 static final int REQUEST_CODE_CAPTURE_CAMEIA_LOGIN =0x2 ;
private ImageView imageView1;
private static final int REQUEST_CODE_CAPTURE_CAMEIA =0x1 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView1=findViewById(R.id.imageView1);
SpeechUtility.createUtility(this, SpeechConstant.APPID+"=5ce3afbf");
}
//人脸登录
public void loginClick(View v){
Intent getImageByCamera=new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(getImageByCamera,REQUEST_CODE_CAPTURE_CAMEIA_LOGIN);
}
public void regClick(View v){
Intent getImageByCamera=new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(getImageByCamera,REQUEST_CODE_CAPTURE_CAMEIA);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (resultCode== Activity.RESULT_OK && requestCode==REQUEST_CODE_CAPTURE_CAMEIA){
Bitmap bitmap= (Bitmap) data.getExtras().get("data");
imageView1.setImageBitmap(bitmap);
FaceRequest face=new FaceRequest(this);
// 设置会话场景
face.setParameter(SpeechConstant.MFV_SCENES, "ifr");
face.setParameter(SpeechConstant.WFR_SST,"enroll");
face.setParameter(SpeechConstant.AUTH_ID,"ck1241");
//把bitmap对象转换成字节数组
ByteArrayOutputStream out=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
byte[] imgData=out.toByteArray();
face.sendRequest(imgData,mRequestListener);
}
else if (resultCode== Activity.RESULT_OK && requestCode==REQUEST_CODE_CAPTURE_CAMEIA_LOGIN){
Bitmap bitmap= (Bitmap) data.getExtras().get("data");
imageView1.setImageBitmap(bitmap);
FaceRequest face=new FaceRequest(this);
// 设置会话场景
face.setParameter(SpeechConstant.MFV_SCENES, "ifr");
face.setParameter(SpeechConstant.WFR_SST,"verify");
// 设置验证模式,单一验证模式:sin
face.setParameter(SpeechConstant.MFV_VCM, "sin");
face.setParameter(SpeechConstant.AUTH_ID,"ck1241");
//把bitmap对象转换成字节数组
ByteArrayOutputStream out=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
byte[] imgData=out.toByteArray();
face.sendRequest(imgData,mRequestListener);
}
}
// private String gid;
private RequestListener mRequestListener=new RequestListener() {
@Override
public void onEvent(int i, Bundle bundle) {
}
@Override
public void onBufferReceived(byte[] bytes) {
String json=new String(bytes);
System.out.println(json);
}
@Override
public void onCompleted(SpeechError speechError) {
if (speechError==null){
Toast.makeText(MainActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
}else {
System.out.println(speechError.toString());
}
}
};
}