导包
compile 'com.deep:face_deep:1.1'
权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
mainactivity.java
package com.chenwei.takephoto;
import android.content.Intent;
import android.database.Cursor;
import android.media.FaceDetector.Face;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import java.io.File;
import deep.com.face_deep.AndroidDetectUtils;
import deep.com.face_deep.CheckCallback;
public class MainActivity extends AppCompatActivity {
private TextView res;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String s = (String) msg.obj;
//Toast.makeText(this,"chenwi", Toast.LENGTH_SHORT).show();
res.setText(s);
}
};
private final int OPEN_ALBUM_CODE = 233;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
res=(TextView)findViewById(R.id.res);
// open camera
findViewById(R.id.button4).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,AndroidFaceActivity.class);
MainActivity.this.startActivity(intent);
}
});
// open album
findViewById(R.id.button5).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// 设定结果返回
startActivityForResult(i, OPEN_ALBUM_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == OPEN_ALBUM_CODE) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
// 获取选择照片的数据视图
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
// 从数据视图中获取已选择图片的路径
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
final String picturePath = cursor.getString(columnIndex);
cursor.close();
new Thread(new Runnable() {
@Override
public void run() {
AndroidDetectUtils.getInstance().check(new File(picturePath), new CheckCallback() {
@Override
public void onSuccess(int count, Face[] faces) {
Log.e("xxxxxx","success "+" count="+count+faces[0].eyesDistance());
// Toast.makeText(getApplication(),faces[0].eyesDistance()+"",Toast.LENGTH_SHORT).show();
for (int i = 0; i <count ; i++) {
String s="res"+faces[i].eyesDistance()+" ";
// Toast.makeText(this,"chenwie",Toast.LENGTH_SHORT).show();
Message msg = Message.obtain();
msg.what=0;
msg.obj=s;
handler.sendMessage(msg);
}
}
@Override
public void onFail() {
Log.e("xxxxxx","fail ");
}
});
}
}).start();
}
}
}
AndroidFaceActivity.java
package com.chenwei.takephoto;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.media.FaceDetector.Face;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
import deep.com.face_deep.AndroidDetectUtils;
import deep.com.face_deep.CameraSurfacePreview;
import deep.com.face_deep.CheckCallback;
import deep.com.face_deep.Constants;
/**
* Created by wangfei on 2018/3/8.
*/
public class AndroidFaceActivity extends Activity{
Button takeBtn;
private CameraSurfacePreview mCameraSurPreview = null;
private Camera mCamera;
TextView res;
private boolean isTaken = false;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String s = (String) msg.obj;
//Toast.makeText(this,"chenwi", Toast.LENGTH_SHORT).show();
res.setText(s);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_androidface);
initUI();
}
public void initUI() {
res= (TextView) findViewById(R.id.result);
FrameLayout preview = (FrameLayout)findViewById(R.id.camera_preview);
mCamera = Camera.open(1);
mCamera.setDisplayOrientation(90);
AndroidDetectUtils.getInstance().setCameraParam(mCamera);
mCameraSurPreview = new CameraSurfacePreview(this,mCamera);
preview.addView(mCameraSurPreview);
takeBtn = (Button)findViewById(R.id.button_capture);
takeBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (!isTaken){
takePhoto();
}else {
if (mCamera!=null){
mCamera.startPreview();
}
takeBtn.setText("take_photo");
isTaken = false;
}
}
});
}
private void takePhoto(){
mCameraSurPreview.takePicture(new PictureCallback() {
@Override
public void onPictureTaken(final byte[] bytes, final Camera camera) {
isTaken = true;
takeBtn.setText("again_take_photo");
new Thread(new Runnable() {
@Override
public void run() {
AndroidDetectUtils.getInstance().check(bytes, new CheckCallback() {
@Override
public void onSuccess(int count, Face[] faces) {
Log.e("xxxxxx","success "+" count="+count);
for (int i = 0; i <count ; i++) {
String s="res"+faces[i].eyesDistance()+" ";
// Toast.makeText(this,"chenwie",Toast.LENGTH_SHORT).show();
Message msg = Message.obtain();
msg.what=0;
msg.obj=s;
handler.sendMessage(msg);
}
}
@Override
public void onFail() {
Log.e("xxxxxx","fail ");
}
});
}
}).start();
Log.e(Constants.TAG, "Picture is taken and saved.");
}
});
}
}