I am using OpenCV version 4.5.0 latest currently to get the camera frames and process them. But the issue is after doing everything my JavaCameraView is empty blank with nothing in it. Same with JavaCamera2View. I have previously used openCV 3.4.5 same code working fine. Also till 4.1.0, after that from 4.1.1 till now issue is the same tried many things but no luck. I have also tried this solution but no luck with 4.5.0. I at least need 4.4.0 in my application cause I will be using YOLO 4 with CV. I am just using basic code just to get the frame in view. I am not getting any kind of error message in my app. Here are the codes.
MainActivity.java
package com.learn.ocv450;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceView;
import android.widget.Toast;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.JavaCamera2View;
import org.opencv.android.JavaCameraView;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
CameraBridgeViewBase cameraBridgeViewBase;
BaseLoaderCallback baseLoaderCallback;
int counter = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cameraBridgeViewBase = (JavaCamera2View) findViewById(R.id.CameraView);
cameraBridgeViewBase.setVisibility(SurfaceView.VISIBLE);
cameraBridgeViewBase.setCvCameraViewListener(this);
baseLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
super.onManagerConnected(status);
if (status == BaseLoaderCallback.SUCCESS) {
//OpenCVLoader.initDebug();
//System.loadLibrary("opencv_java4");
cameraBridgeViewBase.enableView();
} else {
super.onManagerConnected(status);
}
}
};
}
@Override
protected void onResume() {
super.onResume();
if (!OpenCVLoader.initDebug()) {
Toast.makeText(this, "There is problem", Toast.LENGTH_SHORT).show();
} else {
baseLoaderCallback.onManagerConnected(baseLoaderCallback.SUCCESS);
}
}
@Override
protected void onPause() {
super.onPause();
if (cameraBridgeViewBase != null){
cameraBridgeViewBase.disableView();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (cameraBridgeViewBase != null){
cameraBridgeViewBase.disableView();
}
}
@Override
public void onCameraViewStarted(int width, int height) {
}
@Override
public void onCameraViewStopped() {
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Mat frame = inputFrame.rgba();
if (counter % 2 == 0){
Core.flip(frame, frame, 1);
Imgproc.cvtColor(frame, frame, Imgproc.COLOR_RGBA2GRAY);
}
counter++;
Toast.makeText(this, "Getting Camera Frame", Toast.LENGTH_SHORT).show();
return frame;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<org.opencv.android.JavaCamera2View
android:id="@+id/CameraView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_gravity="start"
android:visibility="visible">
</org.opencv.android.JavaCamera2View>
</RelativeLayout>
Manifest Permissions
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
btw I have followed the basic drill and imported the module correctly and added it as a dependency. Also, I am getting a success message on calling OpenCVLoader.initDebug();
so openCV is installed correctly.