2014-09-05 4 views
1

. Предоставляя решения SCADA, мы часто получаем спецификации наших конечных пользователей, указанные в Структурной диаграмме управления (см. Диаграммы, описанные ниже), которые часто представлены в формате PDF или в виде изображений.. Распознавание форм visio в изображении.

Чтобы получить доступ к ним на C#, я надеялся использовать одну из библиотек OpenCV.

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

Библиотеки, на которые я смотрел, имеют некоторые функции polyedge. Однако, как видно из приведенного ниже примера, существует опасность того, что система будет обрабатывать все это как один большой многоугольник, если между элементами нет никакого расстояния.

Аннотации могут быть любыми 90-градусным вращением, и я бы как идентифицировать их, а также содержимое прямоугольников с помощью OCR.

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

Обновление: Это пример того типа изображения, о котором я говорю. SCD drawing example

Проблема к адресу является:

  • Идентификация красных прямоугольников с текстом в ячейках (OCR).
  • Идентификация стрелки, включая аннотации направлений и конечных точек. Тип линии, если это возможно.
  • Шаблон соответствия компонентов.
  • Возврат к некоторому объекту полилинии или что-то в случае несоответствия шаблона.
+0

** Хорошо, что вы пробовали до сих пор? ** Мы не можем вам помочь, если вы не покажете, что вы сделали, и опишите проблему, с которой вы столкнулись. Дело в том, что вопрос не связан с программированием. Это действительно не так. Вам необходимо проконсультироваться с экспертом по компьютерному зрению/обработке изображений. Извините, это не пустая проблема. Я могу придумать несколько решений, но я до сих пор не знаю, как лучше работать. На этот раз я скорее останусь наедине с собой, но это просто вопрос Google/Bing, сделайте некоторые исследования по этому вопросу, и у вас появятся некоторые идеи о том, как его решить. В самом деле! – karlphillip

+0

Это также хорошее время для [** совершить компьютерное видение **] (http://area51.stackexchange.com/proposals/66531/computer-vision?referrer=jiRHFaYYF95AXOBQ42MWrg2), новое предложение StackExchange. Такой вопрос может быть велик. – karlphillip

+0

@ karlphillip Поле зрения компьютера велико (я принял предложение SE). Существует много субдисциплины, которые кажутся возможными, но где я вижу непосредственные концептуальные проблемы, которые, как я чувствую, очевидны при рассмотрении образца. Если бы был форум по компьютерному видению, я бы, конечно же, потратил время на исследования и вопросы. Этот вопрос скорее касается того, чтобы найти правильные вещи, а не как правильно делать вещи. Вы на самом деле пытались найти его? Вы будете удивлены, как мало. – Tormod

ответ

2

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

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

Идентификация красных прямоугольников с текстами в ячейках (OCR).

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

Шаблон соответствия компонентов.

Большинство алгоритмов сопоставления шаблонов чувствительны к масштабам, а инвариантные по шкале очень сложны, поэтому я не думаю, что вы получаете очень точные результаты, используя простые алгоритмы сопоставления шаблонов, если ваши документы различаются по масштабу и размеру.

и ваши фигурные фигуры очень похожи и редки, чтобы получить хорошие результаты и уникальные функции от таких алгоритмов, как SIFT и SURF.

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

есть много статей о контурном анализе на сеть, я предлагаю вам взглянуть на них, они дадут вам ключ к тому, как вы можете использовать контуры для определения простых и сложных форм:

http://www.emgu.com/wiki/index.php/Shape_%28Triangle,_Rectangle,_Circle,_Line%29_Detection_in_CSharp

http://www.codeproject.com/Articles/196168/Contour-Analysis-for-Image-Recognition-in-C

http://opencv-code.com/tutorials/detecting-simple-shapes-in-an-image/

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html

по пути переноса кода на C# с использованием EmguCV тривиально, так что не беспокойтесь об этом

Идентификация стрелки , включая аннотации направлений и конечных точек. Тип линии, если это возможно.

Существует несколько способов определения сегментов линии (например, преобразование Hough Transform), основной проблемой в этой части являются другие компоненты, поскольку они обычно обнаруживаются как линии, поэтому, если мы сначала найдем компоненты и удалим их из документа, линий было бы намного проще и с гораздо менее ложными обнаружениями.

подход

1- слоя документы, основанные на разных цветов, и выполнить следующие фазы на каждом требуемом слое.

2- Обнаружение и извлечение текста с помощью OCR, затем удаление текстовых областей и воссоздание документа без текстов.

3-Detect Компоненты, основанные на анализе контуров и собранной базе данных компонентов, затем удаляют обнаруженные компоненты (как известные, так и неизвестные типы, поскольку неизвестные формы увеличивают ваше ложное обнаружение в следующих фазах) и воссоздают документ без компонентов, в этот момент в случае хорошего обнаружения мы должны иметь только линии

4-Detect линии

5-в этот момент вы можете создать логический граф из извлеченных компонентов, линий и меток на основе обнаруженной позиции

Надежда это Помогает

+0

Это было полезно. Благодарю. Любое предположение о том, как простые формы могут быть извлечены из чертежа для распознавания контуров? Подход, похоже, уязвим к тому, что между фигурами и стрелками нет места, поэтому форма полилинии со связанными стрелками будет подвержена опасности быть принятой алгоритмом как единая форма. – Tormod

+0

Существуют различные типы приближений контура, которые, я считаю, в этом случае, с использованием простой аппроксимации (в OpenCV 'CHAIN_APPROX_SIMPLE') будут удалять избыточные точки (например, точки на прямой линии) и сжимать контур (посмотрите на последний показатель http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html), используя только точки на критических частях, вы можете сравнить ранее выделенные точки относительно позиций от желаемых компонентов против ваши сформированные области контура из предоставленного документа. – user3473830

+0

, делая это только вопрос соответствия нужных точек в области контура, которые могут иметь больше точек в случае столкновения или связанных фигур, в таких ситуациях мы обычно находим больше компонентов в области контура. Надеюсь, это поможет – user3473830

1

Я не могу дать вам решения по всем вашим четырем вопросам, но первый вопрос Identification of the red rectangles with texts in cells (OCR) звучит не очень сложно. Вот мое решение этого вопроса:

Шаг 1: Разделите цветное изображение на 3 слоя: красный, синий и зеленый, и используйте только красный слой для следующих операций.

Шаг 2: бинаризация красного слоя.

Шаг 3: подключен компонентный анализ результатов бинаризации, и держать статику каждого подключенного компонента (ширина сгустка, высота сгустка, например)

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

Шаг 5: выполнить OCR по текстурным компонентам. При выполнении OCR каждый blob даст вам уровень достоверности, и это можно использовать для проверки того, является ли он текстовым компонентом или нет.

+0

О, прошу прощения за путаницу. Я сказал «красный цвет», потому что они были красными во встроенном изображении. Они не могут быть красными на изображениях, которые это программное обеспечение должно обрабатывать. – Tormod