2012-05-24 3 views
1

Я хотел бы сделать что-то, что способно распознавать различные объекты на экране. Допустим, я сделал снимок экрана в окне с текстовыми полями, надписями и кнопками. Я хотел бы передать изображение, и он должен уметь отличать один от другого. Другими словами, он должен помещать имя «текстовое поле» поверх позиции, где расположены текстовые поля, «кнопка» поверх кнопок и «метка» поверх надписей.Как распознавать/идентифицировать различные типы объектов (текстовые поля, метки, кнопки и т. Д.) На экране/со скриншотов?

Вот пример изображения из Интернета, чтобы визуализировать «окно регистрации»: http://kb.parallels.com/Attachments/12828/Images/registration1.jpg

Я хотел бы сделать это в Java, но я не уверен, если это вообще возможно. У кого-нибудь есть идеи, с которых я должен начать искать? Обнаружение кромок? Обнаружение функции? OCR/ICR?

Это уже существует? Кто-нибудь когда-либо сталкивался с чем-то подобным раньше?

Может ли кто-нибудь указать мне в правильном направлении? Я был бы очень признателен.

Спасибо! :)

+0

То, что вы ищете, не просто. Предполагаете ли вы, что все объекты всегда можно разделить друг с другом? Могут быть случаи, когда пользовательский блок редактирования может выглядеть как текстовое поле и т. Д. :::: В любом случае, если вы решите следовать этому пути, выполните поиск слова «сегментация», связанного с обработкой изображений. Вы должны найти много информации, но не уверены, что найдете алгоритм с полки. – ilomambo

+0

Спасибо за эту информацию, ilomambo, я знаю, что это будет нелегко сделать, но я готов сделать свое исследование и придумать что-то. Пока я нацелен на стандартные элементы управления/объекты Windows. Я собираюсь сделать что-то, что может «учиться» (используя нейронные сети) и улучшаться с течением времени. Я просто не знаю, с чего начать. Я обязательно посмотрю на сегментацию, спасибо! –

+0

Кроме того, подход грубой силы - это корреляция между базовым образцом и целевым изображением. :::: Целевой объект может быть: сдвиг, масштабирование, поворот или любая их комбинация. :::: Таким образом, если вы знаете, что сложность корреляции изображений O (n^4) JUST FOR ONE PASS, вы завершите себя, сколько вычислений потребуется для масштабирования, сдвига, поворота ко всем возможным сценариям. – ilomambo

ответ

0

Это, как я буду работать на нем:

A) Идентификация/сегментация. Не зная ваших данных, вы можете быть в порядке с чем-то вроде «Найти прямоугольник (или что-то близкое к нему, поскольку края округлены) меньше половины области ваших окон» (зависит от ваших данных ..).

B) Классификация. Лично я масштабировал каждый найденный объект размером 100 * 100 (или, что бы то ни было) и сравнивал его с образцами данных (да, вы можете масштабировать мини-флажок до этого размера. Это не будет выглядеть красиво, но это не так, Неважно, как это выглядит.). Либо «грубая сила» (именно поэтому я масштабируюсь), либо какой-то хороший алгоритм классификации. (Не используйте нейронные сети, перейдите к SVM или ближайшему соседу). Для классификации я в основном рассматривал гистограммы и факторы формы/моменты внутри прямоугольника. Если текст смущает данные, избавитесь от него с некоторой морфологией перед классификацией.

Текстовые поля немного сложны, но для этого я бы использовал некоторую библиотеку OCR и посмотрел на всю картину. (Лично я хорошо поработал с IMAQ, но это коммерческий). Если текст находится за пределами поля, у вас есть ярлык.

Возможно, вам стоит взглянуть на OpenCV.

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