使用face++做人脸,年龄,性别识别

来源:互联网 发布:怎样快速提升淘宝心 编辑:程序博客网 时间:2024/06/07 07:05
package com.example.administrator.testdemo.face;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.graphics.drawable.Drawable;import com.example.administrator.testdemo.bean.FaceMessage;import java.util.List;/** * Created by Administrator on 2017/8/16. */public class BitmapCanvas  {  private   Bitmap bitmap;  private List<FaceMessage>  messageList;    public Bitmap getBitmap() {        return bitmap;    }    public void setBitmap(Bitmap bitmap) {        this.bitmap = bitmap;    }    public BitmapCanvas(Bitmap bitmap) {        this.bitmap = bitmap;    }    public List<FaceMessage> getMessageList() {        return messageList;    }    public void setMessageList(List<FaceMessage> messageList,CanvasFinish c) {        this.messageList = messageList;        draw(c);    }    public void draw(CanvasFinish c){        if (messageList!=null){            Canvas  canvas =new Canvas(bitmap);           // canvas.drawRect(getRectF(),getpaint());            for (int i = 0; i <messageList.size() ; 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();        }    }    private Paint getpaint(){      Paint  paint =new Paint();        paint.setColor(Color.RED);        paint.setAntiAlias(true);        paint.setStyle(Paint.Style.STROKE);        paint.setStrokeWidth(5f);        return paint;    }    private Paint textPaint(){        Paint  paint =new Paint();        paint.setColor(Color.BLUE);         paint.setTextSize(40f);        return paint;    }}
public interface CanvasFinish {    void canvasfinish();}
package com.example.administrator.testdemo.bean;import android.graphics.Point;import android.graphics.PointF;import android.graphics.RectF;import java.util.List;/** * Created by Administrator on 2017/8/15. */public class FaceMessage {   private String gender;    private int age;    private RectF rectF;    public String getGender() {        return gender;    }    public void setGender(String gender) {        this.gender=gender.equals("Male")?"男":"女";    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public RectF getRectF() {        return rectF;    }    public void setRectF(RectF rectF) {        this.rectF = rectF;    }    public void setRectF(int size,int top,int left) {       this.rectF=new RectF(left,top,left+size,top+size);    }    public PointF  getPoint(){        if (rectF!=null){            PointF  point =new PointF(rectF.left,rectF.top);            return point;        }        return null;    }}
package com.example.administrator.testdemo.face;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.os.Environment;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.util.Base64;import android.util.Log;import android.widget.ImageView;import android.widget.TextView;import com.android.volley.RequestQueue;import com.android.volley.toolbox.StringRequest;import com.android.volley.toolbox.Volley;import com.example.administrator.testdemo.Log.LogShow;import com.example.administrator.testdemo.R;import com.example.administrator.testdemo.bean.FaceMessage;import com.megvii.cloud.http.CommonOperate;import com.megvii.cloud.http.FaceSetOperate;import com.megvii.cloud.http.Response;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity {    TextView mTextView;    String key = "aRKh7sDhT536YLHORdXOFFBqJOeF5Gzv";//api_key    String secret = "zrfIe28avDUP4z36mEy9vg2csDXszxB8";//api_secret    String imageUrl = "http://pic1.hebei.com.cn/003/005/869/00300586905_449eedbb.jpg";    StringBuffer sb = new StringBuffer();    long start=System.currentTimeMillis();    private File file;    private ImageView img;    private Bitmap bitmap;    private BitmapCanvas bitmacanvas;    @Override    protected void onCreate(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=new BitmapCanvas(bitmap);        LogShow.logShow(bitmap.getWidth());        LogShow.logShow(bitmap.getHeight());        LogShow.logShow("===========================================");        img.setImageBitmap(bitmap);        new Thread(new Runnable() {            @Override            public void run() {                post();            }        }).start();    }    public void post(){        //  bitmacanvas.draw();        ByteArrayOutputStream byteArrayOutputStream =new ByteArrayOutputStream();        bitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);        bytes = byteArrayOutputStream.toByteArray();        if (bytes.length>0){            start=System.currentTimeMillis();            handler.sendEmptyMessage(0);        }    }    private byte[] bytes;    private Handler handler =new Handler(Looper.getMainLooper()){        @Override        public void handleMessage(Message msg) {            if (msg.what==2){                img.setImageBitmap(bitmap);                return;            }            new Thread(new Runnable() {                @Override                public void run() {                    //  ArrayList<String> faces = new ArrayList<>();                    CommonOperate commonOperate = new CommonOperate(key, secret, false);                    try {                        Response response1 = commonOperate.detectByte(bytes, 0, "gender,age");                      if (getFaceToken(response1)){                         bitmacanvas.setMessageList(facemessages, new CanvasFinish() {                             @Override                             public void canvasfinish() {                                 handler.sendEmptyMessage(2);                             }                         });                      }                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }).start();        }    };    private boolean getFaceToken(Response response) throws JSONException {        if(response.getStatus() != 200){            return false;        }        String res = new String(response.getContent());         jsonParse(res);        return true;    }    private List<FaceMessage> facemessages;    private void jsonParse(String value){        if (facemessages==null){            facemessages=new ArrayList<>();        }else {            facemessages.clear();        }        try {            JSONObject jsonObject =new JSONObject(value);            JSONArray faces = jsonObject.getJSONArray("faces");            for (int i = 0; i <faces.length() ; i++) {                LogShow.logShow(faces.get(i).toString());                FaceMessage faceonew=new FaceMessage();                faceonew.setGender( faces.getJSONObject(i).getJSONObject("attributes").getJSONObject("gender").getString("value"));                faceonew.setAge(faces.getJSONObject(i).getJSONObject("attributes").getJSONObject("age").getInt("value"));                int  size=faces.getJSONObject(i).getJSONObject("face_rectangle").getInt("width");                int top=  faces.getJSONObject(i).getJSONObject("face_rectangle").getInt("top");                int left=  faces.getJSONObject(i).getJSONObject("face_rectangle").getInt("left");                faceonew.setRectF(size,top,left);                facemessages.add(faceonew);            }        } catch (JSONException e) {            e.printStackTrace();        }    }    @Override    protected void onDestroy() {        super.onDestroy();        if (bitmap!=null){            bitmap.recycle();        }    }}


 
原创粉丝点击