Создание шаблона и его детектирование

SokolKatya
beginner
beginner
Сообщения: 35
Зарегистрирован: 04 ноя 2018, 16:11
Версия LabVIEW: 2016
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение SokolKatya »

dadreamer писал(а):Но это очевидно - вы выкладываете программу, но не выложили ни исходное изображение, ни изображения шаблонов. Как нам понять, почему распознавание не работает?
На данном этапе работы пока все посредственно. Шаблоны создаются следующим образом - делается два снимка через вебкамеру с листа а4 (круг и квадрат соответственно). Потом этот же листок показывается камере дабы проверить работоспособность программы. Поэтому могу приложить только программу по созданию шаблонов :wink:
dadreamer писал(а): Да и вообще, Learn Multiple Geometric Patterns даже для оттенков серого - излишество, проще взять Setup Learn Geometric Pattern 2 -> Learn Geometric Pattern 2 -> Match Geometric Pattern 2 или аналогичную цепочку.
А разве они подходят для того, чтобы распознать сразу несколько объектов?
dadreamer писал(а):Кроме того, мы ещё не касались параметров, которые вы выставили для поиска шаблонов. Скорее всего, их придётся подстраивать, нужно смотреть, какие у вас получаются картинки.
В соответствии с чем выстраиваются эти параметры (угол поворота, масштаб)? Я вроде как приблизительно выставила, но признаюсь честно, не совсем понимаю, как это работает.
Пы.сы. указанные ошибки исправила, но увы...И да, можно ли использовать IMAQ Setup Match Geometric Pattern VI без IMAQ Learn Multiple Geometric Patterns VI?
Вложения
Cam(template)1.vi
(51.29 КБ) 151 скачивание
Cam(tamplate_find2).vi
(92.3 КБ) 171 скачивание
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение dadreamer »

SokolKatya писал(а):Шаблоны создаются следующим образом - делается два снимка через вебкамеру с листа а4 (круг и квадрат соответственно). Потом этот же листок показывается камере дабы проверить работоспособность программы. Поэтому могу приложить только программу по созданию шаблонов :wink:
Было бы замечательно, если бы сами изображения выложили. И то, на котором ищутся объекты, и те, что используются в качестве шаблона. Я, если честно, не совсем понял - круг/квадрат просто рисуется на листочке? Толщина границ объекта должна быть достаточной, скажем, пикселей 10 или более. При малой толщине границ не факт, что найдёт объект, "как ни крути".
SokolKatya писал(а):А разве они подходят для того, чтобы распознать сразу несколько объектов?
Позапускайте стандартные примеры. В Pattern Matching (All).vi можно выделить среднюю круглую площадку (их там 4) в качестве шаблона, задать Number of Matches Requested = 4 или более, и программа найдёт все 4 площадки. В Geometric Matching.vi даже объяснять ничего не надо, всё наглядно.
Просто нужно определиться, насколько важна геометрическая форма в вашем случае. Нужно обнаружить круг или квадрат, это все допустимые фигуры? Могут ли они встретиться одновременно или только либо круг(и), либо квадрат(ы)? Будет ли исходное изображение поворачиваться? Будет ли уменьшаться/увеличиваться? Если ответите на эти вопросы, можно будет окончательно определиться с инструментами.
SokolKatya писал(а):В соответствии с чем выстраиваются эти параметры (угол поворота, масштаб)? Я вроде как приблизительно выставила, но признаюсь честно, не совсем понимаю, как это работает.
С текущими условиями, в которых эти инструменты будут работать. Если нет поворота, то соответствующая опция отключается, угол = 0. Если небольшой поворот, то опция включается, угол может быть задан в пределах 10-15 градусов. Ну и так далее, это всё подбирается экспериментально. Но самыми важными я считаю Minimum Match Score и Number of Matches. Match Score задаёт степень соответствия (похожести) объекта на шаблон. Если Score = 1000, то объект должен быть идентичен шаблону, вплоть до 1 пикселя. При Score = 900 объект отличается весьма незначительно. Практически Minimum Match Score обычно лежит в пределах от 600-650 до 850-900. Точное значение также подбирается экспериментально. Если поставить, скажем, 300, то будет принимать посторонние объекты за искомые. Number of Matches - это количество запрашиваемых объектов (сколько требуется найти). Если поставить 1, то вернёт только первый найденный объект, даже если их там 10. Если поставить больше, то вернёт столько, сколько найдёт.
Чтобы лучше разобраться в этих параметрах, стоит поиграться в Vision Assistant. Там можно покрутить любой из параметров и понять, какие значения лучше всего вам подходят.
SokolKatya писал(а):Пы.сы. указанные ошибки исправила, но увы...И да, можно ли использовать IMAQ Setup Match Geometric Pattern VI без IMAQ Learn Multiple Geometric Patterns VI?
Зачем нужен Cast Image? 8-битную картинку преобразуете в 8-битную. В этом нет смысла. Setup -> Learn -> Match - стандартная связка для любого типа распознавания (тона серого, цвет, геометрия). Если выкинуть один :vi: , остальные не смогут работать. Обычно NI пишут в описании инструмента, какие :vi: должны быть использованы вместе с ним.
SokolKatya
beginner
beginner
Сообщения: 35
Зарегистрирован: 04 ноя 2018, 16:11
Версия LabVIEW: 2016
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение SokolKatya »

dadreamer писал(а):Было бы замечательно, если бы сами изображения выложили. И то, на котором ищутся объекты, и те, что используются в качестве шаблона. Я, если честно, не совсем понял - круг/квадрат просто рисуется на листочке? Толщина границ объекта должна быть достаточной, скажем, пикселей 10 или более. При малой толщине границ не факт, что найдёт объект, "как ни крути".
Изображения выложила и да, они рисуются на одном листе, после чего создаются шаблоны и т.д. Не знаю, насколько это правильно, но полагаю, что на начальном этапе почему бы мне не поучиться именно так. И я не уверена, что программа вообще ищет по шаблонам, так как ошибка возникает еще до (Error -1074395628 occurred at IMAQ Learn Multiple Geometric Patterns, рossible reason(s): IMAQ Vision: (Hex 0xBFF60614) Invalid geometric matching template image.). Что-то не устраивает эту функцию, а что, я понять не могу:buuh:
dadreamer писал(а):Просто нужно определиться, насколько важна геометрическая форма в вашем случае. Нужно обнаружить круг или квадрат, это все допустимые фигуры? Могут ли они встретиться одновременно или только либо круг(и), либо квадрат(ы)? Будет ли исходное изображение поворачиваться? Будет ли уменьшаться/увеличиваться? Если ответите на эти вопросы, можно будет окончательно определиться с инструментами.
Геометрическая форма важна. Происходит сортировка одновременно захваченных камерой объектов (пока это круги и квадраты). Разумеется они могут попасть в объектив под разными углами. Относительно масштаба - пока да, ведь я держу листочек перед вебкамерой, погрешностей в расстоянии не исключить.
Вложения
circle.png
circle.png (10.93 КБ) 6313 просмотров
square.png
square.png (10.04 КБ) 6313 просмотров
1.png
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Советы по программированию на LabVIEW

Сообщение IvanLis »

Если Вам нужно детектировать геометрические примитивы типа овала и прямоугольника, то используйте IMAQ Detect Shapes
http://zone.ni.com/reference/en-XX/help ... ct_shapes/

Вот пример детектирования круга на Вашем изображении, квадрат можно аналогично сделать.
Снимок экрана от 2019-01-28 22-12-33.png
Shape_Detect.vi
lv2015
(76.13 КБ) 137 скачиваний
Можно конечно сделать поиск по шаблону, но это "стрельба из пушки по воробьям".

Что касается ошибки, которая у Вас выскакивает. Почитайте, какой тип изображения можно использовать в качестве шаблона :crazy:
Он же Вам пишет
Invalid geometric matching template image
SokolKatya
beginner
beginner
Сообщения: 35
Зарегистрирован: 04 ноя 2018, 16:11
Версия LabVIEW: 2016
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение SokolKatya »

IvanLis писал(а):Если Вам нужно детектировать геометрические примитивы типа овала и прямоугольника, то используйте IMAQ Detect Shapes
http://zone.ni.com/reference/en-XX/help ... ct_shapes/
Благодарю за ответ, знаю эту функцию и знакома с ее работой. Но это не много не то что нужно, потому что в дальнейшем круги и квадраты заменят разного рода механические детали.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Советы по программированию на LabVIEW

Сообщение IvanLis »

SokolKatya писал(а):Благодарю за ответ, знаю эту функцию и знакома с ее работой. Но это не много не то что нужно, потому что в дальнейшем круги и квадраты заменят разного рода механические детали.
Изучите примеры, которые находятся в папке ...\LabVIEW ...\examples\Vision\Pattern Matching
И сделайте их базе.
Единственная рекомендация, это предварительная обработка изображения, для уменьшения ошибки детектирования.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение dadreamer »

SokolKatya писал(а):И я не уверена, что программа вообще ищет по шаблонам, так как ошибка возникает еще до (Error -1074395628 occurred at IMAQ Learn Multiple Geometric Patterns, рossible reason(s): IMAQ Vision: (Hex 0xBFF60614) Invalid geometric matching template image.). Что-то не устраивает эту функцию, а что, я понять не могу:buuh:
Эта ошибка также может говорить о том, что в шаблоне нет данных Vision Info или они не полные (например, не хватает описаний доп. параметров для Advanced Matching) или они не совместимы с текущими инструментами (например, шаблон создан для Feature Based сопоставления, но используется с :vi: для Edge Based сопоставления). Шаблон нужно грамотно создать в Vision Assistant, выставив все необходимые параметры, включая тип сопоставления и параметры сопоставления, такие как диапазон расхождения угла поворота, коэффициента масштабирования и прочие. Судя по тому, что вам важны сразу несколько геометрических параметров, нужно использовать Feature Based VIs - те, что с иконкой в виде "полумесяца" (а не в виде пинцета):
Изображение
Создайте в Vision Assistant шаблоны, там же проверьте их на тестовых изображениях. После этого в Assistant сгенерируйте код :labview: - должен открыться новый :vi: с готовым кодом для распознавания. Сразу же запустите его, он должен работать и находить объекты. Если работает, можно уже дальше "причёсывать". Не торопитесь пока с Match Multiple Geometric Patterns, попробуйте найти хотя бы по одному шаблону через Match Geometric Pattern.

Я бы подсказал более детально по шагам, но у меня какой-то косяк с VDM 2018. Уже и SP1 накатил, но бесполезно. В опциях выбираю Geometric Matching:
2019-01-29_20-49-57.jpg
Заново создаю шаблон для распознавания - и приплыли:
2019-01-29_20-52-03.jpg
То ли баг, то ли что, надо разбираться. Изображение
SokolKatya
beginner
beginner
Сообщения: 35
Зарегистрирован: 04 ноя 2018, 16:11
Версия LabVIEW: 2016
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение SokolKatya »

В общем и целом что у меня получилось:
Создала шаблон в Vision Assistan с указанием необходимых параметров. Потом прогнала серию изображений с этим шаблоном через Vision Asquisition в программе - работает.
Заменила Vision Asquisition на IMAQ - работает (вроде как).

НО(!) в процессе создания программы я использовала сначала (IMAQ Setup Match Geometric Pattern 2 VI, IMAQ Learn Geometric Pattern 2 VI и IMAQ Match Geometric Pattern 2 VI) и у меня снова появлялась старая ошибка (о том, что шаблон инвалид :crazy: ) и еще одна, когда не появлялась предыдущая (-1074396120-Not an image, точное значение ошибки так и не поняла, в интернете пишут что явно что-то не так с форматом файла, либо с указанием путей к файлу). Решила (если можно так выразиться) я эту проблему тем, что убрала из алгоритма IMAQ Learn Geometric Pattern 2 VI и надо же, заработало.

Пожалуйста, объясните мне, почему не происходило обработки изображения, когда был IMAQ Learn Geometric Pattern 2 VI или он там был и не нужен?! И вообще, правильно ли я все сделала?

Программу и изображения загрузила :wink:
Вложения
1.png
sq1.png
sq1.png (284.41 КБ) 6059 просмотров
Matching.vi
(59.36 КБ) 118 скачиваний
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение dadreamer »

SokolKatya писал(а):я использовала сначала (IMAQ Setup Match Geometric Pattern 2 VI, IMAQ Learn Geometric Pattern 2 VI и IMAQ Match Geometric Pattern 2 VI) и у меня снова появлялась старая ошибка (о том, что шаблон инвалид :crazy: )
А почему, интересно, вы использовали именно такой набор инструментов? Изображение Сейчас сделано нормально, улучшать там особо нечего. Осталось только проверить работу с несколькими шаблонами (Multiple). Однако хотелось бы обратить внимание. У вас сейчас используется пара IMAQ Setup Match Geometric Pattern 2 VI -> IMAQ Match Geometric Pattern 2 VI:
Matching_BD.png
Но вполне можно сделать и вот так: IMAQ Setup Learn Geometric Pattern 2 VI -> IMAQ Advanced Setup Learn Geometric Pattern 2 VI -> IMAQ Learn Geometric Pattern 2 VI -> IMAQ Match Geometric Pattern 2 VI
Matching2_BD.png
Видите различия? В вашем варианте используется инфа из шаблона (IMAQ Read Image And Vision Info VI), записанная туда ассистентом, во втором шаблон тренируется-обучается заново и в него записываются новые параметры:
IMAQ Learn Geometric Pattern 2 VI

Creates a description of the template image for which you want to search during the matching phase. This description data is appended to the input template image. During the matching phase, the description data is extracted from the template image and used to search for the template in the inspection image.
По функционалу варианты равноценные. Просто в первом случае приходится использовать ассистент, а во втором этого можно избежать (но диаграмма становится менее компактной). Также, я думаю, вы обратили внимание на Setup-строки (розовый провод). У вас используется строка типа Match Geometric Pattern 2 Setup Data, в примере 2 используется строка типа Learn Geometric Pattern 2 Setup Data. Это разные типы, между собой они не совместимы.
Интересная особенность: хотя я и задал интервал разбега угла в -10..10, инструмент его не принимает, а принимает только -180..180 и -360..360. Но этот интервал можно и вовсе не задавать, инструмент по дефолту находит повёрнутые объекты. Масштабирование также подключено "из коробки". Как итог, можно оставить только пару IMAQ Learn Geometric Pattern 2 VI -> IMAQ Match Geometric Pattern 2 VI.
Matching3_BD.png
2019-02-02_23-50-21.jpg
Ну, и в качестве обучения можете попробовать реализовать ту же задачу на Feature Based :vi: (сейчас у вас Edge Based, см. иконки). Может быть, они вам лучше подойдут.
Differences Between Geometric Matching and Pattern Matching
difference between feature and edge based geometric matching
NI Vision 2010 Concepts Help: Geometric Matching Technique
SokolKatya писал(а):-1074396120-Not an image, точное значение ошибки так и не поняла, в интернете пишут что явно что-то не так с форматом файла, либо с указанием путей к файлу
Not An Image - недействительная картинка, т.е. пустая ссылка. Иными словами, картинка была уничтожена раньше, чем началась обработка. Легко проиллюстрировать так: удалите цикл While, всё остальное оставьте. Исходное изображение одновременно пойдёт на IMAQ Match Geometric Pattern 2 VI и на IMAQ Dispose VI, причём Dispose выполнится довольно быстро, а IMAQ Match Geometric Pattern 2 VI может даже ещё не начать работать. Когда до него дойдёт IMAQ-ссылка, она будет пустой и нечего будет обрабатывать. Поэтому :labview: выдаст соответствующую ошибку. Вам советую пока убрать везде IMAQ Dispose на время разработки. Вставите потом, как программа будет целиком работоспособна. Я, если честно, в своих программах Dispose использую только для временных картинок (фильтр какой-нибудь, скейлинг или прочее). Для тех картинок, что выведены на панель, Dispose не делаю. Часто нужно бывает видеть изображение после остановки программы - галка Snapshot может быть снята, так что... Да и имя-константа на БД обеспечивает перезапись того же блока памяти при следующем запуске - в этом плане IMAQ-ссылка выступает в роли указателя на статическую структуру. У вас, кстати, там один Dispose лишний - посмотрите внимательней :wink: Одна и та же ссылка удаляется дважды. Отсюда и ошибка.
SokolKatya писал(а):Пожалуйста, объясните мне, почему не происходило обработки изображения, когда был IMAQ Learn Geometric Pattern 2 VI или он там был и не нужен?! И вообще, правильно ли я все сделала?
Либо IMAQ Setup Match Geometric Pattern 2 VI, либо IMAQ Setup Learn Geometric Pattern 2 VI (+ IMAQ Advanced Setup Learn Geometric Pattern 2 VI) + IMAQ Learn Geometric Pattern 2 VI. Вместе их использовать не получится, т.к. в шаблоне уже записаны данные Vision Info, а мы по сути их перезапишем другими данными. Что выбирать - сами смотрите. Если шаблоны не будут часто меняться, то можно их создать один раз в ассистенте и дальше просто грузить в основную программу. Если шаблоны будут часто меняться, то лучше работать с ними динамически.
SokolKatya
beginner
beginner
Сообщения: 35
Зарегистрирован: 04 ноя 2018, 16:11
Версия LabVIEW: 2016
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение SokolKatya »

dadreamer писал(а):Ну, и в качестве обучения можете попробовать реализовать ту же задачу на Feature Based :vi: (сейчас у вас Edge Based, см. иконки). Может быть, они вам лучше подойдут.
А если я хочу реализовать второй вариант с двумя шаблонами (самообучение), мне также использовать IMAQ Setup Learn Geometric Pattern VI и IMAQ Advanced Setup Learn Geometric Pattern VI, и еще IMAQ Learn Multiple Geometric Patterns VI и IMAQ Match Multiple Geometric Patterns VI?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение dadreamer »

SokolKatya писал(а):
dadreamer писал(а):Ну, и в качестве обучения можете попробовать реализовать ту же задачу на Feature Based :vi: (сейчас у вас Edge Based, см. иконки). Может быть, они вам лучше подойдут.
А если я хочу реализовать второй вариант с двумя шаблонами (самообучение), мне также использовать IMAQ Setup Learn Geometric Pattern VI и IMAQ Advanced Setup Learn Geometric Pattern VI, и еще IMAQ Learn Multiple Geometric Patterns VI и IMAQ Match Multiple Geometric Patterns VI?
В простейшем случае как-то так.
Вложения
Multiple_Match.png
2019-02-14_17-52-25.jpg
1 rotated.png
sq1.png
sq1.png (284.41 КБ) 5759 просмотров
tr1.png
tr1.png (10.17 КБ) 5759 просмотров
SokolKatya
beginner
beginner
Сообщения: 35
Зарегистрирован: 04 ноя 2018, 16:11
Версия LabVIEW: 2016
Контактная информация:

Re: Создание шаблона и его детектирование

Сообщение SokolKatya »

Всем добрый вечер, в который раз)
Хотела снова спросить совета: могу ли я совместить свою программу сортировки с одновременным контролем размера (на основе примера Contour defect inspection)? Понятно что можно, вот только как это будет происходить в real-time видео-потоке- что следует учесть при извлечении контура (скажем пока это квадрат), как задать ROI и вообще на что следует обратить внимание?????
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Создание шаблона и его детектирование

Сообщение Blackman »

Real-time ball bearing sorting

Дата публикации 2006 :wink:
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Создание шаблона и его детектирование

Сообщение dadreamer »

SokolKatya, сами спросили, сами ответили. :) Пробуйте, экспериментируйте. Если что-то не будет получаться, тогда и спросите или, может, сами сможете поправить.
SokolKatya писал(а):как это будет происходить в real-time видео-потоке
Я уже советовал в этой же теме:
dadreamer писал(а):Только всю обработку я бы в отдельный цикл вынес, чтоб не увеличивать время на итерацию получения данных.
Выполнять в одном цикле и получение данных с видеокамеры и последующую обработку не есть хорошо. Чем дольше будет выполняться обработка, тем реже программа будет читать видеокадры. Получится уже далеко не real-time (хотя даже 25 к/сек - это не real-time, но достаточно для нормального восприятия человеком).
SokolKatya писал(а):как задать ROI
Как больше хочется, так и задавайте. :wink: Можно выделить на картинке область с помощью инструментов на панели рядом, потом вызвать Property Node ROI, и в зависимости от геометрического типа ROI (прямоугольник, круг и т.д.) применить IMAQ Convert ROI to ... . Можно чуть более интерактивно с помощью IMAQ ConstructROI. Можно просто кластер кинуть на ФП и на этом остановиться. Смотрите по ситуации.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Vision / IMAQ»