Szeneview mit Camerax, Modell geladen, aber nicht auf der Benutzeroberfläche gezeigtAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Szeneview mit Camerax, Modell geladen, aber nicht auf der Benutzeroberfläche gezeigt

Post by Anonymous »

Die Modelle werden geladen, aber nicht gezeigt, wenn ich sie mit Kamera x verwende, und Erkennungen durch Tensorflow. Laden.




< /code>

object ARModelViewer {
var preloadedModelNode: ModelNode? = null
@JvmStatic
fun preloadModel(sceneView: SceneView, activity: ComponentActivity) {
Log.d("ARModelViewer", "preloadModel() called")
activity.lifecycleScope.launch {
try {
val hdrFile = "environments/studio_small_09_2k.hdr"

sceneView.environmentLoader.loadHDREnvironment(hdrFile).apply {
sceneView.indirectLight = this?.indirectLight
sceneView.skybox = this?.skybox
}
Log.d("ARModelViewer", "Setting camera position")
sceneView.cameraNode.position = Position(z = 4.0f)

val modelFile = "arrow.glb"
Log.d("ARModelViewer", "Loading model file: $modelFile")
val modelInstance = sceneView.modelLoader.createModelInstance(modelFile)

Log.d("ARModelViewer", "Creating model node")
preloadedModelNode =
ModelNode(
modelInstance = modelInstance,
scaleToUnits = 2.0f,
)
preloadedModelNode!!.scale = Scale(0.5f)

Log.d("ARModelViewer", "Model node created and scaled")
// sceneView.addChildNode(preloadedModelNode!!)
} catch (e: Exception) {
Log.e("ARModelViewer", "Error in preloadModel: ${e.message}", e)
}
}
}

@JvmStatic
fun addChildModel(sceneView: SceneView) {
Log.d("ARModelViewer", "addChildModel() called")
if (preloadedModelNode != null) {
sceneView.addChildNode(preloadedModelNode!!)
Log.d("ARModelViewer", "Model node added to scene")
} else {
Log.w("ARModelViewer", "preloadedModelNode is null. Did you call preloadModel() first?")
}
}
< /code>
public void bindCameraUseCases() {
// real-time frame updates, frame-by-frame TensorFlow detection
if (cameraProvider == null) {
throw new IllegalStateException("Camera initialization failed.");
}

int rotation = binding.viewFinder.getDisplay().getRotation();

CameraSelector cameraSelector =
new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build();
// Preview Use Case
// Opens the camera
// Streams frames directly to the UI (typically a PreviewView)
// Does not give you access to the image data
preview =
new Preview.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_4_3)
.setTargetRotation(rotation)
.build();

imageAnalyzer =
new ImageAnalysis.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_4_3)
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setTargetRotation(rotation)
.setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888)
.build();

// ImageAnalysis Use Case
// Gets image frames from the camera
// Lets you read and manipulate pixel data (ImageProxy)
// Analyze each frame and send it as a rotated/mirrored Bitmap
imageAnalyzer.setAnalyzer(
cameraExecutor,
imageProxy -> {
Bitmap bitmapBuffer =
Bitmap.createBitmap(
imageProxy.getWidth(),
imageProxy.getHeight(),
Bitmap.Config.ARGB_8888);
imageProxy.getPlanes()[0].getBuffer().rewind();
bitmapBuffer.copyPixelsFromBuffer(imageProxy.getPlanes()[0].getBuffer());
imageProxy.close();
Matrix matrix = new Matrix();
//// Rotate and optionally mirror the bitmap
matrix.postRotate((float) imageProxy.getImageInfo().getRotationDegrees());

if (isFrontCamera) {
matrix.postScale(-1f, 1f, imageProxy.getWidth(), imageProxy.getHeight());
}
// Apply transformation
Bitmap rotatedBitmap =
Bitmap.createBitmap(
bitmapBuffer,
0,
0,
bitmapBuffer.getWidth(),
bitmapBuffer.getHeight(),
matrix,
true);

// Dispatch to all listeners for TensorFlow Lite inference
if (rotatedBitmap != null) {
for (Listener listener : getListeners()) {
listener.detect(rotatedBitmap);
}
}
});

cameraProvider.unbindAll();
// Bind preview and image analysis to lifecycle
try {
camera =
cameraProvider.bindToLifecycle(
activity, cameraSelector, preview, imageAnalyzer);

preview.setSurfaceProvider(binding.viewFinder.getSurfaceProvider());
} catch (Exception exc) {
Log.e("OverlayView", "Use case binding failed", exc);
}
}
< /code>
WHAT I TRIES
  • Camera now is black after setting the
    app:implementationMode="compatible" in previewView, but now I can see
    the detections and 3d Object
Image
  • i changed the alpha attribute to 0.5 i can see the camera with
    transparent 3d Object which i dont need to not ruin the AR effect

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post