Android – Auf den Konstruktor von ResolutionStrategy kann nicht zugegriffen werden

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Android – Auf den Konstruktor von ResolutionStrategy kann nicht zugegriffen werden

by Anonymous » 06 Jan 2025, 06:10

Ich erstelle eine App, die das Google ML Kit verwendet, um ein menschliches Gesicht auf einem Bild zu erkennen und ein Rechteck darum zu zeichnen. Die Kameravorschau wird von CameraX bereitgestellt (

Code: Select all

androidx.camera
)-Bibliothek. Diese Frage ließ mich inspirieren. Hier ist das problematische Fragment eines Codes:

Code: Select all

@OptIn(ExperimentalGetImage::class)
private fun startCamera(deviceSize: Pair) {
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)

cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build().also {
it.surfaceProvider = PreviewView(this).surfaceProvider
}

val size = Size(deviceSize.first, deviceSize.second)

val strategy = ResolutionStrategy(deviceSize, 2)

val rs = ResolutionSelector.Builder().setResolutionStrategy(strategy)

val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setResolutionSelector(rs.build())
.build()

imageAnalysis.setAnalyzer(cameraExecutor) { imageProxy ->
val rotationDegrees = imageProxy.imageInfo.rotationDegrees
val mediaImage = imageProxy.image

if (mediaImage != null) {
val inputImage = InputImage.fromMediaImage(mediaImage, rotationDegrees)

detectFaces(inputImage) { faces ->
drawRectangles(faces)
imageProxy.close()
}
} else {
imageProxy.close()
}
}

val cameraSelector = CameraSelector.DEFAULT_FRONT_CAMERA

try {
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageAnalysis)
} catch (e: Exception) {
e.printStackTrace()
}
}, ContextCompat.getMainExecutor(this))
}
Der einzige Fehler, der von der IDE (Android Studio Ladybug 2024.2.1 Patch 3) angezeigt wird, ist

"Zugriff auf 'constructor(): ResolutionStrategy' nicht möglich: Das ist der Fall privat in 'androidx/camera/core/resolutionselector/ResolutionStrategy'"

Das kommt mir sehr seltsam vor, da auf der Android-Entwickler-Website ein öffentlicher Konstruktor dokumentiert ist und ich das auch kann Navigieren Sie zum selben öffentlichen Konstruktor, indem Sie auf Gehe zu > Deklaration klicken. Wenn ich jedoch mit der Maus über den von strategy verwendeten Konstruktor fahre, zeigt die IDE den privaten Konstruktor an. Warum passiert es und wie kann man es beheben?
Bearbeiten: Ich habe AspectRatioStrategy herausgefunden, das ResolutionStrategy sehr ähnlich ist und auch an übergeben werden kann ResolutionSelector, kann in meinem Szenario verwendet werden:

Code: Select all

val asp = AspectRatioStrategy(AspectRatio.RATIO_DEFAULT, 1) // no error
Ich hatte auch nicht erwähnt, was es mit der Auflösungsänderung auf sich hat – die Rechtecke um die Begrenzungsrahmen der erkannten Gesichter werden angezeigt, aber nicht im richtigen Verhältnis (Druckabmessungen von mediaImage). ergibt 640x480).

Top