【问题标题】:Face Recognition in android安卓中的人脸识别
【发布时间】:2012-11-07 00:52:40
【问题描述】:

我需要在 Android 4.0 的应用中实现人脸识别登录。由于 Android Ice-Cream Sandwich 提供人脸识别解锁功能,是否有任何开放的 SDK 或内置库来实现此功能。到目前为止,我遇到过外部 API,例如 http://www.kooaba.com/http://developers.face.com/docs/ 。我知道如何检测人脸,但是是否有内置的人脸识别登录支持,或者我必须使用外部 API? 任何帮助将不胜感激。

【问题讨论】:

    标签: android face-recognition


    【解决方案1】:

    据我所知,Android 4.0 中并没有真正支持人脸识别(只有你知道的人脸检测)。人脸解锁是一个独立的解决方案,不会暴露任何东西。

    【讨论】:

      【解决方案2】:

      res/values/strings.xml:

      <resources>
      
          <string name="app_name">FaceDetectionExample</string>
          <string name="hello_world">Hello world!</string>
          <string name="menu_settings">Settings</string>
          <string name="title_activity_face_detection_example">FaceDetectionExample</string>
          <string name="app_info">Click on the \'Take Picture\' to take a picture using Camera and detect the face(s) in the picture taken.</string>
          <string name="take_picture">Take Picture</string>
          <string name="detect_face">Detect Face</string>
      </resources>
      

      res/layout/detectlayout.xml:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
      
              <ImageView
                      android:layout_width="fill_parent"
                      android:layout_height="fill_parent"
                      android:id="@+id/image_view"
                      android:layout_weight="1.0"/>
      
              <Button
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:id="@+id/detect_face"
                      android:text="@string/detect_face"
                      android:layout_gravity="center_horizontal"/>
      
      </LinearLayout>
      

      main.xml:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:padding="10dip">
      
              <TextView 
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="@string/app_info"
              android:gravity="center_horizontal"
              android:layout_weight="1.0"/>
      
          <Button
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:id="@+id/take_picture"
              android:layout_margin="5dip"
              android:text="@string/take_picture"
              android:layout_gravity="center_horizontal"/>
      </LinearLayout>
      

      AndroidManifest.xml:

      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.facedetectionexample"
          android:versionCode="1"
          android:versionName="1.0" >
      
          <uses-sdk
              android:minSdkVersion="8"
              android:targetSdkVersion="15" />
          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
          <application
              android:icon="@drawable/ic_launcher"
              android:label="@string/app_name"
              android:theme="@style/AppTheme" >
              <activity
                  android:name=".FaceDetectionExample"
                  android:label="@string/title_activity_face_detection_example" >
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
      
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
              </activity>
          </application>
      
      </manifest>
      

      FaceDetectionExample.java

      package com.example.facedetectionexample;
      
      import java.io.FileNotFoundException;
      import java.io.FileOutputStream;
      import java.io.IOException;
      
      import android.app.Activity;
      import android.content.Intent;
      import android.graphics.Bitmap;
      import android.graphics.Bitmap.CompressFormat;
      import android.graphics.Bitmap.Config;
      import android.graphics.Canvas;
      import android.graphics.Color;
      import android.graphics.Paint;
      import android.graphics.PointF;
      import android.media.FaceDetector;
      import android.media.FaceDetector.Face;
      import android.os.Bundle;
      import android.os.Environment;
      import android.util.Log;
      import android.view.View;
      import android.widget.Button;
      import android.widget.ImageView;
      
      public class FaceDetectionExample extends Activity {
          private static final int TAKE_PICTURE_CODE = 100;
          private static final int MAX_FACES = 5;
      
          private Bitmap cameraBitmap = null;
      
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
      
          ((Button)findViewById(R.id.take_picture)).setOnClickListener(btnClick);
      }
      
      @Override
          protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                  super.onActivityResult(requestCode, resultCode, data);
      
                  if(TAKE_PICTURE_CODE == requestCode){
                          processCameraImage(data);
                  }
          }
      
      private void openCamera(){
          Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
      
          startActivityForResult(intent, TAKE_PICTURE_CODE);
      }
      
      private void processCameraImage(Intent intent){
          setContentView(R.layout.detectlayout);
      
          ((Button)findViewById(R.id.detect_face)).setOnClickListener(btnClick);
      
          ImageView imageView = (ImageView)findViewById(R.id.image_view);
      
          cameraBitmap = (Bitmap)intent.getExtras().get("data");
      
          imageView.setImageBitmap(cameraBitmap);
      }
      
      private void detectFaces(){
          if(null != cameraBitmap){
                  int width = cameraBitmap.getWidth();
                  int height = cameraBitmap.getHeight();
      
                  FaceDetector detector = new FaceDetector(width, height,FaceDetectionExample.MAX_FACES);
                  Face[] faces = new Face[FaceDetectionExample.MAX_FACES];
      
                  Bitmap bitmap565 = Bitmap.createBitmap(width, height, Config.RGB_565);
                  Paint ditherPaint = new Paint();
                  Paint drawPaint = new Paint();
      
                  ditherPaint.setDither(true);
                  drawPaint.setColor(Color.RED);
                  drawPaint.setStyle(Paint.Style.STROKE);
                  drawPaint.setStrokeWidth(2);
      
                  Canvas canvas = new Canvas();
                  canvas.setBitmap(bitmap565);
                  canvas.drawBitmap(cameraBitmap, 0, 0, ditherPaint);
      
                  int facesFound = detector.findFaces(bitmap565, faces);
                  PointF midPoint = new PointF();
                  float eyeDistance = 0.0f;
                  float confidence = 0.0f;
      
                  Log.i("FaceDetector", "Number of faces found: " + facesFound);
      
                  if(facesFound > 0)
                  {
                          for(int index=0; index<facesFound; ++index){
                                  faces[index].getMidPoint(midPoint);
                                  eyeDistance = faces[index].eyesDistance();
                                  confidence = faces[index].confidence();
      
                                  Log.i("FaceDetector",
                                                  "Confidence: " + confidence +
                                                  ", Eye distance: " + eyeDistance +
                                                  ", Mid Point: (" + midPoint.x + ", " + midPoint.y + ")");
      
                                  canvas.drawRect((int)midPoint.x - eyeDistance ,
                                                                  (int)midPoint.y - eyeDistance ,
                                                                  (int)midPoint.x + eyeDistance,
                                                                  (int)midPoint.y + eyeDistance, drawPaint);
                          }
                  }
      
                  String filepath = Environment.getExternalStorageDirectory() + "/facedetect" + System.currentTimeMillis() + ".jpg";
      
                          try {
                                  FileOutputStream fos = new FileOutputStream(filepath);
      
                                  bitmap565.compress(CompressFormat.JPEG, 90, fos);
      
                                  fos.flush();
                                  fos.close();
                          } catch (FileNotFoundException e) {
                                  e.printStackTrace();
                          } catch (IOException e) {
                                  e.printStackTrace();
                          }
      
                          ImageView imageView = (ImageView)findViewById(R.id.image_view);
      
                          imageView.setImageBitmap(bitmap565);
          }
      }
      
          private View.OnClickListener btnClick = new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                          switch(v.getId()){
                                  case R.id.take_picture:         openCamera();   break;
                                  case R.id.detect_face:          detectFaces();  break; 
                          }
                  }
          };
      }
      

      还有摇滚!!!!!!!

      【讨论】:

      • 答案是相关的,但不是解决方案,您发布的代码是用于人脸检测,而问题明确要求进行人脸识别
      猜你喜欢
      • 2011-07-18
      • 2014-05-19
      • 1970-01-01
      • 2019-10-26
      • 2020-03-24
      • 1970-01-01
      • 2021-11-08
      • 2020-12-12
      • 2011-12-14
      相关资源
      最近更新 更多