Распознавание маркеров на Android (распознавание кубиков Рубика) - PullRequest
8 голосов
/ 06 марта 2010

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

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

Rubik's Cube

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

Большое спасибо заранее.

Ответы [ 5 ]

5 голосов
/ 10 марта 2010

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

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

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

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

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

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

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

1 голос
/ 16 июня 2010

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

0 голосов
/ 22 марта 2013

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

0 голосов
/ 17 августа 2010

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

Удачи и счастливого программирования!

0 голосов
/ 27 марта 2010

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

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

...