Итак, я хотел изучить новый Google Camera API - CameraX
.Что я хочу сделать, так это снимать изображение с камеры и каждую секунду передавать его в функцию, которая принимает растровое изображение для целей машинного обучения.
Я прочитал документацию по Camera X
Image Analyzer:
Сценарий использования анализа изображения предоставляет вашему приложению доступное для процессора изображение для обработки изображения, компьютерного зрения или компьютера.вывод на обучение.Приложение реализует метод Analyzer, который запускается в каждом кадре.
.., который в основном то, что мне нужно.Итак, я реализовал этот анализатор изображений следующим образом:
imageAnalysis.setAnalyzer { image: ImageProxy, _: Int ->
viewModel.onAnalyzeImage(image)
}
Я получаю image: ImageProxy
.Как я могу перевести это ImageProxy
в Bitmap
?
Я пытался решить это так:
fun decodeBitmap(image: ImageProxy): Bitmap? {
val buffer = image.planes[0].buffer
val bytes = ByteArray(buffer.capacity()).also { buffer.get(it) }
return BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
}
Но он возвращает null
- потому что decodeByteArray
не получаетдействительные (?) битовые байты.Есть идеи?