android 动态人脸识别码,Android开发中人脸识别(静态)

知道没有妹纸,你们是不会看的。先放效果图

44e249e393e1029c1117a3aef91cefa6.png

最近,项目中需要用到人脸识别,苦于无奈,各种百度,google有关Android开发中人脸识别的内容,最终发现Android官方自带的FaceDetector可以实现这个功能,就拿来试试手。这个类在android.media包下

3405bd89371ed345234a84df60755d38.png

使用

需要注意:

在识别图片中的人脸时,人脸必须是基本露出五官的正脸,侧脸很难识别出来。(但根据自己多次测试,发现貌似google的FaceDetector人脸识别算法是基于人眼的识别。如有错误,请大家指正)

1.创建一个FaceDetector

width:所需要识别图片的宽

height:所需要识别图片的高

maxFaces:所需要识别的最大脸数 FaceDetector (int width, int height, int maxFaces)复制代码

2.开始识别,并将识别的人脸数据存放到Faces[]数组中。

bitmap:所需要识别的图片

faces:存储所有识别到的脸

#注意在构建被识别图片Bitmap时,图片质量一定要设置为Bitmap.Config.RGB_565,否则无法识别。 findFaces (Bitmap bitmap,Face[] faces)复制代码

直接开始撸代码

将图片识别的功能封装到自定义ImageView中,将识别出来的人脸用方框在图上画出来。 public class FaceView extends ImageView {

public static final String TAG = "FaceView";

/**

* 识别图片的宽高

*/

private int imageWidth, imageHeight;

private FaceDetector mFaceDetector;

/**

* 一次可识别的最大数

*/

private int maxFace = 3;

private Bitmap mFaceImage;

/**

* 存储识别的脸

*/

private FaceDetector.Face[] mFaces = new FaceDetector.Face[maxFace];

/**

* 真实检测到的人脸数

*/

private int mFactFaces;

private float myEyesDistance;

public FaceView(Context context) {

super(context);

init();

}

public FaceView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

private void init() {

BitmapFactory.Options mOptions = new BitmapFactory.Options();

mOptions.inPreferredConfig = Bitmap.Config.RGB_565;//一定是 565,其他识别不了。

//拿到需要识别的图片

mFaceImage = BitmapFactory.decodeResource(getResources(), R.mipmap.image, mOptions);

imageWidth = mFaceImage.getWidth();

imageHeight = mFaceImage.getHeight();

//创建FaceDetector

mFaceDetector = new FaceDetector(imageWidth, imageHeight, maxFace);

//开始检测,并将检测到的人脸存到mFaces数组中

mFactFaces = mFaceDetector.findFaces(mFaceImage, mFaces);

Log.e(TAG, "检测到人脸数:" + mFactFaces);

}

/**

* 对每个人脸进行画框

*/

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

Paint mPaint = new Paint();

mPaint.setColor(Color.GREEN);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeWidth(2);

//对每个人脸开始画框

for (int i = 0; i < mFactFaces; i++) {

FaceDetector.Face face = mFaces[i];

PointF mPoint = new PointF();

face.getMidPoint(mPoint);

myEyesDistance = face.eyesDistance();//得到人脸中心点和眼间距离参数

canvas.drawRect(

mPoint.x - myEyesDistance,

mPoint.y - myEyesDistance,

mPoint.x + myEyesDistance,

(float) (mPoint.y + myEyesDistance * 1.5),

mPaint);

}

}

}复制代码

然后在布局文件 activity_static 中直接使用该FaceView。 <?xml version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:src="@mipmap/image">

复制代码

Activity中使用布局文件 public class StaticActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_static);

}

}复制代码

也可以直接 public class StaticActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(new FaceView(this));

}

}复制代码

就这样,完了。文章中如果有错误,望大家多多指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值