快速使用Android静态人脸识别(附源码)

最近由于项目需要,得给Android添加人脸识别的功能,调研了一段时间,有跨平台的大名鼎鼎的OpenCV,不过在Android上太麻烦了,时间也紧张就没怎么弄,下面说下Android自带的人脸识别功能。

Android提供了两种人脸识别的功能:

1. 软件识别,支持静态和动态识别,比较消耗计算资源,处理速度慢,但是可以在绝大多数的手机上使用。

2. 硬件识别,仅支持动态识别,识别速度快,1秒可以识别10次左右,但是不是所有的Android设备都支持硬件识别。


 

今天先说下Android静态识别。

主要方法:

1
2
3
FaceDetector. Face [ ] faces  =  new FaceDetector. Face [N_MAX ] ;
FaceDetector faceDetector  =  new FaceDetector (width, height, N_MAX ) ;
detectedFaceCount  = faceDetector. findFaces ( this. faceBitmap, faces ) ;


传入bitmap返回检测人脸的数量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private  int detectFace (Bitmap bitmap )
{
Log. i (TAG,  "Begin face detect" ) ;
if  (bitmap  ==  null )
{
bitmap  = BitmapFactory. decodeResource (getResources ( ), R. drawable. test ) ;
}
this. faceBitmap  = bitmap. copy (Config. RGB_565true ) ;
int width  =  this. faceBitmap. getWidth ( ) ;
int height  =  this. faceBitmap. getHeight ( ) ;
Log. i (TAG,  "待检测图像: w = "  + width  +  ", h = "  + height ) ;
int detectedFaceCount  =  0 ;
Log. i (TAG,  "Start face detect" ) ;
FaceDetector. Face [ ] faces  =  new FaceDetector. Face [N_MAX ] ;
FaceDetector faceDetector  =  new FaceDetector (width, height, N_MAX ) ;
detectedFaceCount  = faceDetector. findFaces ( this. faceBitmap, faces ) ;
Log. i (TAG,  "检测到人脸:"  + detectedFaceCount ) ;
Log. i (TAG,  "Stop face detect" ) ;
drawFaces (faces, detectedFaceCount ) ;
Log. i (TAG,  "End face detect" ) ;
return detectedFaceCount ;
}

绘制人脸:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private  void drawFaces (FaceDetector. Face [ ] faces,  int detectedFaceCount )
{
for  ( int i  =  0 ; i  &lt ; detectedFaceCount ; i ++ )
{
Face f  = faces [i ] ;
PointF midPoint  =  new PointF ( ) ;
float dis  = f. eyesDistance ( ) ;
f. getMidPoint (midPoint ) ;
int dd  =  ( int )  (dis ) ;
Point eyeLeft  =  new  Point ( ( int )  (midPoint. x  - dis  /  2 )( int ) midPoint. y ) ;
Point eyeRight  =  new  Point ( ( int )  (midPoint. x  + dis  /  2 )( int ) midPoint. y ) ;
Rect faceRect  =  new Rect ( ( int )  (midPoint. x  - dd )( int )  (midPoint. y  - dd ),
( int )  (midPoint. x  + dd )( int )  (midPoint. y  + dd ) ) ;
Log. i (TAG,  "左眼坐标 x = "  + eyeLeft. x  +  ", y = "  + eyeLeft. y ) ;
Canvas canvas  =  new  Canvas ( this. faceBitmap ) ;
Paint p  =  new  Paint ( ) ;
p. setAntiAlias ( true ) ;
p. setStrokeWidth ( 8 ) ;
p. setStyle ( Paint. Style. STROKE ) ;
p. setColor ( Color. GREEN ) ;
canvas. drawCircle (eyeLeft. x, eyeLeft. y20, p ) ;
canvas. drawCircle (eyeRight. x, eyeRight. y20, p ) ;
canvas. drawRect (faceRect, p ) ;
}
}

源码下载: Android静态人脸识别源码

转载请注明:Shirlman » Android静态人脸识别(附源码)

博客地址:www.shirlman.com


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值