Android学习——人脸识别

博客介绍了人脸识别相关内容。人脸检测可定位图片中人脸位置,面部关键点检测能进一步定位五官和轮廓,人脸验证可判定两张照片是否为同一人,应用于多领域且精确率高。还提及人脸注册,包括下载sdk、添加权限等步骤。

人脸识别

人脸识别可以做什么

  1. 人脸检测:在图片中找到一个或多个人脸的位置,云端返回人脸坐标到客户端,来定位人脸在图片中的位置。
  2. 面部关键点检测:在检测到人脸框中,进一步定位人脸的五官和轮廓位置,目前采用关键点21点模型定位位置,关联关键你点的平均精确度高达96%。
  3. 人脸验证:用于快速判定两张照片是否为同一个人,此项技术可用于手机/电脑解锁、人员考勤、身份验证等各个领域。全球理领先的精确率在目前公开的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);
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值