使用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(); } }}
阅读全文
0 0
- 使用face++做人脸,年龄,性别识别
- Face++-识别人脸性别年龄小例子
- Android人脸识别之显示性别与年龄(Face++)
- 用OpenCV做人脸识别和性别识别contrib
- Android 使用Face++ SDK进行人脸识别和年龄检测
- CNN年龄、性别、表情识别
- CNN年龄、性别、表情识别
- 基于CNN的人脸 性别、年龄识别
- CNN应用之性别、年龄识别
- 基于CNN的性别、年龄识别
- 基于caffe的性别、年龄识别
- 基于CNN的性别、年龄识别
- TensorFlow16: 根据脸部识别性别和年龄
- 用OpenCV做人脸识别和性别识别contrib(本文包含最全人脸库)
- OpenCV学习笔记(五十五)——用OpenCV做人脸识别和性别识别contrib
- OpenCV4Android--使用java api做人脸识别
- 从小白开始入门python+tensorflow+cnn做人脸性别识别(一)
- android人脸识别——HowOld测测你的年龄和性别
- MyISAM和InnoDB的区别
- 用git向github提交代码
- 在windows 虚拟机中安装ubuntu 16.04 LTS 系统的经验
- 【Maven】使用Maven构建多模块项目
- SqlServer存储过程中使用事务
- 使用face++做人脸,年龄,性别识别
- MYSQL物理结构
- poj-1061 青蛙的约会 (扩展欧几里得)
- A
- eclipse快捷键 ctrl+shift+o配置失效
- Java中反射机制(Reflection)学习
- Android NDK编译C++ 'stoi' and 'to_string' is not a member of 'std'
- BIO,NIO,AIO的区别
- DS1821 驱动程序