Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想在android中从图像中检测人脸_Android - Fatal编程技术网

我想在android中从图像中检测人脸

我想在android中从图像中检测人脸,android,Android,我有这个代码从图像中检测人脸,并在其周围画一个红色矩形,但我有一个运行时异常,任何人都可以修复它,请我不知道该怎么做,我尝试了很多人脸检测代码,但也没有工作 { public class MainActivity extends AppCompatActivity { Button btn = (Button) findViewById(R.id.button); ImageView myImageView = (ImageView) findViewById(R.id.imgvi

我有这个代码从图像中检测人脸,并在其周围画一个红色矩形,但我有一个运行时异常,任何人都可以修复它,请我不知道该怎么做,我尝试了很多人脸检测代码,但也没有工作

{
  public class MainActivity extends AppCompatActivity
   {
 Button btn = (Button) findViewById(R.id.button);
 ImageView myImageView = (ImageView) findViewById(R.id.imgview);

@Override
protected void onCreate(Bundle savedInstanceState)

{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);




    btn.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inMutable=true;
            Bitmap myBitmap = BitmapFactory.decodeResource(
                    getApplicationContext().getResources(),
                    R.drawable.test1,
                    options);

            Paint myRectPaint = new Paint();
            myRectPaint.setStrokeWidth(5);
            myRectPaint.setColor(Color.RED);
            myRectPaint.setStyle(Paint.Style.STROKE);

            Bitmap tempBitmap = Bitmap.createBitmap(myBitmap.getWidth(), myBitmap.getHeight(), Bitmap.Config.RGB_565);
            Canvas tempCanvas = new Canvas(tempBitmap);
            tempCanvas.drawBitmap(myBitmap, 0, 0, null);

            FaceDetector faceDetector = new
                    FaceDetector.Builder(getApplicationContext()).setTrackingEnabled(false)
                    .build();
            if(!faceDetector.isOperational()){
                new AlertDialog.Builder(v.getContext()).setMessage("Could not set up the face detector!").show();
                return;
            }
            Frame frame = new Frame.Builder().setBitmap(myBitmap).build();
            SparseArray<Face> faces = faceDetector.detect(frame);

            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);
            }
            myImageView.setImageDrawable(new BitmapDrawable(getResources(),tempBitmap));

        }
    });


}
按钮btn=(按钮)findViewById(R.id.Button);
ImageView myImageView=(ImageView)findViewById(R.id.imgview)

您不应该初始化包含上述android小部件引用的变量,因为活动的布局并没有膨胀(方法onCreate将在创建此对象后运行)。您应该在方法
setContentView

按钮btn=(按钮)findViewById(R.id.Button);
ImageView myImageView=(ImageView)findViewById(R.id.imgview)


您不应该初始化包含上述android小部件引用的变量,因为活动的布局并没有膨胀(方法onCreate将在创建此对象后运行)。您应该将
findViewById
的调用移动到方法
setContentView

之后,日志猫中应该有更多内容告诉您导致此异常的异常。通常在警告级别报告您可以使用此库从位图图像中获取裁剪的面日志中应该有更多关于导致此异常的异常的信息。经常报告警告级别您可以使用此库从位图图像中获取裁剪的面谢谢,它可以工作,但如果我想更改图像,则会出现另一个异常谢谢,它可以工作,但如果我想更改图像,则会出现另一个异常
       here is the exception
   java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.hadeel.hadd/com.example.hadeel.hadd.MainActivity}: java.lang.NullPointerException