Есть ли способ получить доступ к пикселям изображения камеры tango pointcloud в Java

Итак, я знаю о setSurface, и у меня нет проблем с его использованием в качестве наложения или чего-то еще - это на поверхностном контроле. Тем не менее, я озадачен получением данных о пикселях

1) Я пробовал все, что мог придумать (управление, корень и т. д.), чтобы использовать функции кэша рисования для получения битов для поверхности камеры. Ага, нет. Кэшированное растровое изображение всегда обнуляется.

2) Я успешно использовал как SurfaceView, так и GLSurfaceView в качестве тега setSurface. Я не могу использовать какой-либо другой класс, например TextureView.

3) Я исследовал C API и вижу, что камера выставляет connectOnFrameAvailable, что дает мне доступ к пикселям.

Я предполагаю, что внутренняя логика танго просто использует поверхность в java для получения доступа к базовому каналу передачи битов - в C API для этого требуется идентификатор текстуры, что заставляет меня подозревать, что в конце дня данные камеры поставляются в GPU довольно быстро, и я уверен, что CUDA lib работает на нем - учитывая положение вещей, я не вижу, как получить биты на стороне Java без рутирования устройства - просто потому, что у меня есть текстура или простой поверхностный рендеринг необработанных битов на экране не означает, что я могу добраться до них.

Я не хочу извлекать данные изображения из графического процессора. Для этого мне нужно переключить занятую анимацию с часов на календарь.

Прежде чем я углублюсь в API C, могу ли я каким-либо образом получить биты камеры в Java? Я очень хочу иметь возможность ассоциировать их с определенной позой, но сейчас я даже не могу понять, как их вообще получить. Я действительно хочу знать местоположение и цвет 3D-точки. Все, что мне нужно, это встроенные функции камеры, облако точек и 2D-изображение, создавшее облако точек. Но я ничего не могу сделать, если не могу получить пиксели, и чем более сомнительной будет связь между изображением и (позой и облаком точек), тем схематичнее будут любые попытки.

Если я углублюсь в C, даст ли мне connectOnFrameAvailable то, что мне нужно? Насколько хорошо это синхронизировано с генерацией облака точек? О, и я правильно понял? Цветная камера используется для глубины, рыбий глаз используется для позы?

Могу ли я смешать Java и C, т.е. создать экземпляр Tango на Java, а затем просто использовать C для проблемы с изображением? Или мне придется заново реализовать все на C и перестать использовать танго java jar?


person Mark Mullin    schedule 12.01.2015    source источник


Ответы (1)


  • даст ли мне connectOnFrameAvailable то, что мне нужно?

Да, он действительно возвращает байтовый буфер YUV.

  • Насколько хорошо это синхронизировано с генерацией облака точек?

Tango API сам по себе не обеспечивает синхронизацию между цветным изображением и облаком точек глубины, однако предоставляет отметку времени, позволяющую выполнять синхронизацию на уровне приложения.

  • Цветная камера используется для глубины, рыбий глаз используется для позы?

Да, ты прав.

  • Могу ли я смешивать Java и C (т. е. создать экземпляр Tango на Java, а затем просто использовать C для проблемы с изображением) Запуск двух экземпляров Tango на самом деле не поддерживается Tango, хотя это работает, это будет чрезвычайно хакерски.

В качестве временного обхода вы, вероятно, могли бы попробовать использовать кеш чертежей вида?

person xuguo    schedule 16.01.2015
comment
нет - я запустил этого щенка прямо в землю - я не могу получить биты на этом пути, если я не хочу рутировать устройство. Однако сейчас я работаю с C++. TangoService_connectOnFrameAvailable срабатывает регулярно. К сожалению, кажется, что когда он срабатывает, обновления изображения, которые происходят в результате подключения текстуры, прекращаются. Но, по крайней мере, я взялся за биты! - person Mark Mullin; 16.01.2015