Добавление отслеживания ARToolkit Marker в Tango

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

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

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

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

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

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

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


person Jethro    schedule 30.01.2017    source источник
comment
Удалось получить данные изображения из Tango с помощью ITangoVideoOverlay и отправить их в ARToolkit, передав их в действие, а затем вниз через вызов JNI (прямой вызов библиотеки из C# был недоступен). Мне нужно решить, как переключаться между форматом, который предоставляет танго, и форматом, который принимает ARToolkit.   -  person Jethro    schedule 01.02.2017


Ответы (2)


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

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

person xuguo    schedule 31.01.2017
comment
Спасибо! Я изучу больше и рассмотрю предложение разделить позу / отслеживание и рендеринг. Я обновил вопрос с идеей получить данные изображения в библиотеке NDK ARToolkit, если вы можете сообщить мне, звучит ли это осуществимо или я трачу свое время впустую, я был бы очень благодарен! - person Jethro; 01.02.2017

В этом блоге показан пример интегрируя два.

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

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

person Jethro    schedule 06.02.2017