халкон-логотип

ХАЛКОН 21.11 Прогресс

HALCON-21-11-Progress-product-image

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

Copyright © 2003-2021 MVTec Software GmbH, Мюнхен, Германия
Защищено следующими патентами: US 7,239,929 7,751,625 7,953,290, US 7,953,291 8,260,059 8,379,014, US 8,830,229 XNUMX XNUMX, US XNUMX XNUMX XNUMX, US XNUMX XNUMX XNUMX, US XNUMX XNUMX XNUMX, US XNUMX XNUMX XNUMX. Ожидаются дальнейшие патенты.
Microsoft, Windows, Windows Server 2008/2012/2012 R2/2016, Windows 7/8/8.1/10, Microsoft .NET, Visual C++ и Visual Basic являются товарными знаками или зарегистрированными товарными знаками корпорации Microsoft.
Linux является торговой маркой Линуса Торвальдса.
macOS и OpenCL являются товарными знаками Apple Inc.
NVIDIA, CUDA, cuBLAS и cuDNN являются товарными знаками или зарегистрированными товарными знаками NVIDIA Corporation.
OpenGL является торговой маркой Silicon Graphics, Inc.
Настоящим признаются все другие национальные и международные товарные знаки и торговые наименования.
Дополнительную информацию о HALCON можно найти по адресу: http://www.halcon.com/

Об этом руководстве

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

  1. Установка HALCON (стр. 7)
    В этой главе представлен менеджер программного обеспечения MVTec (SOM).
  2. Архитектура HALCON (стр. 9)
    Некоторая теоретическая база, необходимая для понимания того, что такое HALCON и как он работает.
  3. Как разрабатывать приложения (стр. 15)
    В этой главе объясняются три основных подхода к разработке с помощью HALCON и проводится первый опыт программирования.ampле.
  4. Как продолжить (стр. 19)
    Эта глава относится к дополнительным источникам информации.

Установка ХАЛКОН

Пользователям Linux и Windows мы рекомендуем загрузить и установить HALCON через MVTec Software Manager (SOM). SOM — это менеджер установки программных пакетов. Он обеспечивает доступ к удаленному каталогу продуктов и поддерживает, среди прочего, загрузку и установку пакетов. Пошаговое руководство по установке HALCON через SOM можно найти в Руководстве по установке.

ХАЛКОН Архитектура

Базовая архитектура HALCON изображена на рисунке 2.1. Основная часть — библиотека обработки изображений, состоящая из более чем 2000 операторов. Вы также можете разработать свои собственные операторы в виде так называемых пакетов расширения (стр. 11). Вы используете операторы в своем приложении через языковые интерфейсы (стр. 11), такие как HALCON/C++ или HALCON/Python. Это библиотеки, которые позволяют напрямую использовать операторы в типичном стиле программирования различных языков программирования.

ХАЛКОН-21-11-Прогресс-01

Рисунок 2.1: Базовая архитектура HALCON.

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

Операторы

Всякий раз, когда используется какая-либо функциональность из библиотеки HALCON, это делается с помощью оператора. Большинство из них включают в себя несколько методов, которые выбираются с помощью параметров. Полный список всех операторов можно найти в Справочнике по операторам HALCON, доступном в синтаксисе HDevelop, .NET, Python, C++ и C. Важными особенностями операторов являются:

  • Между операторами нет иерархии. С точки зрения архитектуры программного обеспечения view, все операторы находятся на одном уровне.
  • Конечно, есть логические группы операторов. Для бывшегоampНапример, это видно по классам, предлагаемым для C++ и .NET, где операторы, обрабатывающие один и тот же тип данных, являются функциями-членами соответствующих классов.
  • Конструкция операторов соответствует правилам открытой архитектуры. Следовательно, вы можете создавать свои собственные операторы и тем самым расширять HALCON (см. раздел 2.2). Руководство программиста пакетов расширений содержит подробную информацию о расширении библиотеки операторов.
  • Многие операторы могут прозрачно использовать автоматическое распараллеливание, что позволяет легко ускорить работу программы при использовании больших изображений на многопроцессорном или многоядерном компьютере. Подробную информацию о параллельном программировании можно найти в технической заметке «Параллельное программирование», а также в Руководстве программиста.
  • Операторы имеют стандартизированные правила для упорядочения входных и выходных параметров: пиктограммы ввода, пиктограммы вывода, управление вводом и управление выводом (см. раздел 2.1.1). Не все группы могут быть необходимы для данного оператора. В целом входные параметры операторов не изменяются, что обеспечивает ясную и простую семантику. Есть только несколько исключений из этого дизайна, например, set_grayval, overpaint_gray и overpaint_region.

Параметры и структуры данных
HALCON имеет два основных типа параметров: пиктограммы и управляющие данные. Изображения, регионы и XLD (расширенное описание строки) относятся к пиктографическим данным.

Изображения состоят в основном из каналов, т. е. матриц, содержащих значения пикселей. Все каналы изображения имеют одинаковый размер. Подробную информацию о пикселях и каналах см. в главе «Изображение» Справочника оператора HALCON.
Для каждого изображения так называемая область интереса (ROI) указывает, какая часть изображения обрабатывается. ROI можно задавать очень гибко (от простого прямоугольника до набора несвязанных пикселей). Подробнее об управлении ROI см. в Руководстве по решению I, Область интереса на стр. 27.

Регионы представляют собой набор пикселей. Пиксели области не должны быть связаны. Даже произвольный набор пикселей можно обрабатывать как единую область. С помощью оператора связи область может быть разбита на связанные области, т. е. компоненты, состоящие из связанных пикселей.

XLD включают все данные контуров и полигонов. Операторы с точностью до субпикселя, такие как edge_sub_pix, возвращают контуры в виде данных XLD. Контур — это последовательность двухмерных контрольных точек, соединенных линиями. Обычно расстояние между контрольными точками составляет около одного пикселя. Объекты XLD содержат, помимо контрольных точек, так называемые локальные и глобальные атрибуты. Типичный бывшийamples для них являются, например, ребро ampвысота контрольной точки или параметры регрессии сегмента контура. Помимо извлечения объектов XLD, HALCON поддерживает дальнейшую обработку. БывшийampФайлы для этого - выбор контуров на основе заданных диапазонов признаков для сегментации контура на линии, дуги, многоугольники или параллели.

Управляющие данные включают в себя дескрипторы и основные типы данных, такие как целое число, вещественное число, строка.

Ручки являются ссылками на сложные структуры данных, например, подключение к интерфейсу получения изображения или модель для сопоставления на основе формы. В целях эффективности и безопасности данных между операторами передается не вся структура, а только дескриптор. Дескрипторы — это магические значения, которые не должны изменяться и могут отличаться от исполнения к исполнению и от версии к версии. Они автоматически очищаются после перезаписи всех ссылок. Бывшийampфайлы, в которых используются дескрипторы, являются графическими окнами, files, разъемы, интерфейсы получения изображений, OCR, OCV, измерение и сопоставление.

Пакеты расширения

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

Языковые интерфейсы

Как показано на рис. 2.1 на стр. 9, HALCON предоставляет так называемые языковые интерфейсы. Это привязки к родному языку, которые позволяют вам вызывать операторы и использовать типы данных HALCON непосредственно из вашего приложения, будь то Python, C, C++ или .NET.
Для начала разработки рекомендуем сначала проверить один из готовых к запуску экс.ampпрограммы. Здесь вы можете увидеть, как должен быть настроен проект и как используются операторы и типы.
Для каждого языкового интерфейса имена типов, классов, соглашения об именах операторов и т. д. могут различаться в соответствии с типичными правилами, применимыми к выбранному языку. Подписи операторов для поддерживаемых языков программирования задокументированы в справочнике операторов HALCON.

ХАЛКОН/Питон
Интерфейс Python выделяется своей простотой и возможностью быстрого прототипирования. Операторы HALCON вызываются непосредственно как автономные функции после импорта модуля HALCON/Python. Также обратите внимание, что параметры оператора в HALCON/Python разделены на параметры функции (входные данные) и возвращаемые значения (выходные данные).

Example
Следующий код считывает изображение и вычисляет количество связанных областей (стр. 10) в нем.
img = ha.read_image('pcb')
регион = ha.threshold(img, 0, 122)
num_regions = ha.count_obj (ha.connection (регион))
print(f'Количество регионов: {num_regions}')

Предварительные условия и подробное пошаговое руководство см. в Руководстве программиста, часть 4, первый пример.ampле.

ХАЛКОН/С
Интерфейс C — это самый простой интерфейс, поддерживаемый HALCON. Каждый оператор представлен одной или двумя глобальными функциями, где имя оператора и последовательность параметров идентичны языку HDevelop.

Example
Следующий код считывает изображение и вычисляет количество связанных областей (стр. 10) в нем.
Изображение объекта;
read_image(&img, «печатная плата»);
Область объекта;
порог(img,®ion, 0, 122);
Объект связанные_регионы;
соединение(регион, &connected_regions);
Длинное число_регионов = 0;
count_obj(connected_regions, &num_regions);
printf("Количество регионов: %" PRIdPTR "\n", num_regions);

Предварительные условия и подробное пошаговое руководство см. в Руководстве программиста, часть 5, первый пример.ampле.

ХАЛКОН/С++
Интерфейс C++ намного сложнее, чем интерфейс C. Вот, аванtagПрименяются методы C++ и объектно-ориентированного программирования, т. е. автоматическое преобразование типов, построение и уничтожение или группировка функций вместе с их данными в классы. Как и в интерфейсе C, глобальные функции для каждого оператора HALCON предусмотрены для процедурного стиля программирования.

Example
Следующий код считывает изображение и вычисляет количество связанных областей (стр. 10) в нем.
HImage img{"pcb"};
Регион HR = img.Threshold(0, 122);
Hlong numRegions = Region.Connection().CountObj();
std::cout << "Количество регионов: " << numRegions << '\n';

Предварительные условия и подробное пошаговое руководство см. в Руководстве программиста, часть 2, первый пример.ampле.

ХАЛКОН/.NET
C# и Visual Basic .NET используют HALCON через интерфейс .NET.
По аналогии с C++ предлагаются два стиля программирования: процедурный и объектно-ориентированный. Для процедурного стиля класс HOperatorSet предоставляет все операторы HALCON, где HObject используется для обработки пиктографических данных, а HTuple — для управляющих данных. Для объектно-ориентированного стиля для центральной функциональности предусмотрены такие классы, как HDataCode2d, HMeasure или HShapeModel. Кроме того, доступны классы для пиктограмм, например, HImage или HRegion.

Example
Следующий код считывает изображение и вычисляет количество связанных областей (стр. 10) в нем.
HImage img = новый HImage("pcb");
Регион HR = img.Threshold (0d, 122d);
int numRegions = регион.Соединение().CountObj();
Console.WriteLine("Количество регионов: " + numRegions);

Предварительные условия и подробное пошаговое руководство см. в Руководстве программиста, часть 3, первый пример.ampле.

Интерфейсы получения изображений

Интерфейсы получения изображений HALCON образуют мост между программным обеспечением, предоставляемым производителем устройства для получения изображений, и HALCON. Они образуют общий общий интерфейс, для которого требуется лишь небольшой набор операторов. Подробную информацию по этой теме см. в Руководстве по решению II-A.
В настоящее время HALCON предоставляет интерфейсы для более чем 50 фреймграбберов и сотен промышленных камер в виде динамически загружаемых библиотек (Windows: библиотеки DLL; Unix-подобные системы: общие библиотеки). Имена библиотек начинаются с префикса hAcq; библиотеки, заканчивающиеся суффиксом xl, используются HALCON XL.
Наиболее широко используемые интерфейсы, основанные на отраслевых стандартах, уже установлены вместе с библиотеками HALCON. Дополнительные интерфейсы, а также последние версии уже включенных интерфейсов можно скачать по ссылке https://www.mvtec.com/products/interfaces. Интерфейсы получения изображений HALCON могут меняться чаще, чем сама библиотека HALCON. Одна из причин этого заключается в том, что MVTec постоянно разрабатывает новые интерфейсы; кроме того, если программное обеспечение, предоставляемое производителями устройств для получения изображений, изменится, например, если будут интегрированы новые функции, соответствующие интерфейсы HALCON будут адаптированы. Полный список поддерживаемых интерфейсов получения изображений см. также в Справочнике по интерфейсу получения изображений.
После того, как вы успешно установили свое устройство для получения изображений, все, что вам нужно сделать, чтобы получить к нему доступ из HALCON, это вызвать оператора open_framegrabber, указав имя интерфейса для получения изображений и некоторую дополнительную информацию, например, о подключенной камере. Затем изображения можно захватить, вызвав оператор «grab_image» (или «grab_image_async»).

O интерфейсы ввода /

HALCON предоставляет интерфейсы для нескольких устройств ввода-вывода для обеспечения сбора данных. Эти интерфейсы доступны в виде динамически загружаемых библиотек (Windows: библиотеки DLL; Unix-подобные системы: общие библиотеки). Имена библиотек начинаются с префикса hio; библиотеки, заканчивающиеся суффиксом xl, используются HALCON XL.
Интерфейсы устройств ввода-вывода HALCON обеспечивают унифицированный доступ к различным устройствам ввода-вывода с использованием небольшого набора операторов. После того, как вы установили ваше устройство ввода-вывода, соединение устанавливается с помощью оператора open_io_device, указывающего имя интерфейса устройства ввода-вывода и, опционально, некоторые параметры, специфичные для устройства. Как только соединение установлено, можно открыть канал передачи, вызвав open_io_channel. Для чтения и записи значений в этот канал используйте операторы read_io_channel и write_io_channel соответственно.
Обратите внимание, что интерфейсы устройств ввода-вывода HALCON могут меняться чаще, чем сама библиотека HALCON. Вы можете найти последнюю информацию вместе с загружаемыми интерфейсами (включая документацию) в разделе https://www.mvtec.com/products/interfaces. Также см. полный список поддерживаемых интерфейсов устройств ввода-вывода в Справочнике по интерфейсам устройств ввода-вывода.

Как разрабатывать приложения

Мы рекомендуем вам начать с быстрого прототипирования в HDevelop, интерактивной среде разработки для библиотеки машинного зрения HALCON. Вы можете использовать HDevelop, чтобы найти оптимальные операторы и параметры для решения вашей задачи анализа изображений. После разработки программы HDevelop в соответствии с заданными требованиями ее необходимо перевести в окончательную среду. Для этого вы можете выбрать один из следующих трех подходов, в зависимости от ваших предпочтений:

  • Начинать с нуля: Написание вашей программы с нуля означает перевод вашего кода HDevelop на целевой язык программирования (C++, Python…) вручную. Как упоминалось ранее, соглашения об именовании операторов, имена классов и т. д. могут различаться в разных языках программирования. Посмотрите Справочник операторов HALCON, чтобы получить сигнатуры операторов HALCON для каждого поддерживаемого языка программирования. Для получения информации о том, как создавать приложения на желаемом целевом языке, ознакомьтесь с Руководством программиста.
  • Экспорт кода HDevelop: Автоматически переводите свой код HDevelop на целевой язык программирования с помощью экспорта кода HDevelop.
  • Экспорт проекта библиотеки: Экспорт библиотеки HDevelop создает готовую к использованию папку проекта, включая код-оболочку на целевом языке и CMake. file построить проект. Экспорт библиотеки HDevelop использует HDevEngine, библиотеку, которая действует как интерпретатор. HDevEngine позволяет напрямую выполнять программы или процедуры HDevelop из приложения, написанного на C++ или любом другом языке, который может интегрировать объекты .NET. Таким образом, вам не придется перекомпилировать все приложение при внесении изменений в код HDevelop.
    Конечно, вы можете использовать HDevEngine без использования функции экспорта библиотеки HDevelop. Как использовать HDevEngine, подробно описано в Руководстве программиста, часть 6 (Использование HDevEngine).
HDevelop

Давайте сначала взглянем на HDevelop. На рис. 3.1 показан пользовательский интерфейс HDevelop после загрузки и частичного выполнения программы.
По умолчанию эти окна видны, что также необходимо для разработки с помощью HDevelop:

  1. Графическое окно Отображает (промежуточные) результаты, а именно графические данные (стр. 10), такие как изображения, регионы и XLD.
  2. Окно программы Здесь вы вводите программный код, используя операторы (стр. 10) для доступа к методам обработки изображений HALCON.
  3. Окно переменных Отображает все переменные, а именно пиктограммы и управляющие переменные. Иконические переменные содержат графические данные (стр. 10), а управляющие переменные содержат управляющие данные (стр. 10).

Подробную информацию о HDevelop можно найти в Руководстве пользователя HDevelop. Наши обучающие видеоролики также являются хорошим введением в HDevelop:

  • Учебник HDevelop 01: Графический интерфейс и навигация
  • Учебное пособие по HDevelop 02: Переменные
  • HDevelop Учебник 03: Визуализация

ХАЛКОН-21-11-Прогресс-02

Рисунок 3.1: Пользовательский интерфейс HDevelop.

Exampле программа

Теперь, когда вы познакомились с пользовательским интерфейсом HDevelop и основными понятиями HALCON (стр. 9), давайте разработаем приложение на C++, используя подход к экспорту библиотеки.
В дополнение к следующим пошаговым инструкциям мы рекомендуем вам посмотреть наши обучающие видеоролики: Интеграция кода HDevelop в приложение C++ с помощью экспорта проекта библиотеки.
Интегрируйте код HDevelop в приложение C# с помощью экспорта проекта библиотеки.
Видео демонстрирует экспорт библиотеки и предоставляет дополнительную справочную информацию по теме.

Создание прототипа в HDevelop
Задача следующего упр.ample заключается в чтении изображения и подсчете количества связанных с ним областей.

  1. Откройте HDevelop и введите следующий код в окно программы:
    read_image (изображение, печатная плата)
    порог (Изображение, Область, 0, 122)
    подключение (Регион, ConnectedRegions)
    count_obj (подключенные регионы, число)
  2. Протестируйте свою программу, нажав кнопку «Выполнить» на панели инструментов или нажав клавишу F5.

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

  1. Выделите следующие строки кода: порог (Изображение, Регион, 0, 122) соединение (Регион, ConnectedRegions) count_obj (ConnectedRegions, Number)
  2. Щелкните правой кнопкой мыши, чтобы открыть контекстное меню.
  3. Выберите Создать новую процедуру.
  4. Назовите его count_regions.
  5. Выберите «Параметры» и измените «Схему выбора» на «Первый пришел, последний вышел».
  6. Подтвердите, нажав ОК.
  7. Сохраните вашу программу HDevelop как hdev_count_regions.hdev.

Подготовьте проект Visual Studio
В этом бывшемample, мы будем использовать Visual Studio 2019. 1

  1. Создайте пустой проект консоли Windows C++ и назовите его vs_count_regions. Активируйте опцию Разместить решение и проект в одном каталоге. 2
  2. Добавьте исходный код C++ file (Меню проекта Добавить новый элемент… C++ File) и назовите его vs_count_regions.cpp.
  3. Выберите платформу решения x64 в раскрывающемся меню на панели инструментов.
  4. Откройте свойства вашего проекта (меню Project vs_count_regions Properties…) и сделайте следующие настройки:
    • Выберите C/C++ General и добавьте следующие дополнительные каталоги включения: $(HALCONROOT)\include;$(HALCONROOT)\include\halconcpp;
    • Выберите Linker General и добавьте следующий каталог дополнительных библиотек: $(HALCONROOT)\lib\$(HALCONARCH);
    • Выберите «Ввод компоновщика» и добавьте следующие дополнительные зависимости: halconcpp.lib;hdevenginecpp.lib;

Экспорт проекта библиотеки
Затем мы экспортируем нашу программу HDevelop hdev_count_regions.hdev в папку проекта Visual Studio.

  1. Откройте ранее созданную программу HDevelop hdev_count_regions.hdev.
  2. Открыть File  Экспорт проекта библиотеки…
  3. Сделайте следующие настройки:
    • Вход file: Текущая программа
    • Целевой язык: C++
    • Название проекта: hdev_count_regions
    • Расположение проекта: выберите расположение нашего проекта Visual Studio vs_count_regions.
    • Пространство имен: hdev_count_regions
  4. Подтвердить экспортом.

Теперь ваша папка проекта Visual Studio vs_count_regions должна содержать как минимум следующие данные:

  • vs_count_regions.cpp (Источник File)
  • vs_count_regions.sln (решение)
  • hdev_count_regions (папка из HDevelop Export)
    • cmake
    • res_hdev_count_regions
    • hdev _ количество_ регионов. hdev
  •  источник
    • hdev_count_regions.cpp
    • hdev_count_regions.h
    • CMakeLists.txt

Интеграция проекта библиотеки в Visual Studio
Наконец, нам нужно интегрировать программу HDevelop в наш проект Visual Studio.

  1. Откройте проект Visual Studio.
  2. Откройте проект «Добавить существующий элемент…» и выберите C++ file hdev_count_regions.cpp и заголовок file hdev_count_regions.h, созданный экспортом библиотеки HDevelop. ( fileнаходятся в исходной папке hdev_count_regions.)
  3. Введите следующий код в vs_count_regions.cpp:
    #включать
    #include «HalconCpp.h»
    #include «hdev_count_regions/source/hdev_count_regions.h»
    целочисленный основной()
    {
    HalconCpp::HImage Image("pcb");
    hdev_count_regions::SetResourcePath("hdev_count_regions/res_hdev_count_regions");
    HalconCpp::HTuple Номер{};
    hdev_count_regions::count_regions(Изображение, &Число);
    std::cout << «Количество регионов: » << Number.L() << '\n';
    }
  4. Выполните программу. → Откроется консоль с результатом «Количество регионов: 43».

Как продолжить

Чтобы глубже погрузиться в HALCON, мы предлагаем дополнительную документацию и поддержку.

  • HDevelop Эксampле Программы
    HALCON предлагает обширный наборampФайловые программы не только для HDevelop, но и для разных языков программирования. Эти бывшиеampфайлы можно найти в каталоге, обозначенном переменной окружения % HALCONEX.AMPLES% или, если переменная не установлена, в поддиректории exampфайлы папки, в которую вы установили HALCON.
    Чтобы открыть HDevelop exampпрограмма, выберите меню File  Обзор HDevelop Exampле Программы…. Новичкам рекомендуем выбрать эксampфайл из категории Область применения.
  • Услуги и поддержка
    Наш webсайт https://www.mvtec.com/services-support предлагает разнообразную поддержку, напримерampобучающие видеоролики, информация о семинарах и тренингах, уголок для разработчиков с советами и рекомендациями и многое другое.
  • ХАЛКОН Документация
    Документация содержит огромное количество информации, от тем для начинающих до экспертных знаний. Для бывшегоample, наши руководства по решениям описывают методы машинного зрения и способы их применения в HDevelop. Хорошей отправной точкой является Руководство по решению I, которое знакомит вас с основными методами машинного зрения.
    Болееview всех руководств с кратким описанием можно найти на странице входа в документацию.

Документы/Ресурсы

ХАЛКОН 21.11 Прогресс [pdf] Руководство пользователя
21.11 Прогресс, 21.11, Прогресс

Ссылки

Оставьте комментарий

Ваш адрес электронной почты не будет опубликован. Обязательные поля отмечены *