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

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

Postby SokolKatya on 25 Jan 2019, 16:23

dadreamer wrote:Но это очевидно - вы выкладываете программу, но не выложили ни исходное изображение, ни изображения шаблонов. Как нам понять, почему распознавание не работает?

На данном этапе работы пока все посредственно. Шаблоны создаются следующим образом - делается два снимка через вебкамеру с листа а4 (круг и квадрат соответственно). Потом этот же листок показывается камере дабы проверить работоспособность программы. Поэтому могу приложить только программу по созданию шаблонов :wink:
dadreamer wrote: Да и вообще, Learn Multiple Geometric Patterns даже для оттенков серого - излишество, проще взять Setup Learn Geometric Pattern 2 -> Learn Geometric Pattern 2 -> Match Geometric Pattern 2 или аналогичную цепочку.

А разве они подходят для того, чтобы распознать сразу несколько объектов?
dadreamer wrote:Кроме того, мы ещё не касались параметров, которые вы выставили для поиска шаблонов. Скорее всего, их придётся подстраивать, нужно смотреть, какие у вас получаются картинки.

В соответствии с чем выстраиваются эти параметры (угол поворота, масштаб)? Я вроде как приблизительно выставила, но признаюсь честно, не совсем понимаю, как это работает.
Пы.сы. указанные ошибки исправила, но увы...И да, можно ли использовать IMAQ Setup Match Geometric Pattern VI без IMAQ Learn Multiple Geometric Patterns VI?
Attachments
Cam(template)1.vi
(51.29 KiB) Downloaded 20 times
Cam(tamplate_find2).vi
(92.3 KiB) Downloaded 23 times
SokolKatya
beginner
beginner
 
Posts: 19
Joined: 04 Nov 2018, 16:11
LabVIEW Version: 2016
Karma: 0

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

Postby dadreamer on 25 Jan 2019, 17:07

SokolKatya wrote:Шаблоны создаются следующим образом - делается два снимка через вебкамеру с листа а4 (круг и квадрат соответственно). Потом этот же листок показывается камере дабы проверить работоспособность программы. Поэтому могу приложить только программу по созданию шаблонов :wink:

Было бы замечательно, если бы сами изображения выложили. И то, на котором ищутся объекты, и те, что используются в качестве шаблона. Я, если честно, не совсем понял - круг/квадрат просто рисуется на листочке? Толщина границ объекта должна быть достаточной, скажем, пикселей 10 или более. При малой толщине границ не факт, что найдёт объект, "как ни крути".
SokolKatya wrote:А разве они подходят для того, чтобы распознать сразу несколько объектов?

Позапускайте стандартные примеры. В Pattern Matching (All).vi можно выделить среднюю круглую площадку (их там 4) в качестве шаблона, задать Number of Matches Requested = 4 или более, и программа найдёт все 4 площадки. В Geometric Matching.vi даже объяснять ничего не надо, всё наглядно.
Просто нужно определиться, насколько важна геометрическая форма в вашем случае. Нужно обнаружить круг или квадрат, это все допустимые фигуры? Могут ли они встретиться одновременно или только либо круг(и), либо квадрат(ы)? Будет ли исходное изображение поворачиваться? Будет ли уменьшаться/увеличиваться? Если ответите на эти вопросы, можно будет окончательно определиться с инструментами.
SokolKatya wrote:В соответствии с чем выстраиваются эти параметры (угол поворота, масштаб)? Я вроде как приблизительно выставила, но признаюсь честно, не совсем понимаю, как это работает.

С текущими условиями, в которых эти инструменты будут работать. Если нет поворота, то соответствующая опция отключается, угол = 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 wrote:Пы.сы. указанные ошибки исправила, но увы...И да, можно ли использовать IMAQ Setup Match Geometric Pattern VI без IMAQ Learn Multiple Geometric Patterns VI?

Зачем нужен Cast Image? 8-битную картинку преобразуете в 8-битную. В этом нет смысла. Setup -> Learn -> Match - стандартная связка для любого типа распознавания (тона серого, цвет, геометрия). Если выкинуть один :vi: , остальные не смогут работать. Обычно NI пишут в описании инструмента, какие :vi: должны быть использованы вместе с ним.
User avatar
dadreamer
professor
professor
 
Posts: 3260
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 816
I/O VIP vision internet

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

Postby SokolKatya on 28 Jan 2019, 17:08

dadreamer wrote:Было бы замечательно, если бы сами изображения выложили. И то, на котором ищутся объекты, и те, что используются в качестве шаблона. Я, если честно, не совсем понял - круг/квадрат просто рисуется на листочке? Толщина границ объекта должна быть достаточной, скажем, пикселей 10 или более. При малой толщине границ не факт, что найдёт объект, "как ни крути".

Изображения выложила и да, они рисуются на одном листе, после чего создаются шаблоны и т.д. Не знаю, насколько это правильно, но полагаю, что на начальном этапе почему бы мне не поучиться именно так. И я не уверена, что программа вообще ищет по шаблонам, так как ошибка возникает еще до (Error -1074395628 occurred at IMAQ Learn Multiple Geometric Patterns, рossible reason(s): IMAQ Vision: (Hex 0xBFF60614) Invalid geometric matching template image.). Что-то не устраивает эту функцию, а что, я понять не могу:buuh:
dadreamer wrote:Просто нужно определиться, насколько важна геометрическая форма в вашем случае. Нужно обнаружить круг или квадрат, это все допустимые фигуры? Могут ли они встретиться одновременно или только либо круг(и), либо квадрат(ы)? Будет ли исходное изображение поворачиваться? Будет ли уменьшаться/увеличиваться? Если ответите на эти вопросы, можно будет окончательно определиться с инструментами.

Геометрическая форма важна. Происходит сортировка одновременно захваченных камерой объектов (пока это круги и квадраты). Разумеется они могут попасть в объектив под разными углами. Относительно масштаба - пока да, ведь я держу листочек перед вебкамерой, погрешностей в расстоянии не исключить.
Attachments
circle.png
circle.png (10.93 KiB) Viewed 1849 times
square.png
square.png (10.04 KiB) Viewed 1849 times
1.png
SokolKatya
beginner
beginner
 
Posts: 19
Joined: 04 Nov 2018, 16:11
LabVIEW Version: 2016
Karma: 0

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

Postby IvanLis on 28 Jan 2019, 22:16

Если Вам нужно детектировать геометрические примитивы типа овала и прямоугольника, то используйте 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 KiB) Downloaded 17 times


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

Что касается ошибки, которая у Вас выскакивает. Почитайте, какой тип изображения можно использовать в качестве шаблона :crazy:
Он же Вам пишет
Invalid geometric matching template image
User avatar
IvanLis
professor
professor
 
Posts: 4757
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 744
hardware VIP bloggers teachers

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

Postby SokolKatya on 29 Jan 2019, 08:01

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

Благодарю за ответ, знаю эту функцию и знакома с ее работой. Но это не много не то что нужно, потому что в дальнейшем круги и квадраты заменят разного рода механические детали.
SokolKatya
beginner
beginner
 
Posts: 19
Joined: 04 Nov 2018, 16:11
LabVIEW Version: 2016
Karma: 0

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

Postby IvanLis on 29 Jan 2019, 18:47

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

Изучите примеры, которые находятся в папке ...\LabVIEW ...\examples\Vision\Pattern Matching
И сделайте их базе.
Единственная рекомендация, это предварительная обработка изображения, для уменьшения ошибки детектирования.
User avatar
IvanLis
professor
professor
 
Posts: 4757
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 744
hardware VIP bloggers teachers

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

Postby dadreamer on 29 Jan 2019, 18:54

SokolKatya wrote:И я не уверена, что программа вообще ищет по шаблонам, так как ошибка возникает еще до (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 - те, что с иконкой в виде "полумесяца" (а не в виде пинцета):
Image
Создайте в 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
То ли баг, то ли что, надо разбираться. Image
User avatar
dadreamer
professor
professor
 
Posts: 3260
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 816
I/O VIP vision internet

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

Postby SokolKatya on 02 Feb 2019, 17:49

В общем и целом что у меня получилось:
Создала шаблон в 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:
Attachments
1.png
sq1.png
sq1.png (284.41 KiB) Viewed 1595 times
Matching.vi
(59.36 KiB) Downloaded 17 times
SokolKatya
beginner
beginner
 
Posts: 19
Joined: 04 Nov 2018, 16:11
LabVIEW Version: 2016
Karma: 0

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

Postby dadreamer on 02 Feb 2019, 20:43

SokolKatya wrote:я использовала сначала (IMAQ Setup Match Geometric Pattern 2 VI, IMAQ Learn Geometric Pattern 2 VI и IMAQ Match Geometric Pattern 2 VI) и у меня снова появлялась старая ошибка (о том, что шаблон инвалид :crazy: )

А почему, интересно, вы использовали именно такой набор инструментов? Image Сейчас сделано нормально, улучшать там особо нечего. Осталось только проверить работу с несколькими шаблонами (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 wrote:-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 wrote:Пожалуйста, объясните мне, почему не происходило обработки изображения, когда был 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, а мы по сути их перезапишем другими данными. Что выбирать - сами смотрите. Если шаблоны не будут часто меняться, то можно их создать один раз в ассистенте и дальше просто грузить в основную программу. Если шаблоны будут часто меняться, то лучше работать с ними динамически.
User avatar
dadreamer
professor
professor
 
Posts: 3260
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 816
I/O VIP vision internet

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

Postby SokolKatya on 11 Feb 2019, 13:33

dadreamer wrote:Ну, и в качестве обучения можете попробовать реализовать ту же задачу на 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?
SokolKatya
beginner
beginner
 
Posts: 19
Joined: 04 Nov 2018, 16:11
LabVIEW Version: 2016
Karma: 0

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

Postby dadreamer on 14 Feb 2019, 16:06

SokolKatya wrote:
dadreamer wrote:Ну, и в качестве обучения можете попробовать реализовать ту же задачу на 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?

В простейшем случае как-то так.
Attachments
Multiple_Match.png
2019-02-14_17-52-25.jpg
1 rotated.png
sq1.png
sq1.png (284.41 KiB) Viewed 1295 times
tr1.png
tr1.png (10.17 KiB) Viewed 1295 times
User avatar
dadreamer
professor
professor
 
Posts: 3260
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 816
I/O VIP vision internet

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

Postby SokolKatya on 14 Mar 2019, 12:11

Всем добрый вечер, в который раз)
Хотела снова спросить совета: могу ли я совместить свою программу сортировки с одновременным контролем размера (на основе примера Contour defect inspection)? Понятно что можно, вот только как это будет происходить в real-time видео-потоке- что следует учесть при извлечении контура (скажем пока это квадрат), как задать ROI и вообще на что следует обратить внимание?????
SokolKatya
beginner
beginner
 
Posts: 19
Joined: 04 Nov 2018, 16:11
LabVIEW Version: 2016
Karma: 0

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

Postby Blackman on 14 Mar 2019, 14:58

Real-time ball bearing sorting
https://www.youtube.com/watch?time_cont ... MRIVQlUdUY
Дата публикации 2006 :wink:
Blackman
leader
leader
 
Posts: 849
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 253
VIP

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

Postby dadreamer on 15 Mar 2019, 12:21

SokolKatya, сами спросили, сами ответили. :) Пробуйте, экспериментируйте. Если что-то не будет получаться, тогда и спросите или, может, сами сможете поправить.
SokolKatya wrote:как это будет происходить в real-time видео-потоке

Я уже советовал в этой же теме:
dadreamer wrote:Только всю обработку я бы в отдельный цикл вынес, чтоб не увеличивать время на итерацию получения данных.

Выполнять в одном цикле и получение данных с видеокамеры и последующую обработку не есть хорошо. Чем дольше будет выполняться обработка, тем реже программа будет читать видеокадры. Получится уже далеко не real-time (хотя даже 25 к/сек - это не real-time, но достаточно для нормального восприятия человеком).
SokolKatya wrote:как задать ROI

Как больше хочется, так и задавайте. :wink: Можно выделить на картинке область с помощью инструментов на панели рядом, потом вызвать Property Node ROI, и в зависимости от геометрического типа ROI (прямоугольник, круг и т.д.) применить IMAQ Convert ROI to ... . Можно чуть более интерактивно с помощью IMAQ ConstructROI. Можно просто кластер кинуть на ФП и на этом остановиться. Смотрите по ситуации.
User avatar
dadreamer
professor
professor
 
Posts: 3260
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 816
I/O VIP vision internet

Previous

Return to Vision / IMAQ

Who is online

Users browsing this forum: No registered users and 1 guest

cron