Android TFLite ObjectDetector — декодирование MPImage из обнаружения в растровое изображение. Растровое изображение поврAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android TFLite ObjectDetector — декодирование MPImage из обнаружения в растровое изображение. Растровое изображение повр

Сообщение Anonymous »

При преобразовании старых библиотек TFLite в новые с размером страницы 16 КБ я столкнулся с проблемой. Всякий раз, когда я пытаюсь получить растровое изображение из MPImage при обратном вызове обнаружения, растровое изображение находится в неправильном цветовом пространстве и имеет полосы.
Последовательность действий такова:
Вы создаете анализ изображения

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

mImageAnalysis = new ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888)
.build();
который передает кадры в виде данных ImageProxy
ImageProxy, затем кодируется в MPImage. Есть несколько способов сделать это. Вы можете извлечь растровое изображение из ImageProxy или просто использовать MediaImageBuilder следующим образом:

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

MPImage mpImage = new MediaImageBuilder(image.getImage()).build();
ПРИМЕЧАНИЕ. Я сохранил результирующее растровое изображение из image.getImage().toBitmap(), и оно отображается правильно с цветом и без полос.
Я просмотрел исходный код MPImage/MediaImageBuilder, и независимо от того, какой входной сигнал (изображение или растровое изображение), он перекодирует данные в ARGB_8888 формат. Если вы передаете, например, растровое изображение (например, то, которое вы можете получить из image.getImage().toBitmap()), оно перекодирует его из RGBA в ARGB.
В документации указано, что если вы создали MPImage с помощью MediaImageBuilder, вам следует извлечь его с помощью MediaImageExtractor, но это не работает, поскольку MPImage перекодировал его в Растровое изображение.
Если вы используете растровое изображение = BitmapExtractor.extract(image); и устанавливаете растровое изображение в ImageView, изображение имеет неправильные цвета и видимые полосы.
Это кажется весьма неожиданным, поскольку все это библиотеки Google, а растровые изображения Google работают только с форматом ARGB.
Мне нужно выполнить дальнейшую обработку обнаруженного изображения, поэтому очень важно вернуть его в растровую форму. Я пробовал различные способы перестановки битов, чтобы переупорядочить байты, но это не сработало. Он остается искаженным и полосатым. Кроме того, самым верхним байтом всегда является xFF, который похоже указывает на то, что это альфа-канал (в отличие от того, что он находится в конце, как можно было бы ожидать, если байты действительно находятся в порядке RGBA).
Попытка выбрать одно значение (R, G или B) и поместить его во все значения RGB для создания изображения в оттенках серого по-прежнему приводит к появлению полос, что указывает на что это не просто перестановка битов.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/797 ... tmap-bitma
Ответить

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

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

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

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

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