【问题标题】:face detector with gender Male or Female性别男性或女性的面部检测器
【发布时间】:2017-04-13 03:26:43
【问题描述】:
private static final int REQUET_LOADIMAGE = 111;
private Button  btnDetect;
private ImageView image;
private Bitmap bitmap;
@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.photogallery);
    image = (ImageView) findViewById(R.id.image);
    btnDetect=(Button)findViewById(R.id.btnDetect);
    btnDetect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            detectFacesInImage();
        }
    });
   Intent intent = new Intent();
    intent.setType("image/*"); // filter only image type files
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, REQUET_LOADIMAGE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUET_LOADIMAGE && resultCode == RESULT_OK) {

        if (bitmap != null) {
            bitmap.recycle();
        }
        try {
            InputStream inputStream = getContentResolver().openInputStream(data.getData());
            bitmap = BitmapFactory.decodeStream(inputStream);
            inputStream.close();
            image.setImageBitmap(bitmap);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public void detectFacesInImage() {

    //Create a Paint object for drawing with
    Paint myRectPaint = new Paint();
    myRectPaint.setStrokeWidth(5);
    myRectPaint.setColor(Color.RED);
    myRectPaint.setStyle(Paint.Style.STROKE);
    //Create a Canvas object for drawing on
    Bitmap tempBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
    Canvas tempCanvas = new Canvas(tempBitmap);
    tempCanvas.drawBitmap(bitmap, 0, 0, null);

    //Detect the Faces
    FaceDetector faceDetector = new FaceDetector.Builder(getApplicationContext())
            .setTrackingEnabled(false)
            .build();
    Frame frame = new Frame.Builder().setBitmap(bitmap).build();
    SparseArray<Face> faces = faceDetector.detect(frame);

    if (faces.size() == 0) {
        Toast.makeText(this, "None face detected!", Toast.LENGTH_SHORT).show();
    } else {
        //Draw Rectangles on the Faces
        for (int i = 0; i < faces.size(); i++) {
            Face thisFace = faces.valueAt(i);
            float x1 = thisFace.getPosition().x;
            float y1 = thisFace.getPosition().y;
            float x2 = x1 + thisFace.getWidth();
            float y2 = y1 + thisFace.getHeight();


            tempCanvas.drawRoundRect(new RectF(x1, y1, x2, y2), 2, 2, myRectPaint);
            faceDetector.release();
        }

        image.setImageDrawable(new BitmapDrawable(getResources(), tempBitmap));
    }
}
}

我已经使用 google play-services-vision:9.4.0+' 成功实现了人脸检测,并且在 canvas 的帮助下通过一个简单的程序获得了检测到的人脸。 我想知道 onClicklistner 上给定照片的性别。

有什么办法吗?

【问题讨论】:

  • 我非常怀疑你能做到这一点,除非你使用一些复杂的人工智能算法。有时,即使是人类也很难区分男性和女性。那么跨性别者呢?我猜你是想爬镜子。
  • 这看起来像是几个月的任务。你不能只写face.getGender(),因为它没有办法做到这一点。所以你必须手动识别它。
  • @Rotwang 我见过很多应用程序检测性别的准确率至少达到 90%
  • 我的意思是你不能得到Face对象的性别。如果你想这样做,你将不得不为此实现自己的算法,这需要我几个月的时间来实现。
  • 您期望得到什么样的帮助?你想让我花几个月的时间来开发性别检测算法吗?

标签: android google-play-services face-detection


【解决方案1】:

尝试使用这个 api:性别分类 https://algorithmia.com/algorithms/deeplearning/GenderClassification

import com.algorithmia.*;
import com.algorithmia.algo.*;

String input = "{\n"
 + "    \"image\": \"data://deeplearning/example_data/m_ali.jpg\"\n"
 + "}";
AlgorithmiaClient client = Algorithmia.client("YOUR_API_KEY");
Algorithm algo = client.algo("algo://deeplearning/GenderClassification/1.0.1");
AlgoResponse result = algo.pipeJson(input);
System.out.println(result.asJsonString());

Json 结果:

{
  "results": [
    [0.9948568344116211, "Male"],
    [0.0051431627944111815, "Female"]
  ]
}

【讨论】:

  • 其实我不知道,但它不是免费的。检查那里的定价部分
  • 在 google vision api 中有 Facial Hair "mustache, beard" 可以帮助你
  • 是api所以肯定支持android
  • 你能给我看看谷歌视觉中面部毛发的例子吗?
  • @farhan 这不是完全免费的价格,请尝试此链接中的部分cloud.google.com/vision
猜你喜欢
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
相关资源
最近更新 更多