Android Question OpenCV4.3

roberto64

Active Member
Licensed User
Longtime User
Hi, if you can help, I might create a wrapper, I don't know java well, under the code, I might like the org.opencv.android.JavaCameraView "camera to display in B4X with a panel and with the event it returns the bitmap , I state that Jordicp's OpenCV library is an excellent job.
I thank

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
//import android.support.v4.app.ActivityCompat;
//import android.support.v4.content.ContextCompat;
//import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceView;
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.Mat;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import anywheresoftware.b4a.BA;
import anywheresoftware.b4a.BA.ActivityObject;
import anywheresoftware.b4a.BA.Author;
import anywheresoftware.b4a.BA.DependsOn;
import anywheresoftware.b4a.BA.Events;
import anywheresoftware.b4a.BA.Hide;
import anywheresoftware.b4a.BA.Permissions;
import anywheresoftware.b4a.BA.Pixel;
import anywheresoftware.b4a.BA.ShortName;
import anywheresoftware.b4a.BA.Version;
import anywheresoftware.b4a.BALayout;
import anywheresoftware.b4a.keywords.Common.DesignerCustomView;
import anywheresoftware.b4a.objects.LabelWrapper;
import anywheresoftware.b4a.objects.PanelWrapper;
import anywheresoftware.b4a.objects.ViewWrapper;
import anywheresoftware.b4a.objects.collections.Map;
@ShortName("JavaCameraFrame43")
@Version(4.30F)
@ActivityObject
@Author("T. Roberto")
@Events(values={"inputFrame as Mat)"})
@Permissions(values={"android.permission.CAMERA","android.permission.RECORD_AUDIO","android.permission",
"android.permission.WRITE_EXTERNAL_STORAGE","android.permission.READ_EXTERNAL_STORAGE"})
@DependsOn(values={"opencv-4.3.0.2-my.aar"})
@SuppressWarnings("unused")
public class JavaCameraFrame43 extends ViewWrapper<View> implements CameraBridgeViewBase.CvCameraViewListener2 {

private CameraBridgeViewBase mOpenCvCameraView;
private String TAG ="OCVTest";
private Context c;
private CameraBridgeViewBase bridgeBase;
private PanelWrapper mPanel;
private BA ba;
private String eventName;
private JavaCameraView cv;
public void Initialize(BA ba, String EventName) {
_initialize(ba, null, EventName);
}

@Hide
public void _initialize(BA ba, Object activityClass, String EventName) {
this.eventName = EventName.toLowerCase(BA.cul);
this.ba = ba;
BA.Log("Passo1");
initDebug();
cv = new JavaCameraView(ba.context, null);
this.setObject(cv);
BA.Log("Passo2");
onCreate();
}

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(c) {
@Override
public void onManagerConnected(int status) {
BA.Log("Passo3");
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.w( TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};

protected void onCreate() {
BA.Log("Passo4");
mOpenCvCameraView.setCameraIndex(1);
mPanel.AddView(mOpenCvCameraView, 0, 0, 100, 100);
mOpenCvCameraView.setCvCameraViewListener(this);
}

private void initDebug() {
if (!OpenCVLoader.initDebug()) {
Log.w(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
BA.Log("Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, c, mLoaderCallback);
} else {
Log.w(TAG, "OpenCV library found inside package. Using it!");
BA.Log("OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}

@Override
public void onCameraViewStarted(int width, int height) {
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
Log.w(TAG,"CameraViewStarted");
}
@Override
public void onCameraViewStopped() {
}

@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
return null;
}


}
 

roberto64

Active Member
Licensed User
Longtime User
hi everyone, if there is any help, I have these instructions
cv.getHolder().setType(SurfaceView.VISIBLE);
cv.setVisibility(SurfaceView.VISIBLE);
mPanel.addView(cv, mLayoutParamsm);
cv.getHolder().setFixedSize(mPanel.getLayoutParams().width, mPanel.getLayoutParams().height);
cv.setCameraIndex(CAMERA_ID_FRONT);
BA.Log("Permessi" );
cv.setCvCameraViewListener(this);
}
I state that the variable cv is equivalent to private JavaCameraView cv; "in the B4X project I declare a panel" Opcv.Initialize ("", Pncamara) "I declare the permissions for the camera but in the execution of the project the panel or camera is black any help?
I state that everything works except the camera which is black.
hello
 
Last edited:
Upvote 0
Top