美文网首页
使用Face++做人脸识别,性别、年龄检测

使用Face++做人脸识别,性别、年龄检测

作者: gcp | 来源:发表于2017-08-16 16:22 被阅读0次

    注册Face++申请key和secret,导入SDK,有不足缺陷的地方还望指出。

    public classMainActivityextendsAppCompatActivity {

    privateStringkey="yourKey";//api_key

    privateStringsecret="youreApi_secret";//api_secret

    longstart=System.currentTimeMillis();

    privateImageViewimg;

    privateBitmapbitmap;

    privateBitmapCanvasbitmacanvas;

    @Override

    protected voidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_mains);

    img= (ImageView) findViewById(R.id.img);

    bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.timg3).copy(Bitmap.Config.RGB_565,true);

    bitmacanvas=newBitmapCanvas(bitmap);

    img.setImageBitmap(bitmap);

    newThread(newRunnable() {

    @Override

    public voidrun() {

    post();

    }

    }).start();

    }

    public voidpost(){

    ByteArrayOutputStream byteArrayOutputStream =newByteArrayOutputStream();

    bitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);

    bytes= byteArrayOutputStream.toByteArray();

    if(bytes.length>0){

    start=System.currentTimeMillis();

    handler.sendEmptyMessage(0);

    }

    }

    private byte[]bytes;

    privateHandlerhandler=newHandler(Looper.getMainLooper()){

    @Override

    public voidhandleMessage(Message msg) {

    if(msg.what==2){

    img.setImageBitmap(bitmap);

    return;

    }

    newThread(newRunnable() {

    @Override

    public voidrun() {

    //  ArrayList faces = new ArrayList<>();

    CommonOperate commonOperate =newCommonOperate(key,secret,false);

    try{

    Response response1 = commonOperate.detectByte(bytes,0,"gender,age");

    if(getFaceToken(response1)){

    bitmacanvas.setMessageList(facemessages,newCanvasFinish() {

    @Override

    public voidcanvasfinish() {

    handler.sendEmptyMessage(2);

    }

    });

    }

    }catch(Exception e) {

    e.printStackTrace();

    }

    }

    }).start();

    }

    };

    private booleangetFaceToken(Response response)throwsJSONException {

    if(response.getStatus() !=200){

    return false;

    }

    String res =newString(response.getContent());

    jsonParse(res);

    return true;

    }

    privateListfacemessages;

    private voidjsonParse(String value){

    if(facemessages==null){

    facemessages=newArrayList<>();

    }else{

    facemessages.clear();

    }

    try{

    JSONObject jsonObject =newJSONObject(value);

    JSONArray faces = jsonObject.getJSONArray("faces");

    for(inti =0; i

    LogShow.logShow(faces.get(i).toString());

    FaceMessage faceonew=newFaceMessage();

    faceonew.setGender( faces.getJSONObject(i).getJSONObject("attributes").getJSONObject("gender").getString("value"));

    faceonew.setAge(faces.getJSONObject(i).getJSONObject("attributes").getJSONObject("age").getInt("value"));

    intsize=faces.getJSONObject(i).getJSONObject("face_rectangle").getInt("width");

    inttop=  faces.getJSONObject(i).getJSONObject("face_rectangle").getInt("top");

    intleft=  faces.getJSONObject(i).getJSONObject("face_rectangle").getInt("left");

    faceonew.setRectF(size,top,left);

    facemessages.add(faceonew);

    }

    }catch(JSONException e) {

    e.printStackTrace();

    }

    }

    @Override

    protected voidonDestroy() {

    super.onDestroy();

    if(bitmap!=null){

    bitmap.recycle();

    }

    if(facemessages!=null){

    facemessages.clear();

    }

    if(handler!=null){

    handler.removeCallbacksAndMessages(null);

    }

    }

    }

    public classBitmapCanvas  {

    privateBitmapbitmap;

    privateListmessageList;

    publicBitmap getBitmap() {

    returnbitmap;

    }

    public voidsetBitmap(Bitmap bitmap) {

    this.bitmap= bitmap;

    }

    publicBitmapCanvas(Bitmap bitmap) {

    this.bitmap= bitmap;

    }

    publicList getMessageList() {

    returnmessageList;

    }

    public voidsetMessageList(List messageList,CanvasFinish c) {

    this.messageList= messageList;

    draw(c);

    }

    public voiddraw(CanvasFinish c){

    if(messageList!=null){

    Canvas  canvas =newCanvas(bitmap);

    // canvas.drawRect(getRectF(),getpaint());

    for(inti =0; i

    canvas.drawRect(messageList.get(i).getRectF(),getpaint());

    canvas.drawText(messageList.get(i).getGender()+"年龄"+messageList.get(i).getAge(),messageList.get(i).getPoint().x,messageList.get(i).getPoint().y,textPaint());

    }

    c.canvasfinish();

    }

    }

    privatePaint getpaint(){

    Paint  paint =newPaint();

    paint.setColor(Color.RED);

    paint.setAntiAlias(true);

    paint.setStyle(Paint.Style.STROKE);

    paint.setStrokeWidth(5f);

    returnpaint;

    }

    privatePaint textPaint(){

    Paint  paint =newPaint();

    paint.setColor(Color.BLUE);

    paint.setTextSize(40f);

    returnpaint;

    }

    }

    public classFaceMessage {

    privateStringgender;

    private intage;

    privateRectFrectF;

    publicString getGender() {

    returngender;

    }

    public voidsetGender(String gender) {

    this.gender=gender.equals("Male")?"男":"女";

    }

    public intgetAge() {

    returnage;

    }

    public voidsetAge(intage) {

    this.age= age;

    }

    publicRectF getRectF() {

    returnrectF;

    }

    public voidsetRectF(RectF rectF) {

    this.rectF= rectF;

    }

    public voidsetRectF(intsize,inttop,intleft) {

    this.rectF=newRectF(left,top,left+size,top+size);

    }

    publicPointF  getPoint(){

    if(rectF!=null){

    PointF  point =newPointF(rectF.left,rectF.top);

    returnpoint;

    }

    return null;

    }

    }

    public interfaceCanvasFinish{

    voidcanvasfinish();

    }

    相关文章

      网友评论

          本文标题:使用Face++做人脸识别,性别、年龄检测

          本文链接:https://www.haomeiwen.com/subject/elgirxtx.html