人脸识别
人脸识别可以做什么
- 人脸检测:在图片中找到一个或多个人脸的位置,云端返回人脸坐标到客户端,来定位人脸在图片中的位置。
- 面部关键点检测:在检测到人脸框中,进一步定位人脸的五官和轮廓位置,目前采用关键点21点模型定位位置,关联关键你点的平均精确度高达96%。
- 人脸验证:用于快速判定两张照片是否为同一个人,此项技术可用于手机/电脑解锁、人员考勤、身份验证等各个领域。全球理领先的精确率在目前公开的LWF测试中,人脸验证可达到世界第一的99.15%,比肉眼更精确。
人脸注册
下载sdk,并导入架包
添加权限
<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.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
package com.example.face;
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 ImageView imageView1;
private static final int REQUESR_CODE_CAPTURE_CAMERA=0x1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView1=findViewById(R.id.imageView);
SpeechUtility.createUtility(this, SpeechConstant.APPID+"=5ce4a75c");
}
//人脸注册
public void regClick(View view){
Intent getImageByCamera=new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(getImageByCamera,REQUESR_CODE_CAPTURE_CAMERA);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode== Activity.RESULT_OK&&requestCode==REQUESR_CODE_CAPTURE_CAMERA){
Bitmap bitmap= (Bitmap) data.getExtras().get("data");
imageView1.setImageBitmap(bitmap);
FaceRequest face=new FaceRequest(this);
face.setParameter(SpeechConstant.WFR_SST,"reg");
face.setParameter(SpeechConstant.AUTH_ID,"csy123");
//把bitmap转换成字节数组
ByteArrayOutputStream out=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,100,out);
byte[] imgData=out.toByteArray();
face.sendRequest(imgData,mRequestListener);
}
}
private RequestListener mRequestListener=new RequestListener() {
@Override
public void onEvent(int i, Bundle bundle) {
}
@Override
public void onBufferReceived(byte[] bytes) {
}
@Override
public void onCompleted(SpeechError speechError) {
if (speechError==null){
Toast.makeText(MainActivity.this, "注册成功", 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);
}
在onActivityResult方法出加以下代码
else if (requestCode== Activity.RESULT_OK&&requestCode==REQUESR_CODE_CAPTURE_CAMERA_LOGIN){
Bitmap bitmap= (Bitmap) data.getExtras().get("data");
imageView1.setImageBitmap(bitmap);
FaceRequest face=new FaceRequest(this);
face.setParameter(SpeechConstant.MFV_SST,"verify");
face.setParameter(SpeechConstant.AUTH_ID,"csy1234");
// 设置验证模式,单一验证模式:sin
face.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);
}
监听器函数中加
@Override
public void onBufferReceived(byte[] bytes) {
String json=new String(bytes);
Log.i("tag",json);
}