Добавление отслеживания маркеров ARToolkit в Tango

Я пытался интегрировать отслеживание объектов- маркеров ARToolkit в приложение Tango.

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

Как вы могли бы передать один и тот же видео-канал Android обеим библиотекам?

  • Не могли бы вы создать фиктивное устройство камеры, которое удваивает подачу?
  • Не могли бы вы взять танго-канал как обычно, а затем отправить его в ARToolkit с помощью специального VideoConf?

[редактировать]
ARToolkit использует более старый API Camera1, принимает обратный вызов onPreviewFrame() и передает эти данные byte[] в свой собственный вызов Native Library, который выполняет реальную работу.

В дополнение ко второму пункту, может ли Tango предоставить копию каждого кадра необработанных данных камеры, используя что-то вроде iTangoVideoOverlay.
(Похоже, что функциональность ARToolkits NDK ожидает NV21, но может принимать и другие форматы)

Если бы эти данные были извлечены из танго, я считаю, что функциональность ARToolkit NDK может использоваться без фактического владения камерой.

2 ответа

Решение

Этот блог показывает пример интеграции двух.

Он также ссылается на пример исходного кода, но я не привел его в порядок после тестирования - действуйте с осторожностью!

Вы не можете передать один и тот же источник камеры в обе библиотеки (первая точка маркера), но вы можете переслать канал камеры из Tango ( ITangoVideoOverlay) в ARToolkit ([AcceptVideoImage][2]) (вторая точка маркера).
Это не идеально, потому что отправлять данные в Java из C# довольно неэффективно. Phab 2 Pro должен уменьшать частоту видео X4 для достижения достойной частоты кадров.
Лучший ответ - заменить вызовы AndroidJavaClass трубами / сокетами. Также есть много маленьких проблем - это довольно хакерский обходной путь.

Боюсь, что ни один из упомянутых вами методов не сработает. Tango имеет эксклюзивный доступ к камере, и я считаю, что ARToolkit также занимает камеру исключительно через camera2 API. В нынешнем TangoSDK я думаю, что в качестве обходного пути будет использоваться ARToolkit для рендеринга камеры и Tango для отслеживания позы.

Тем не менее, это может привести к проблеме с отметкой времени, так как Tango и ARToolkit имеют разные временные метки. Решение этой проблемы состоит в том, чтобы взять смещение временной метки в самом начале, когда приложение запускается, и постоянно применять это смещение при запросе позы от Tango на основе временной метки.

Другие вопросы по тегам