標籤:android style blog class c code
AndroidFace Service技術用到的底層庫:android/external/neven/,framework 層:frameworks/base/media/java/android/media/FaceDetector.java。
java層介面的限制:
1、只能接受bitmap的資料。
2、只能識別出雙眼睛距離不大於20像素的人臉。
3、只能檢測人臉的位置,不能對人臉匹配。
下面代碼的運行效果:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.andy );//設定最大的人臉數目int maxFaces = 3;//建立Face Service器FaceDetector detector = new FaceDetector(bitmap.getWidth(),bitmap.getHeight(), maxFaces);//裝在人臉的容器Face[] faces = new Face[maxFaces];//尋找臉detector.findFaces(bitmap, faces );//建立可以修改的bitmapBitmap alterBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());Canvas canvas = new Canvas(alterBitmap);Paint paint = new Paint();canvas.drawBitmap(bitmap, 0,0, paint);for(Face face:faces){if (face != null) {//人臉眼睛之間的距離float eyesDistance = face.eyesDistance();//人臉中心點的座標PointF point = new PointF();//獲得人臉的中心點face.getMidPoint(point);Paint paint_ = new Paint();paint_.setColor(Color.GREEN);paint_.setAlpha(100);paint_.setAntiAlias(true);paint_.setStyle(Paint.Style.STROKE); paint_.setStrokeWidth(3); //canvas.drawCircle(point.x, point.y,radius , paint_); canvas.drawRect( //矩形框的位置參數 (int)(point.x - eyesDistance), (int)(point.y - eyesDistance), (int)(point.x + eyesDistance), (int)(point.y + eyesDistance), paint_); ImageView iv = new ImageView(this);iv.setImageBitmap(alterBitmap);setContentView(iv);}}}
主要是通過Face Service庫,找出圖片上的人臉,然後根據雙眼之間的距離和人臉的中心點,就可以畫出人臉的所在地。