ML-Kit Android для обнаружения позы, сопоставление координат ориентиров с предварительным просмотромAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 ML-Kit Android для обнаружения позы, сопоставление координат ориентиров с предварительным просмотром

Сообщение Anonymous »

Я пытаюсь нарисовать точки на ориентирах, используя результаты ML-Kit Pose Detection в приложении Android с помощью Jetpack Compose.
Сначала я рисую точки (красные точки) с помощью чистые координаты, полученные от анализатора. Координаты представляют собой меньший масштаб изображения и точки, нарисованные в левом углу экрана.
Изображение
Я заметил, что обработанное изображение (

Код: Выделить всё

processImage
) размер был масштабирован до 640x480. Вот код анализатора.

Код: Выделить всё

class PoseAnalyzer(
private val onSuccess: (result: AnalyzeResultData) -> Unit,
): ImageAnalysis.Analyzer {
private val options = PoseDetectorOptions.Builder()
.setDetectorMode(PoseDetectorOptions.STREAM_MODE)
.build()

private val poseDetector = PoseDetection.getClient(options)

@ExperimentalGetImage
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image
if (mediaImage != null) {
val rotationDegrees = imageProxy.imageInfo.rotationDegrees
val processImage = InputImage.fromMediaImage(mediaImage, rotationDegrees)
poseDetector.process(processImage)
.addOnSuccessListener { pose ->
val result = AnalyzeResultData(pose, processImage.toSizeData())
onSuccess(result)
}
.addOnFailureListener {
}
.addOnCompleteListener {
imageProxy.close()
}
}
}
}

Затем я масштабировал координаты в соответствии с размером предварительного просмотра (1080x2125), используя приведенный ниже код.

Код: Выделить всё

private fun scaleAndGetOffset(
point: SizeData,
analyzedImage: SizeData,
screenSize: SizeData,
cameraSelector: CameraSelector,
): Offset {
val rateX = screenSize.x/analyzedImage.x
val rateY = screenSize.y/analyzedImage.y
return Offset(
x = if (cameraSelector == CameraSelector.DEFAULT_BACK_CAMERA) point.x * rateX else screenSize.x-point.x * rateX,
y = point.y * rateY
)
}
Точка оказалась не на том месте.
Изображение
Как получить или преобразовать координаты анализатора, которые будут совпадать с предпросмотром?

Подробнее здесь: https://stackoverflow.com/questions/780 ... th-preview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»