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

    xiaoxiao2022-07-05  168

    人脸识别可以做什么

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