8

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

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

Rubik's Cube

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

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

+0

Я не могу вам помочь, но я просто хочу сказать, что приложение, в котором я мог бы указывать камеру на кубе, и получить пошаговые инструкции для его решения, будет * удивительным *. Удачи вам, и, пожалуйста, отправьте сюда когда-нибудь в будущем, если вы заработаете. –

+0

Это план :-) Большая проблема, во-первых, будет заключаться в том, чтобы Android распознал куб, а затем после этого я могу работать над тем, чтобы заставить вас пройти через решение. Публичная бета-версия будет опубликована в Android Market для отзывов пользователей (когда я думаю, что это на стадии бета-тестирования), и я заберусь и обнов этот вопрос, чтобы вы, ребята, знали, что это там для тестирования. – greenie

+0

FYI, встроенное изображение нарушено. У вас есть копия, которую вы можете повторно загрузить? –

ответ

5

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

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

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

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

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

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

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

+0

Да, это то, как я предусмотрел приложение для работы. Я надеялся, что может существовать существующий API обнаружения маркеров, который я мог бы реализовать (поскольку каждый из маленьких кубов на лице может быть определен как маркер). Однако это отличный совет, если я не могу найти существующий API. – greenie

0

Этот question может дать вам несколько советов о том, как использовать opencv на Android. Но я не знаю, требует ли пользователь устанавливать некоторые сложные дополнительные библиотеки.

0

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

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

1

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

0

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

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

0

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

Смежные вопросы