为了账号安全,请及时绑定邮箱和手机立即绑定

能检测出有多少张脸,但是脸部画不出框框 源码在下面,大家帮我看看,急急急

canva.drawLine(x - w / 2, y - h / 2, x - w / 2, y + h / 2, mPaint);
canva.drawLine(x - w / 2, y - h / 2, x + w / 2, y - h / 2, mPaint);
canva.drawLine(x + w / 2, y - h / 2, x + w / 2, y + h / 2, mPaint);
canva.drawLine(x - w / 2, y + h / 2, x + w / 2, y + h / 2, mPaint);

mPhotoImg = bitmap;

正在回答

4 回答

你要把mPaint的setColor()中的参数改成 0xffffffff(一共8个f),6个f的话并不是没有框,而是因为是透明的所以看不见。另外setStrokeWidth(30)有些过大了,改小一点比较好。

0 回复 有任何疑惑可以回复我~

我跟你一样画不出矩形框,请问你解决了吗?

0 回复 有任何疑惑可以回复我~

这是mainActivity的代码

0 回复 有任何疑惑可以回复我~

import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.facepp.error.FaceppParseException;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

   private static final int PICK_CODE = 0 * 110;
   private ImageView mPhoto;
   private Button mGetImage;
   private Button mDetect;
   private TextView mTip;
   private View mWaitting;
   private String mCurrentPhotoSrt;
   private Bitmap mPhotoImg;
   private Paint mPaint;

   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       initViews();
       initEvents();
       mPaint = new Paint();

   }

   private void initEvents() {
       mGetImage.setOnClickListener(this);
       mDetect.setOnClickListener(this);
   }

   private void initViews() {
       mPhoto = (ImageView) findViewById(R.id.id_photo);
       mGetImage = (Button) findViewById(R.id.id_getImage);
       mDetect = (Button) findViewById(R.id.id_detect);
       mTip = (TextView) findViewById(R.id.id_tip);
       mWaitting = findViewById(R.id.id_waitting);
   }


   protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
       if (requestCode == PICK_CODE) {
           if (intent != null) {
               Uri uri = intent.getData();
               Cursor cursor = getContentResolver().query(uri, null, null, null, null);
               cursor.moveToFirst();
               int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
               mCurrentPhotoSrt = cursor.getString(idx);
               cursor.close();
               resizePhtot();
               mPhoto.setImageBitmap(mPhotoImg);
               mTip.setText("Click Detect ==>");
           }
       }
       super.onActivityResult(requestCode, resultCode, intent);
   }

   private void resizePhtot() {
       BitmapFactory.Options options = new BitmapFactory.Options();
       options.inJustDecodeBounds = true;
       BitmapFactory.decodeFile(mCurrentPhotoSrt, options);
       double ratio = Math.max(options.outWidth * 1.0d / 1024f, options.outHeight * 1.0d / 1024f);
       options.inSampleSize = (int) Math.ceil(ratio);
       options.inJustDecodeBounds = false;
       mPhotoImg = BitmapFactory.decodeFile(mCurrentPhotoSrt, options);

   }

   private static final int MSG_SUCESS = 0x111;
   private static final int MSG_ERROR = 0x112;
   private Handler mHandler = new Handler() {
       @Override

       public void handleMessage(Message msg) {
           switch (msg.what) {
               case MSG_SUCESS:

                   mWaitting.setVisibility(View.GONE);
                   JSONObject rs = (JSONObject) msg.obj;
                   prepareRsBitmap(rs);
                   mPhoto.setImageBitmap(mPhotoImg);
                   break;
               case MSG_ERROR:
                   mWaitting.setVisibility(View.GONE);
                   String errorMsg = (String) msg.obj;
                   if (TextUtils.isEmpty(errorMsg)) {

                       mTip.setText("Error.");

                   } else {
                       mTip.setText(errorMsg);
                   }
                   break;
           }
           super.handleMessage(msg);
       }
   };

   private void prepareRsBitmap(JSONObject rs)

   {
       Bitmap bitmap = Bitmap.createBitmap(mPhotoImg.getWidth(), mPhotoImg.getHeight(), mPhotoImg.getConfig());
       Canvas canva = new Canvas(bitmap);
       canva.drawBitmap(mPhotoImg, 0, 0, null);

       try {
           JSONArray faces = rs.getJSONArray("face");
           int faceCount = faces.length();
           mTip.setText("find" + faceCount);
           for (int i = 0; i < faceCount; i++) {
               JSONObject face = faces.getJSONObject(i);
               JSONObject posObj = face.getJSONObject("position");
               float x = (float) posObj.getJSONObject("center").getDouble("x");
               float y = (float) posObj.getJSONObject("center").getDouble("y");
               float w = (float) posObj.getDouble("width");
               float h = (float) posObj.getDouble("height");
               x = x / 100 * bitmap.getWidth();
               y = y / 100 * bitmap.getHeight();
               w = w / 100 * bitmap.getWidth();
               h = h / 100 * bitmap.getHeight();
               mPaint.setColor(0xffffff);
               mPaint.setStrokeWidth(30);
               //画BOX
               canva.drawLine(x - w / 2, y - h / 2, x - w / 2, y + h / 2, mPaint);
               canva.drawLine(x - w / 2, y - h / 2, x + w / 2, y - h / 2, mPaint);
               canva.drawLine(x + w / 2, y - h / 2, x + w / 2, y + h / 2, mPaint);
               canva.drawLine(x - w / 2, y + h / 2, x + w / 2, y + h / 2, mPaint);

               mPhotoImg = bitmap;


           }
       } catch (JSONException e) {
           e.printStackTrace();
       }

   }


   public void onClick(View view) {
       switch (view.getId()) {
           case R.id.id_getImage:
               Intent intent = new Intent(Intent.ACTION_PICK);
               intent.setType("image/*");
               startActivityForResult(intent, PICK_CODE);

               break;
           case R.id.id_detect:
               mWaitting.setVisibility(View.VISIBLE);
               FaceppDetect.detect(mPhotoImg, new FaceppDetect.CallBack() {
                   @Override
                   public void success(JSONObject result) {
                       Message msg = Message.obtain();
                       msg.what = MSG_SUCESS;
                       msg.obj = result;
                       mHandler.sendMessage(msg);


                   }

                   @Override
                   public void error(FaceppParseException exception) {
                       Message msg = Message.obtain();
                       msg.what = MSG_SUCESS;
                       msg.obj = exception.getErrorMessage();
                       mHandler.sendMessage(msg);

                   }
               });

               break;
       }
   }
}

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
How-old 刷脸神器
  • 参与学习       31545    人
  • 解答问题       155    个

通过第三方本课程教大家实现人脸识别,通过案例讲解原理

进入课程

能检测出有多少张脸,但是脸部画不出框框 源码在下面,大家帮我看看,急急急

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信