安卓学习日记——人脸识别

人脸识别可以做什么

人脸检测:在图片中找到一个或多个人脸的位置,云端返回人脸坐标到客户端,来定位人脸在图片中的位置。
面部关键点检测:在检测到人脸框中,进一步定位人脸的五官和轮廓位置,目前采用关键点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());
        }
        }
    };
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值