Способен ли ARToolkit для Android распознавать маркер на изображении, а не на видео?

Я только начинаю изучать ARToolkit для Android, и примеры, которые я видел, зависят от идентификации маркера в видеопотоке с камеры устройства.

Есть ли примеры, где вместо этого можно использовать изображение (например, обычный файл JPG, содержащий двухмерный маркер штрих-кода)? Или есть способы приостановить видеопоток или захватить один кадр, когда маркер находится в поле зрения?

Я понимаю, что это может показаться странным, но меня интересует конкретный вариант использования.


person David    schedule 29.10.2015    source источник
comment
ARToolkit довольно устарел и хотел бы направить вас на www.metaio.com. Однако они, кажется, в настоящее время не открыты для новых подписок ... Но, чтобы ответить на ваш вопрос (я думаю), ARToolkit не волнует, напечатана ли полоса на бумаге, отображается на экране или как часть видео, до тех пор, пока она способен распознать известную закономерность. Наибольшая трудность заключается в воздействии грозовых условий. В отдаленном темном месте у приложения возникнут проблемы с определением маркера.   -  person cYrixmorten    schedule 30.10.2015


Ответы (3)


На всех платформах кроме Android вы можете использовать модуль видеоввода «изображение». Это альтернативный модуль захвата видео, который просто перебирает одно или несколько изображений JPEG. Вы запрашиваете этот видеомодуль, изменяя строку конфигурации видео примерно так:

-device=Image -image="/path/to/image0.jpeg" -image="/path/to/image1.jpeg"

На Android одной из возможных альтернатив, если вы создаете приложение Java ARToolKit для Android, является загрузка изображения самостоятельно в среде Java и отправка этого изображения в собственные процедуры отслеживания вместо отправки изображения из потока камеры. Простейшее место для перехвата отправки изображения — это метод convertAndDetect() ARBaseLib/src/org/artoolkit/ar/base/ARToolKit.java. Параметр 'frame' для arwAcceptVideoImage является указателем на видеокадр, закодированный в NV12.

Если вы используете ARToolKit для Unity на Android, применим тот же совет, только расположение вызова arwAcceptVideoImage отличается. Вместо этого он находится в классах UnityARPlayer в файле org/artoolkit/ar/unity/CameraSurface в методе onPreviewFrame.

Извините, я не могу посоветовать более простой метод... ARToolKit для Android на самом деле не структурирован для большей гибкости в источнике видеопотока.

person bleater    schedule 31.10.2015

Да, я сделал это.

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

Итак, что вы можете сделать, это прочитать изображение как растровое изображение и изменить его на массив того же формата (как захваченный кадр) и ввести этот массив как для рендеринга, так и для обнаружения.

Если вы хотите приостановить видео на одном кадре, вы можете просто скопировать этот экземпляр массива входных изображений, а затем непрерывно передавать только этот массив как для рендеринга, так и для обнаружения.

person Pikanshu Kumar    schedule 14.05.2016

или перехватите cameraPreviewFrame(final byte[] data) и загрузите массив данных с растровым изображением в правильном формате.

person oliver    schedule 10.04.2017