-2

I'm working on an app with java and the app should open the camera when i press on a button. when i launch the app it opens normally but when i press on the button it crashes and re open form the begin. i couldn't find any errors in my code so idon't know where is the problem. if any one could help me i will be very greatful, thanks here is the camera activity code:

package com.example.imagepro;

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

import java.io.IOException;

public class CameraActivity extends Activity implements 
CameraBridgeViewBase.CvCameraViewListener2{
private static final String TAG="MainActivity";

private Mat mRgba;
private Mat mGray;
private CameraBridgeViewBase mOpenCvCameraView;
private imageClassification imageClassification;
private BaseLoaderCallback mLoaderCallback =new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status){
            case LoaderCallbackInterface
                    .SUCCESS:{
                Log.i(TAG,"OpenCv Is loaded");
                mOpenCvCameraView.enableView();
            }
            default:
            {
                super.onManagerConnected(status);

            }
            break;
        }
    }
};

public CameraActivity(){
    Log.i(TAG,"Instantiated new "+this.getClass());
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    int MY_PERMISSIONS_REQUEST_CAMERA=0;
    // if camera permission is not given it will ask for it on device
    if (ContextCompat.checkSelfPermission(CameraActivity.this, Manifest.permission.CAMERA)
            == PackageManager.PERMISSION_DENIED){
        ActivityCompat.requestPermissions(CameraActivity.this, new String[] {Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA);
    }

    setContentView(R.layout.activity_camera);

    mOpenCvCameraView=(CameraBridgeViewBase) findViewById(R.id.frame_surface);
    mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
    mOpenCvCameraView.setCvCameraViewListener(this);

    try {
        int inputSize=256;
        imageClassification=new imageClassification(getAssets(),"model.tflite",inputSize);
        Log.d("CameraActivity","Model is loaded");
    }
    catch (IOException e){
        e.printStackTrace();
    }

}

@Override
protected void onResume() {
    super.onResume();
    if (OpenCVLoader.initDebug()){
        //if load success
        Log.d(TAG,"Opencv initialization is done");
        mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
    }
    else{
        //if not loaded
        Log.d(TAG,"Opencv is not loaded. try again");
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0,this,mLoaderCallback);
    }
}

@Override
protected void onPause() {
    super.onPause();
    if (mOpenCvCameraView !=null){
        mOpenCvCameraView.disableView();
    }
}

public void onDestroy(){
    super.onDestroy();
    if(mOpenCvCameraView !=null){
        mOpenCvCameraView.disableView();
    }

}

public void onCameraViewStarted(int width ,int height){
    mRgba=new Mat(height,width, CvType.CV_8UC4);
    mGray =new Mat(height,width,CvType.CV_8UC1);
}
public void onCameraViewStopped(){
    mRgba.release();
}
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame){
    mRgba=inputFrame.rgba();
    mGray=inputFrame.gray();

    // now call that function

    mRgba=imageClassification.recognizeImage(mRgba);

    return mRgba;

}

} ' and here is the error i have:

E/AndroidRuntime: FATAL EXCEPTION: Thread-6 Process: com.example.imagepro, PID: 27361 java.lang.NullPointerException: Attempt to invoke virtual method 'org.opencv.core.Mat com.example.imagepro.imageClassification.recognizeImage(org.opencv.core.Mat)' on a null object reference at com.example.imagepro.CameraActivity.onCameraFrame(CameraActivity.java:128) at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:391) at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:373) at java.lang.Thread.run(Thread.java:784)

0 Answers0