Распознавание маркеров на Android (распознавание кубиков Рубика)

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

Одна вещь, в которой я не уверен, - это то, как именно я буду обнаруживать и распознавать цветные квадраты на каждой грани куба. Если вы посмотрите на кубик Рубика, то увидите, что каждый квадрат одного из шести возможных цветов с тонкой черной рамкой. Это заставило меня подумать, что относительно просто должно быть обнаружение квадрата, возможно, с использованием существующего API обнаружения маркеров.

Кубик Рубика

У меня вопрос, действительно ли кто-нибудь здесь имел опыт работы с распознаванием изображений и Android? В идеале я хотел бы иметь возможность реализовать существующий API, но было бы интересно создать проект с нуля, если бы кто-нибудь мог указать мне правильное направление для начала.

Спасибо заранее.


person greenie    schedule 05.03.2010    source источник
comment
Я не могу вам помочь, но я просто хочу сказать, что приложение, в котором я мог бы направить камеру на куб и получить пошаговые инструкции для его решения, было бы потрясающим. Удачи вам, и, пожалуйста, напишите здесь когда-нибудь в будущем, если у вас все заработает.   -  person Aric TenEyck    schedule 06.03.2010
comment
Это план :-) Большой проблемой будет, во-первых, заставить Android распознавать куб, а затем, после этого, я смогу поработать над тем, чтобы он помог вам найти решение. Публичная бета-версия будет опубликована в Android Market для отзывов пользователей (когда я думаю, что она находится на стадии бета-тестирования), и я заскочу и обновлю этот вопрос, чтобы вы, ребята, знали, что она уже готова для тестирования.   -  person greenie    schedule 06.03.2010
comment
К вашему сведению, встроенное изображение не работает. У вас есть копия, которую вы можете повторно загрузить?   -  person D.W.    schedule 09.12.2013
comment
@ D.W. Я исправил изображение. Это был просто кубик Рубика.   -  person greenie    schedule 03.01.2014


Ответы (5)


Вы хотите направить камеру на куб и дать ему понять конфигурацию?

Распознавание объектов на фотографиях - открытая проблема ИИ. Так что вам нужно немного ограничить проблему, чтобы получить хоть какую-то поддержку. Предлагаю начать с чего-нибудь вроде:

  1. Куб будет сфотографирован с расстояния ровно 12 дюймов с источником света мощностью 100 Вт прямо за камерой. Куб будет установлен по диагонали, так что он будет иметь ровно 3 грани с углом в центре. Камера будет расположена так, чтобы фокусироваться прямо на углу куба в центре.

  2. Будет сделан снимок. Затем куб будет повернут на 180 градусов по вертикали и горизонтали, чтобы были видны три другие грани. Будет сделан второй снимок. Поскольку вы точно знаете, где должно быть каждое лицо, возьмите несколько пикселей из каждой области и предположите, что это цвет этого квадрата. Помните, что куб обычно будет перемешанным, а не однородным, как показано на рисунке. Поэтому вам всегда нужно смотреть на 9 * 6 = 54 маленьких квадратика, чтобы получить цвет каждого из них.

  3. Информация на этих двух изображениях определяет конфигурацию куба. Создайте изображение куба в той же конфигурации и позвольте пользователю подтвердить или исправить его.

Было бы проще сделать 6 снимков - по одному каждого лица и перемещаться по лицам в четко определенном порядке. Помните, что центральный квадрат каждой грани не перемещается и определяет правильный цвет для этого лица.

Когда у вас есть конфигурация, вы можете использовать операции OpenGL для вращения срезов куба. Это будет программа с сотнями строк кода для определения и поворота куба, плюс все, что вы делаете для распознавания изображений.

person Peter vdL    schedule 09.03.2010
comment
Да, именно так я и представлял себе работу приложения. Я надеялся, что может существовать существующий API обнаружения маркеров, который я смогу реализовать (потому что каждый из маленьких кубиков на грани можно определить как маркер). Однако это отличный совет, если я не могу найти существующий API. - person greenie; 10.03.2010

В дополнение к тому, что сказал Питер, вероятно, лучше всего наложить направляющие линии на изображение куба, когда пользователь делает снимки. Затем пользователь выстраивает куб внутри направляющих линий, будь то одна сторона (квадратная направляющая линия) или три стороны (три квадрата в перспективе). Вы также можете попросить пользователя указать количество цветных прямоугольников в каждой строке. В своем коде возьмите образец цвета, который должен быть в центре каждого цветного прямоугольника, и сравните его с другими цветными прямоугольниками (в пределах некоторого уровня допуска), чтобы определить цвета. Помимо предоставления пользователю распознанных результатов, было бы неплохо позволить пользователю вносить изменения в распознанные цвета. Похоже, что необычное распознавание изображений не требуется.

person Garrett    schedule 15.06.2010

Хорошая идея, планирую использовать компьютерное зрение и детекторы маркеров, но для другого проекта. Я все еще ищу, есть ли какая-либо доступная информация в Интернете, например: привязка openCV или ARtoolkit к Android SDK. Если у вас есть дополнительная информация о том, как связать API компьютерного зрения, дайте мне знать.

До скорой встречи и удачи!

person Arturo    schedule 27.03.2010

NYARToolkit использует обнаружение маркеров и сделан на JAVA (а также на управляемом C # для устройств Windows). Я не знаю, насколько хорошо он работает на платформе Android, но я видел, как он используется на мобильных устройствах с Windows, и это очень хорошо сделано.

Удачи и удачного программирования!

person Tyler Kendrick    schedule 17.08.2010

Я бы посоветовал взглянуть на библиотеку Andoid OpenCV. Вероятно, вы захотите изучить алгоритмы обнаружения больших двоичных объектов. Вы также можете рассмотреть линии Хафа или счетчик для обнаружения квадов.

person Dave Durbin    schedule 22.03.2013