Мы на пути к полному отсутствию маркеров на бумаге, где любой штрих пользователя будет восприниматься как маркер. А пока мы добились более качественного распознавания и привязки — например, если закрыть три из четырёх маркеров, наш алгоритм предположит, где они должны находиться, сохраняя и удерживая виртуальное изображение на месте. И даже если часть маркеров выходит за пределы кадра — изображение всё равно останется на месте! Мы называем этот метод «предсказание маркеров».
Как это работает?
Мы определяем положение маркера в кадре, и когда маркер теряется, наш алгоритм предполагает его местоположение, сопоставляя с положением на предыдущем кадре. Например, если на предыдущем кадре нижний левый маркер был найден в координате 100 x 100, то ближайший найденный на этом кадре маркер — это и есть нижний левый.
Мы успешно протестировали три случая: когда терялся один, два или три маркера. Если теряются все четыре маркера — предсказать пока не получается. Так что на данный момент алгоритму нужно распознать хотя бы один маркер.

Чем больше маркеров обнаружено, тем точнее предсказание:
- Когда найдены три маркера, камеру можно перемещать в довольно широком диапазоне, а также смещать относительно листа и масштабировать.
Сначала мы обнаруживаем один маркер, затем привязываем его к маркеру с предыдущего кадра (например, понимаем, что это нижняя левая метка). Мы смотрим, как маркер сместился с предыдущего кадра на текущий, и просто перемещаем весь скетч. Мы считаем, что движение линейно, и делаем предсказание с очень небольшой точностью, но этого достаточно, если камера смещается немного.
- Когда обнаружены два маркера, смещение будет заметно при любом движении камеры.
- А если найден только один маркер — смещение камеры на пару сантиметров уже приводит к заметным проблемам.
Этот метод — наша небольшая технологическая победа, которая значительно улучшит пользовательский опыт.
Обновите iOS-версию SketchAR, чтобы увидеть разницу!

