jeudi 13 août 2015

Opencv android app keeps crashing

I am trying to create a color recognition app for android. I want to check if a color is in range and measure the time it takes for that color to be in range. My problem is my app quits unexpectedly when it hit the "start test" button. I have no idea why its doing this, I believe I have set everything up right, but obviously I'm incorrect.

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceView;
import android.view.View;
import android.widget.TextView;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.JavaCameraView;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.imgproc.Imgproc;


public class testActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {

private JavaCameraView mOpenCVCameraView;
Mat videoCamera;
Mat whiteArray;

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status){
        switch (status){
            case LoaderCallbackInterface.SUCCESS: {
                mOpenCVCameraView.enableView();
                break;
            }
            default:{
                super.onManagerConnected(status);
            }
        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    mOpenCVCameraView = (JavaCameraView) findViewById(R.id.testPageBackground);
    mOpenCVCameraView.setVisibility(SurfaceView.INVISIBLE);
    mOpenCVCameraView.setCvCameraViewListener(this);
    getSupportActionBar().hide();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    //getMenuInflater().inflate(R.menu.menu_test, menu);
    mOpenCVCameraView.setCvCameraViewListener(this);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
public void onResume() {
    super.onResume();
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
}

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

@Override
public void onCameraViewStarted(int width, int height) {
    videoCamera = new Mat(5,5,CvType.CV_8SC4);
    whiteArray = new Mat(5,5,CvType.CV_8SC4);
}

@Override
public void onCameraViewStopped() {
    videoCamera.release();
    whiteArray.release();
}

@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)
{

    return inputFrame.rgba();
}

public void startTest (View view)
{
    View lagSquare = findViewById(R.id.lagSquare);
    TextView lagRating = (TextView) findViewById(R.id.lagRating);
    TextView lagTime = (TextView) findViewById(R.id.lagTime);
    double[] timeArray = new double[100]; // set array
    int testAmount;
    double rating;
    double lagStartTime;
    double lagEndTime;
    double lagTimeResult;
    for (testAmount = 0; testAmount < 100; testAmount++) //test loop
    {
        lagSquare.setBackgroundColor(Color.rgb(000,000,000)); //set lagSquare black
        lagStartTime = System.nanoTime(); //start lagTimer start
        lagSquare.setBackgroundColor(Color.rgb(255, 255, 255)); //set lagSquare white
        //set loop that checks for white
        Core.inRange(videoCamera, new Scalar(0, 0, 95), new Scalar(0, 0, 100), whiteArray);
        while (Core.countNonZero(whiteArray) == 0);
        {
        }
        lagEndTime = System.nanoTime(); //start lagTimer end
        lagTimeResult = (lagEndTime - lagStartTime);//stop lag timer
        timeArray[testAmount] = lagTimeResult; //put lagTimerResult in array


    }
    // min scan
    double minTimeArray = timeArray[0];
    for (int cnt=0; cnt < timeArray.length; cnt++ )
    {
        if (timeArray[cnt] < minTimeArray)
        {
            minTimeArray = timeArray[cnt];
        }
    }
    String minTimeArrayString = String.valueOf(minTimeArray);
    lagTime.setText(minTimeArrayString); //smallest number in timer array output to lagTime label

}

}

08-13 18:41:19.613  25826-25826/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: bluemage.systems.displaylatencytester, PID: 25826
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:4020)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4015)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.NullPointerException: Attempt to read from field 'long org.opencv.core.Mat.nativeObj' on a null object reference
            at org.opencv.core.Core.countNonZero(Core.java:2053)
            at bluemage.systems.displaylatencytester.testActivity.startTest(testActivity.java:125)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4015)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire