Идея состоит в том, чтобы нарисовать ограниченный прямоугольник вокруг обнаруженного штрих -кода непосредственно на предварительном просмотре. Я использую координату_систем_view_reference , поэтому ML Kit Analyzer должен автоматически обрабатывать преобразование координат между камерой и предварительным просмотром в соответствии с документацией. Но в режиме ландшафта y координаты ограничивающей коробки всегда выключены, либо слишком далеко, либо слишком далеко, но примерно на то же количество (см. Скриншоты). Сначала я подумал, что это ошибка в моем коде, но я нашел этот пример реализации (в основном делаю именно то, что я хочу): https://github.com/duma042/barsandq, и проблема там также воспроизводима. На реальном устройстве это более тонкое, но все еще ясно видно. Или это может быть ошибка в анализаторе комплекта ML?
Код: Выделить всё
private fun setupBarcodeScanner(controller: LifecycleCameraController) {
// ...
controller.setImageAnalysisAnalyzer(
mainExecutor,
MlKitAnalyzer(
listOf(barcodeScanner),
ImageAnalysis.COORDINATE_SYSTEM_VIEW_REFERENCED,
mainExecutor
) { result: MlKitAnalyzer.Result? ->
processBarcodeResults(result, barcodeScanner, previewView)
}
)
// ...
}
// ...
private fun processBarcodeResults(
result: MlKitAnalyzer.Result?,
barcodeScanner: BarcodeScanner,
previewView: PreviewView,
) {
val barcodes = result?.getValue(barcodeScanner) ?: return
if (barcodes.isEmpty()) return
val barcode = barcodes.firstOrNull() ?: return
Log.d(TAG, "BoundingBox: ${barcode.boundingBox}") //
Подробнее здесь: [url]https://stackoverflow.com/questions/79568457/ml-kit-analyzer-returns-incorrect-boundingbox-coordinates-in-landscape-mode-with[/url]