MVTEC Halcon 22.11.1.2 Steady Runtime Linux for Arm aarch64-linux HALCON22.11.1.2稳定运行版 64位aarch64-linux版
文件名: halcon-22.11.1.2-aarch64-linux-runtime.zip
文件大小: 158884927 字节 (151.52 MB)
修改日期: 2023-01-24 22:07
MD5: c9d8cf618b6addf8e27e63216d08e842
SHA1: cc0caf2c319725b96f93195940adc3845013d38a
SHA256: cb838b24f883287800d7013a712b9a9471947da9eb5d06c8d2cb89e09453f38e
CRC32: 70b00815
MVTEC官方下载(需要注册、国外IP地址可能被墙)
www.mvtec.com
百度网盘下载地址:
MVTEC Halcon 22.11.1.2 Steady Runtime Linux for Arm aarch64-linux HALCON22.11.1.2稳定运行版 64位aarch64-linux版
http://visionbbs.com/thread-30459-1-1.html?fromuid=9
(出处: 机器视觉论坛)
RELEASE NOTES FOR HALCON 22.11.1.0 STEADY
This document provides the release notes for MVTec HALCON 22.11.1.0 Steady, as released in November 2022.
CONTENTS
Major New Features of HALCON 22.11.1.0 Steady
Understanding an Image’s Logical Content with Global Context Anomaly Detection
Deep Learning Instance Segmentation
HALCON Deep Learning Framework
AI Accelerator Plugins
Generic Shape Matching
Deep OCR Improvements
Improved Bar Code Reading
Improved Print Quality Inspection for Data Matrix ECC 200 codes
Improved Dictionary Handling
3D Gripping Point Detection
New Data Type “Memory Block”
Protection of Trained Deep Learning Models
Better Traceability of Deep Learning Decisions
Network Licenses
Further Highlights of HALCON 22.11
Compatibility
Licenses
HALCON Library
HALCON Applications
Image Acquisition Interfaces
Digital I/O Interfaces
Extension Packages
Further Compatibility Information
Legacy or No Longer Supported Functionality
Discontinuation of HALCON for macOS
Supported Operating Systems
Detailed Description of Changes in HALCON 22.11.1.0 Steady
Speedup
New Functionality
Bug Fixes
Bug Fixes
New Functionality
Bug Fixes
HDevelop Example Programs
HDevelop
HDevEngine
HALCON Library
Procedures
HALCON/C++
HALCON/.NET
HALCON/PYTHON
Language Interface Example Programs
HBench
Image Acquisition Interfaces
Digital I/O Interfaces
Documentation
Installation
Licensing
Miscellaneous
Release Notes of Previous HALCON Versions
MAJOR NEW FEATURES OF HALCON 22.11.1.0 STEADY3D GRIPPING POINT DETECTION
HALCON 22.11 combines 3D vision and deep learning for the first time. The 3D Gripping Point Detection can be used to robustly detect surfaces on any object that is suitable for gripping with suction. In contrast to classic bin-picking applications, the 3D Gripping Point Detection is a CAD-less approach, hence no prior knowledge of the respective objects is required.
This increased flexibility opens up completely new application fields, such as those in the logistics industry or warehouses.
NEW DATA TYPE “MEMORY BLOCK”
As of HALCON 22.11, users can store and transfer binary data (e.g., images) in HALCON as well as further process it with other applications. This increases the software’s compatibility with machine communication protocols, such as OPC UA or image acquisition interfaces.
PROTECTION OF TRAINED DEEP LEARNING MODELS
For machine vision applications, the protection of intellectual property is getting more and more important. This is particularly relevant in the field of deep learning. The special aspect regarding this technology is that compared to traditional methods, the quality depends not only on the algorithm itself but also significantly on the quality of the training data. A large part of the effort of deep learning applications is in collecting the data and training the models.
Therefore, HALCON 22.11 includes a new encryption mechanism for HALCON data types. One major use case is the encryption of deep learning models. This allows customers to protect their investment and know-how. Thanks to this, it is ensured that only authorized users can use and view their deep learning model.
BETTER TRACEABILITY OF DEEP LEARNING DECISIONS
A heatmap gives an indication of which areas of an image were decisive for the result of the deep learning model's classification. This can shed more light into the black box of deep learning, thereby increasing the traceability of corresponding processes.
Guided Grad-CAM is a new method that now provides even more precise clues as to which regions of the image are relevant for the decision made by the deep learning network. For example, misclassifications can be investigated more precisely in a post-processing step.
NETWORK LICENSES
With HALCON 22.11, MVTec expands the licensing possibilities by adding the option to license HALCON via a network. A license server allows the use of floating licenses. Here, developers share a predefined number of licenses using a network connection. Customers benefit from cost savings due to multi-usage and greater flexibility in user allocation, developers enjoy greater independence and flexibility regarding their work location. Especially for distributed or remotely working development teams, this is the perfect way to effectively make use of HALCON's powerful machine vision algorithms. Besides this, the new mechanism enables users to work in virtualized environments without permanent physical host ID.
FURTHER HIGHLIGHTS OF HALCON 22.11Understanding an Image’s Logical Content with Global Context Anomaly Detection
The new “Global Context Anomaly Detection” opens up completely new application possibilities with the detection of logical anomalies in images. It is a one-of-a-kind technology, which is able to “understand” the logical content of the entire image. Just like HALCON's existing anomaly detection, the new “Global Context Anomaly Detection” only requires “good images” for training, eliminating the need of data labeling. This technology makes it possible to detect entirely new variants of anomalies like missing, deformed, or incorrectly arranged components. It opens up completely new possibilities: For example, the inspection of printed circuit boards in the semiconductor production or the inspection of imprints.
Deep Learning Instance Segmentation
“Instance segmentation” is a Deep-Learning-based feature, which combines the advantages of semantic segmentation and object detection. With the help of instance segmentation, objects can be assigned to different classes with pixel accuracy. This technology is particularly useful in applications where objects are very close to each other, touch, or overlap. Typical use cases also include grabbing randomly arranged objects from boxes (bin picking) as well as identifying and measuring naturally grown structures.
HALCON Deep Learning Framework
The framework allows experienced users to create their own models within HALCON. With this feature, experts can now realize even the most demanding and highly complex applications in HALCON without having to rely on pretrained networks or third-party frameworks.
AI Accelerator Plugins
With the generic AI Accelerator Interface (AI2), HALCON can also use supported AI accelerator hardware to speed up the inference part of deep learning applications. Such special devices are widely used especially for applications in the embedded environment, but also exist more and more in the PC environment.
HALCON now provides plug-ins for the NVIDIA TensorRT inference engine as well as a plug-in for the Intel Distribution of OpenVINO™. This enables HALCON users to benefit from faster deep learning inference times on hardware that is compatible with the OpenVINO toolkit and NVIDIA TensorRT. Customers now have even more flexibility in their choice of hardware.
Generic Shape Matching
Generic Shape Matching makes MVTec's industry-proven shape matching technologies even more user-friendly and future-proof. By significantly reducing the number of required operators, users can now implement their solutions much faster and easier. Moreover, thanks to the unification of HALCON's different shape matching methods into a single set of operators, users can now integrate new shape-matching-related features more smoothly.
Deep OCR Improvements
Deep OCR is extended with training functionality, enabling application-specific training on the user's own application dataset. This allows users to solve even most complex applications like reading text with bad contrast (e.g., on tires). Another advantage is that very rarely used special characters or printing styles can also be trained. Training for Deep OCR recognition significantly improves the performance and usability and makes applications run even more robust.
Customers also benefit from an overall improved stability and from the fact that they can address a wider range of possible applications, thanks to additional character support.
Improved Bar Code Reading
HALCON's subpixel bar code reader is capable of reading codes with very thin bars. The subpixel bar code reader has been improved regarding low-resolved codes. The decoding rate for those can now increase up to 50%.
Additionally, HALCON's bar code reader is improved with respect to robustness in case of blurred Code 128/GS1-128 codes. Now, codes with a larger amount of blur can be read. Code 128/GS1-128 is a widely used bar code type that is frequently used in logistics due to its compact size and high data density.
Improved Print Quality Inspection for Data Matrix ECC 200 codes
Print Quality Inspection (PQI) refers to the evaluation and grading of certain aspects of printed bar and data codes according to international standards. HALCON supports various standards for grading the print quality of 1D and 2D codes. The PQI of data codes has been further improved. It is now up to 150% faster. In addition, the module grid determination for print quality inspection of Data Matrix ECC 200 has been improved. Last but not least, the usability of the PQI of data codes has been improved by introducing a new procedure that provides the grades.
Improved Dictionary Handling
There are several improvements that make the handling of dictionaries even easier and faster. For example, dictionaries can now be initialized with a single operator call, and the syntax for adding and retrieving elements has been simplified. In addition, the autocompletion now also suggests the keys contained in the dictionary, which further speeds up and simplifies working with dictionaries.
COMPATIBILITYLICENSESAll HALCON 20.11.3 Steady licenses or licenses of earlier versions must be replaced or upgraded. Please contact your local distributor. HALCON 22.11.1.0 Steady licenses will be downwards compatible to HALCON 20.11.3 Steady.
HALCON LIBRARY
Compared to HALCON 20.11.3, many extensions have been introduced. Thus, the HALCON 22.11.1.0 Steady libraries are not binary compatible with HALCON 20.11.3 or earlier versions. However, HALCON 22.11.1.0 Steady is mostly source-code compatible to HALCON 20.11.3 except for the changes listed below:
The results of optical_flow_mg can be slightly different when enabling the new parameter 'parallel_solver'. More information.
The struct _HhandleList has been renamed to HhandleListT. Programs using _HhandleList must be adapted. More information.
The procedure preprocess_dl_model_images is now faster for image types 'byte', 'int2', and 'uint2'. As a consequence, the resulting preprocessed images can be slightly different to the previous version. Other procedures using preprocess_dl_model_images, e.g., preprocess_dl_samples and preprocess_dl_dataset, are affected as well. This can cause compatibility issues when performing inference with deep learning models trained using the previous versions. More information.
The read_dl_model low level error message has been changed in case that reading an ONNX model failed due to an unsupported Softmax or LogSoftmax node. Now, the generic error codes "Unsupported value for attribute axis in Softmax node" or "Unsupported value for attribute axis in LogSoftmax node" are returned, respectively.
OpenCL support for macOS platforms has been removed. Compute device operators now return the error 9000 ("Function not implemented on this machine").
The OpenGL compatibility mode for macOS platforms has been removed. More information.
The improvements of find_calib_object can lead to slightly different results in rare cases. More information.
As the deep learning edge extraction model pretrained_dl_edge_extractor.hdl has been replaced, the behavior of the model can differ significantly from the model previously released with HALCON 20.11. More information.
The parameter 'pyramid_level_lowest' of set_generic_shape_model_param accepted non-supported values smaller than 1 and reset them to 1 internally. This problem has been fixed. Now, an exception is thrown to inform the user about invalid input values.
Although the results are now closer to other HALCON supported architectures, the improved accuracy of an internal operation on Arm can lead to slightly different results compared to previous HALCON versions for the following operators:
binocular_disparity, binocular_distance, edges_color, find_ncc_model, find_ncc_models, find_aniso_shape_model, find_aniso_shape_models, find_scaled_shape_model, find_scaled_shape_models, find_shape_model, find_shape_models, find_shape_model_3d, find_local_deformable_model, find_planar_calib_deformable_model, find_planar_uncalib_deformable_model, reconstruct_surface_stereo, and operators for edge-supported surface based matching. More information.
read_dl_model and read_deep_ocr accepted a tuple of filenames as input and only used the first entry for reading in the model. This behavior has been changed such that an error (1401) is raised. More information.
In the procedure determine_dl_model_detection_param, the default of 'image_size_constant' is 'true', i.e., all images are assumed to have the same size. To reproduce the previous behavior, set this parameter to 'false'.
In the procedure determine_dl_model_detection_param, the default of the generic parameter 'split' has been changed to 'train'. To reproduce the previous behavior, set this parameter to 'all'. More information.
Basins returned by watersheds_marker that were found at the border of the image, or markers that were used at the border of an image, can now differ at the image border in rare cases. More information.
For PharmaCode and 2/5 Industrial bar codes, the number of quality grades ('quality_isoiec15416', 'quality_isoiec15416_float_grades') and values ('quality_isoiec15416_values') returned by get_bar_code_result changed from 7 and 8, respectively, to 9. Thereby, 'N/A' is returned for quality grades and values that are not defined. More information.
set_dl_classifier_param and set_dl_model_param may return the error message 7913 ("DL: Requested runtime cannot be set") if the legacy parameter 'runtime' (use operator query_available_dl_devices instead) is set to 'gpu' but no GPU is available on the system. More information.
optimize_dl_model_for_inference could be applied on a model that was already optimized by a previous call of the operator. This is no longer possible. Instead, optimize_dl_model_for_inference returns the error 7917 ("Unsupported operation on converted model") in this case. More information.
Due to an internal bug, the Inception_v1 model from the ONNX model zoo could be read in and the runtime could be set to 'cpu' but returned pure inference results. Therefore, this specific model can no longer be inferred using a HALCON runtime.
As the Deep OCR detection model used by create_deep_ocr has been improved and changed, apply_deep_ocr may now produce different results for the modes 'detection' and 'auto' for certain images. More information.
The error messages returned by the deep learning procedure augment_dl_samples have been modified. More information.
The define H_ERR_CAL_AMBIGIOUS in HErrorDef.h has been renamed to H_ERR_CAL_AMBIGUOUS, which can break source code compatibility. More information.
The results of project_object_model_3d can be slightly different, especially if projected lines are clipped at the image border or extend behind the camera. More information.
For get_operator_info and get_param_info, the option '.latex' has been removed and is not available anymore. More information.
HALCON 22.11 only supports CUDA SDK and drivers supporting CUDA 11.1 and later for x64-win and x64-linux. Support for CUDA 10 has been removed for these platforms. More information.
As the default batch normalization momentum of the pretrained classification models 'pretrained_dl_classifier_mobilenet_v2.hdl' and 'pretrained_dl_classifier_resnet50.hdl' has been changed from 0.999 to 0.9, a training of these models may lead to different results in comparison to trainings with previous HALCON versions on the same dataset. A custom batch normalization momentum can be set via the operator set_dl_model_param using the parameter name 'batchnorm_momentum'. More information.
HALCON APPLICATIONS
Please re-compile all C, C++, or .NET programs developed with HALCON 20.11.3. The incompatibility with HALCON 20.11.3 or earlier versions mainly concerns the binaries, with only few changes in the language interfaces. If you encounter problems during recompiling your programs, please check the detailed description of changes below.
IMAGE ACQUISITION INTERFACES
In general, HALCON 22.11.1.0 Steady, HALCON 20.11.3 and HALCON 13.0.x image acquisition interfaces are library compatible.
HALCON 22.11.1.0 Steady includes only a subset of available image acquisition interfaces. Image acquisition interfaces that are included are: BitFlow, DirectFile, DirectShow, Ensenso-NxLib, File, GenICamTL, GigEVision2, GStreamer, LinX, MILLite, MultiCam, O3D3xx, pylon, SaperaLT, SICK-3DCamera, SiliconSoftware, uEye, USB3Vision, and Video4Linux2. You can download additional interfaces from our web server.
DIGITAL I/O INTERFACES
In general, HALCON 22.11.1.0 Steady, HALCON 20.11.3 and HALCON 13.0.x digital I/O interfaces are library compatible.
HALCON 22.11.1.0 Steady includes only a subset of available digital I/O interfaces. Digital I/O interfaces that are included are: Linux-GPIO, OPC_UA, and Hilscher-cifX. You can download additional interfaces from our web server.
EXTENSION PACKAGES
Please re-generate your own extension packages developed with HALCON 20.11.3.
FURTHER COMPATIBILITY INFORMATION
The initializer of HALCON/Python 'HNull' no longer takes a ctypes pointer as argument. The new initializer takes no parameters.
The introduction of the new keyword dict may cause conflicts in existing HDevelop scripts if that name was used as a variable or parameter name (in lowercase). Use the Find/Replace dialog in HDevelop to locate these occurrences by searching for 'Variables' in scope 'All' with enabled 'Case Sensitive' and 'Whole Words' options.
The procedure dev_disp_button has been adapted such that it returns only after the mouse button is released. More information.
Deserializing an instance of HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, or HXLDPoly now returns an instance of the exact same type where previously it returned an HXLD base class instance. This is unlikely to cause compatibility issues except in situations where the runtime type was explicitly checked. More information.
Cloning an instance of HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, or HXLDPoly now returns an instance of the exact same type where previously it returned an HXLD base class instance. This is unlikely to cause compatibility issues except in situations where the runtime type was explicitly checked. More information.
LEGACY OR NO LONGER SUPPORTED FUNCTIONALITY
The following functionality may be discontinued in a future major release:
Support of uint2 images in find_bar_code and decode_bar_code_rectangle2 is now legacy. Applications using uint2 images with these operators should convert these images to byte images with a reasonable mapping of gray values.
In the procedure determine_dl_model_detection_param, the generic parameters 'raw_width' and 'raw_height' have been set to legacy. Instead, the generic parameter 'image_size_constant' has been introduced. If all images have the same size, this parameter can be set to 'true' (default) to speed up the procedure.
Sample-based identification is set to legacy for HALCON 22.11. This includes the following operators:
add_sample_identifier_preparation_data, add_sample_identifier_training_data, apply_sample_identifier, clear_sample_identifier, create_sample_identifier, deserialize_sample_identifier, get_sample_identifier_object_info, get_sample_identifier_param, prepare_sample_identifier, read_sample_identifier, remove_sample_identifier_preparation_data, remove_sample_identifier_training_data, serialize_sample_identifier, set_sample_identifier_param, set_sample_identifier_object_info, train_sample_identifier, write_sample_identifier
See the reference manual entries of legacy operators for details on how to replace them.
DISCONTINUATION OF HALCON FOR MACOS
MVTec discontinues the support of macOS systems. The HALCON releases HALCON 22.11 Steady and HALCON 22.11 Progress are the last HALCON versions for which macOS support will be available. Future Versions of HALCON will not support macOS systems anymore. We recommend switching future applications to Windows or Linux platforms.
SUPPORTED OPERATING SYSTEMSWINDOWS
HALCON 22.11.1.0 Steady has been compiled for the x64-win64 platform version for Windows 8.1/10 (x64 editions)/11 or Windows Server R2/2012 R2/2016/2019/2022 on Intel 64 or AMD 64 with SSE2 (AVX2 dispatch) processors.
LINUX
HALCON 22.11.1.0 Steady has been compiled for the following Linux platform versions:
x64 platform version for Linux x86_64, GLIBC_2.17, GLIBCXX_3.4.21, on Intel 64 or AMD 64 with SSE2 (AVX2 dispatch) processors
armv7a platform version for Linux armv7a, Kernel with hidraw support, hard-float ABI, GLIBC_2.17, GLIBCXX_3.4.21 on Armv7-A processors with NEON support
aarch64 platform version for Linux aarch64, Kernel with hidraw support, GLIBC_2.17, GLIBCXX_3.4.21 on AArch64 processors with AArch64 support
Please refer to the Installation Guide for detailed system requirements corresponding to the different Application Binary Interfaces.
MACOS
HALCON 22.11.1.0 Steady has been compiled for the x64 platform version of macOS 11, macOS 12 on Intel 64 with SSE2.
DETAILED DESCRIPTION OF CHANGES IN HALCON 22.11.1.0 STEADY
The changes in HALCON 22.11.1.0 Steady are described with respect to HALCON 20.11.3.
HDEVELOPNew FunctionalityAssistants
The image acquisition assistant has been extended with a tab for the MVTec EasyParams. These allow for easier setup of the most important camera settings.
The usability of the Parameter tab in the image acquisition assistant has been improved. Now, scrolling through the list does not change parameter values unintentionally. To use the mouse wheel to change parameter values, the control has to be focused first.
The usability of the Parameter tab in the image acquisition assistant has been improved. Now, there is a filter field in the top bar to find parameters more easily.
The Matching Assistant now has an option to generate code for shape-based matching that includes sample code for result access (row, column, angle, score, scale). This is useful as the new generic Shape Matching operators only return result handles.
The HDevelop Matching Assistant has been updated and now generates code using the generic shape model interface. The assistant also supports the logic of the generic model interface and uses the angle range as search parameters. The corresponding chapter explaining the Matching Assistant in the HDevelop User's Guide has been restructured and updated.
Note that the behavior of the Matching Assistant has been changed regarding the effect of 'Detect All': The value for 'Maximum Number of Matches' is not reset (except for descriptor-based matching) and the number of visible objects is only set if no value was specified before.
Code Export
Some HALCON/.NET examples that still used the HWindowControl have been updated to use HSmartWindowControl.
It is now possible to specify a namespace when exporting code to C++, C#, or Visual Basic .NET (both from the export dialog and from the command line).
GUI
Opening a variable inspect window interactively now docks it next to the variable window if it is the only inspect widget. Otherwise, the variable inspect is opened as another tab in the existing window.
HDevelop's canvas now supports zooming. The mouse wheel and shortcuts can be used to zoom in and out of the scene.
The select dialog for iconic objects has been improved. Now, empty arrays can be displayed.
The object select dialog is now docked next to the variable window or tabbed to a variable inspect window if the latter is already open.
The following zoom and auto-fit functionality has been added to the canvas, accessible via context menu:
Auto-fit By Zooming Out
If enabled, when a new window is opened far away from the other windows, the canvas is zoomed out to show all windows.
Auto-fit By Zooming In
If enabled, when a window placed far from another is closed, the canvas is automatically zoomed in to show the remaining window.
Fit All Graphics Windows In View
Zooms out the canvas such that all graphic windows are visible.
Working with the canvas has been improved. If "Auto-adapt Viewport" is enabled, now it is ensured that the active graphics window is visible on program stop.
HDevelop no longer supports the Italian language setting. The corresponding option is no longer available in the Preferences dialog.
Navigating in the canvas window has been improved. Now, it is possible to move the scene using the wheel button.
The names of the context menu entries "Add To Canvas" and "Float From Canvas" have been changed to "Attach To Canvas" and "Detach From Canvas".
The canvas reference point (0, 0) is now visualized by thicker lines if the Show Grid option is enabled.
Graphics windows opened via menu or via double-clicking an iconic variable are now added to the canvas if the canvas is already open.
The usability of the program window in the dark theme has been improved by adjusting the default colors.
The context menu of the canvas has been reordered. Further, the context menu entries of the contained graphics window have been extended and improved.
The usability of the canvas has been improved. Now, the canvas options are also accessible through the context menu of the graphics window if the graphics window is attached to the canvas.
On Windows and Linux, HDevelop relied on the regional format to decide which GUI language to use. Now, HDevelop uses the selected display language of the OS instead. Note that this is only relevant when HDevelop is started for the first time.
HDevelop now indicates the current and the selected lines with a rectangle. The color of the rectangle by default is the same as the color of the line numbers. The color of the rectangle can be configured in the preferences.
The usability of the language selection has been improved. Now, the language page permanently displays a reminder to restart HDevelop if the help language has been changed.
The usability of the language selection has been improved. Now, the entries for selecting the language have the same format.
The opacity (i.e., the alpha channel) of ROIs can now be configured in the ROI dialog.
The layout of the HDevelop dialog used to present the command line options (hdevelop -help) has been improved. Text is now displayed without wrapped lines, and marked text now stands out better.
The operator window has been improved. Now, the layout of the window can be switched between one and two columns.
The Visualization settings have been extended with a the new tab card 'Pixel Grid', which allows enabling and disabling the pixel grid and setting its color. Additionally, enabling and disabling the visualization of the pixel grid is accessible from the menu Visualization in HDevelop.
The tab card Used Modules in HDevelop's Properties dialog now informs about the usage of dynamically licensed operators.
The default layout of HDevelop has been changed. Instead of using the docked canvas, now a docked graphics window is used.
While the canvas is not yet used to visualize examples and programs by default, now the option to use the canvas for this visualization can be enabled on a new tab card in the Preferences dialog. In this case, as soon as a graphics window is opened in the script, a canvas will open to contain all graphics windows opened by the program. This helps visualize examples and programs better.
The visibility of check boxes in the dark theme of HDevelop has been improved.
Some widgets of HDevelop use splitters to resize a part of a widget or to switch the layout by double-clicking the splitter. The dots indicating the splitters are now also visible in the light mode.
Help
The footer of the HTML documentation now contains links to our LinkedIn and YouTube channels, which provide further interesting content, like the latest MVTec news or HALCON tutorial videos.
The appearance of the help has been improved. Now, the colors of the help window correspond to the selected theme.
The usage of the help has been improved. Now, the language of the operator reference can be selected independently of the language of the user interface.
On a fresh installation, the language of the operator reference will be the same as the language of the system if applicable. If the system language is not supported for the help, the default language will be English.
IDE
The usage of dictionaries inside HDevelop has been greatly improved. A new syntax can be used to easily create and initialize dictionaries. Further, a new syntax with dot notation can be used to set and get values from the dictionary. The new dictionary syntax is supported by the auto-completion in the program editor.
HDevelop now supports drag and drop for dictionaries files. The operator read_dict with the corresponding file name is inserted in the script. It is also possible to drop more than one dictionary file at once.
Dictionary handles are now directly visualized in the variable window and in the variable tooltip.
When hovering over dictionary keys, now a preview of the content of corresponding iconic elements is shown.
It is now easier to share the user experience with MVTec. An "Accept All" button has been added to the telemetry dialog.
When hovering over parts of dictionary initializers of the form dict{...} in HDevelop, the value of such partial expressions is now shown. Additionally, dictionary initializers now return a value with the semantic type 'dict'.
Auto-completion in HDevelop now considers operator and procedure input parameter types when showing suggestions for dictionary keys.
HDevelop's behavior on dropping files has been changed. Previously, it was possible to drag and drop multiple .hdev programs, and it was possible to drag and drop multiple different types of files (.hdict, .hdev, etc.). Now, these actions lead to an error.
Dropping a single image on HDevelop now opens a dialog, and a single line of code may be inserted, but the code line is no longer executed. Dropping files on HDevelop no longer leads to the execution of the inserted code lines.
HDevelop now supports drag and drop for DL model files. The operator read_dl_model with the corresponding file name is inserted in the script. It is also possible to drop more than one file at once.
HDevelop now supports drag and drop for 3D object model files. The operator read_object_model_3d with the corresponding file name is inserted in the script. It is also possible to drop more than one dictionary file at once.
Language
The new operators dev_set_system and dev_get_system allow programmatic control of engine system parameters.
The procedures read_dict_tuple and read_dict_object have been deprecated. Examples now use the new dictionary expressions to interact with dictionaries. The new example hdevelop/Tuple/Data-Containers/dictionary_migration.hdev compares the old and new approaches.
HDevelop now handles numeric boundaries better. In particular:
HDevelop program lines that contain integer literals that cannot be represented as Hlong without loss are now marked as invalid.
HDevelop program lines that contain float literals that cannot be represented as double without loss are now marked as invalid.
tuple_number now raises an error if a string containing an integer cannot be represented as Hlong without loss.
tuple_number now converts strings containing integers regardless of leading and or trailing spaces.
The new operator tuple_is_nan_elem checks elements of a tuple whether they are Not-a-Numbers ("NaNs").
The new operator tuple_constant resolves the value of a constant at runtime.
There are a number of new constants such as H_INT_MIN and H_FLOAT32_EPSILON; see the reference manual entry of tuple_constant for a full list.
The error message H_ERR_TUPLE_DTLFTHV has been improved to include string-to-float conversion.
The HDevelop in-line operation for tuple_select has been improved. So far, a number of values to be selected greater than 1 could only be expressed with a double set of brackets (e.g., Selected := T[[idx1,idx2]]). Now, a single set of brackets is sufficient (e.g., Selected := T[idx1,idx2]).
Miscellaneous
HDevelop now supports telemetry. This functionality can be configured via the Telemetry tab in the Preferences dialog.
The inspection of dictionaries has been improved. Now, if a tuple contains handles only, double-clicking it in the variable window opens a handle inspect widget.
HALCON now officially supports macOS 11 and macOS 12 on Intel® processors. Library and HDevelop IDE are also executable on Apple Silicon processors via the Rosetta 2 emulator. Note that this change affects the compatibility. Read more.
HDevelop has been extended with a feedback functionality. To send feedback to MVTec, click the Submit Feedback icon in the menu bar.
The performance of HDevelop when dealing with tuples that contain either a very large number of elements or very long strings has been improved.
The command line interface has been improved. Now, it is possible to convert all files contained in a directory in a single step. For example, it is now possible to protect all files in a directory with one call.
Bug FixesAssistants
There was unexpected behavior in the Parameter tab of the image acquisition assistant when a parameter change caused another parameter to become unreadable. This problem has been fixed. Now, the unreadable parameter is disabled.
The Parameter tab of the image acquisition assistant listed commands permanently even though they were currently not available. This problem has been fixed.
The Parameter tab of the image acquisition assistant listed write-only parameters permanently even though a different category was chosen. This problem has been fixed.
Code Export
Using par_start with a global variable as thread ID could cause a crash in exported C code. This problem has been fixed.
GUI
When the Browse HDevelop Example Programs dialog of a newly installed HDevelop was opened for the first time, no categories were selected. Thus, no examples were displayed until the user selected a category, which made working with the example browser somewhat awkward. This problem has been fixed. Now, the Example dialog is opened for the first time with all categories preselected.
In rare cases, HDevelop displayed valid code lines in the color used for invalid lines. This problem has been fixed.
The settings dialog of the output console was not restored after an application restart. This problem has been fixed.
The used fonts for the buttons of the User Interface > Fonts settings in the preferences dialog did not always correspond to the selected font. This problem has been fixed.
Navigating via Windows shortcuts when opening or saving files in HDevelop did not work. This problem has been fixed.
While a program was running, the mouse cursor did not adapt to possible user actions such as resizing, as it was constantly in a "busy" state. To improve the usability of the GUI, running a program no longer forces the mouse cursor into a busy state. Instead, the execution status is now more prominently indicated in the program window itself (previously it was only indicated in the lower left status bar corner).
The keyboard shortcuts for panning an image or moving the mouse pointer did not work for graphics windows located in the canvas while a graphics window was selected. This problem has been fixed.
Resetting a program also closed an opened object select dialog. This problem has been fixed.
When hovering the title bar of the graphics window within the canvas, the mouse cursor changed into the hand shape although it is not possible to pan the window. This problem has been fixed. Now, the cursor keeps its standard shape.
When opening a variable inspect window, some visual artifacts appeared temporarily. This problem has been fixed.
Under Linux, the help window sometimes did not open the first time. This problem has been fixed.
The tab order in the Preferences > General Options dialog was confusing. This problem has been fixed.
The preview of the visualization settings in the Preferences dialog was distorted when resizing the window. This problem has been fixed.
When scrolling the canvas to an area containing all windows, the scroll bars were not removed, making it look like there was still a window to scroll to. This problem has been fixed.
For a graphics window present in the canvas, wrong image coordinates were displayed when pressing Ctrl and moving the mouse over the graphics window frame (i.e., outside the image). This problem has been fixed. Now, no coordinates are displayed in this case.
Under Linux, the HDevelop assistants opened and reopened at unexpected positions and with unexpected sizes. This problem has been fixed.
When using the Window > Restore Default Layout use > Canvas option, unexpected zooming could happen. Further, the view could jump slightly when zooming or resizing the canvas. These problems have been fixed.
On the canvas, the text displayed on the zoom button sometimes was bigger than the zoom button itself. This problem has been fixed.
The resizing of windows located in the canvas has been improved. Previously, windows may not have been resized correctly if the canvas was zoomed in or out. Now, the resizing works as expected.
Some options of the Telemetry dialog were not translated. This problem has been fixed.
Adding a graphics window to the canvas via the main window menu could result in the graphics window not being fully visible. This problem has been fixed.
When dragging a corrupt image file (e.g., a PNG file with invalid content) on HDevelop, the Read Image dialog opened but clicking the OK button did nothing. This problem has been fixed.
The program window scrolled randomly in some cases, after the the program counter had been set. This problem has been fixed. Now, the scroll behavior of the program window is smooth, and jumps will only occur in expected situations.
Various windows erroneously changed the font for values when being docked, tabbed, or floated. This problem has been fixed.
Importing or exporting layout settings from the Preferences dialog caused a crash. This problem has been fixed.
Changing the active graphics window by clicking on the lamp icon did not always represent the correct state. This problem has been fixed.
Adding a graphics window to the canvas could lead to unusable canvas options. This problem has been fixed.
Floating windows could be opened at invalid screen coordinates. This problem has been fixed.
When using HDevelop with the light theme, the separator line between the editor and the profiler was not shown. This problem has been fixed.
In rare cases (negative coordinates), floating windows were not opened on the correct display. This problem has been fixed.
The initial layout of the Create Procedure dialog was incorrect. This problem has been fixed.
The global and breakpoint icons of iconic variables in HDevelop's variable window were rendered too small. This problem has been fixed.
Help
The path of the extension package documentation was wrong when trying to display it via the HDevelop help. This problem has been fixed.
Pressing F1 did not properly bring up the help page for the Export Language, Read Image, Properties, and Print dialog. This problem has been fixed.
IDE
The auto completion did not work if the text cursor was not visible (e.g., if the code was longer than the editor line). This problem has been fixed.
The colors of the program editor were reset and not imported from previous versions. This problem has been fixed.
HDevelop sometimes highlighted lines incorrectly. This problem has been fixed.
HDevelop's autocompletion did not react to typing the string dict at a position where an operator or procedure name was expected. This problem has been fixed.
HDevelop procedures were sorted into the operator menu according to their English chapter entries, instead of those for the currently selected help language. This problem has been fixed.
In rare cases, HDevelop's autocompletion erroneously removed one or more letters of the code that should be completed. This problem has been fixed.
HDevelop's autocompletion offered wrong suggestions under the following conditions:
These problems have been fixed.
Attempting to complete a vector or dictionary expression
Completion position after a line continuation character
Completion position not at the end of the code line
The completion when pressing Tab did not always stick to the written code. For example, if a variable bab existed and in the next line the user typed ab, then the completion result was bab instead of the correct ab. This problem has been fixed.
For some statements, a wrong color code was used internally, which could cause lines to be invisible in the program editor. This problem has been fixed.
Strings containing characters from right-to-left scripts such as Arabic showed inconsistent behavior, potentially reversing direction when edited in the operator window or the variable inspect window. This problem has been fixed.
Control variables can share common contents via handles. If such a shared content was modified, the variable window updated only the variable that was involved in the modifying operation, but not all other variables that shared the modified content. This problem has been fixed. Note that for technical reasons, the content of handles only gets updated when the program execution stops but not while a program is running continuously. This applies to the variable window as well as to handle inspect windows.
The semantic type of handles was not always correctly shown in the variable window and in the handle inspect window if the handle was part of a larger tuple. This problem has been fixed. Now, the correct semantic type is shown.
HDevelop's autocompletion suggestion list and tool tip were not always hidden when they should have been. Namely, this happened when
These problems have been fixed.
scrolling the program text such that the edited line left the visible area
the edited line was changed while the suggestion list and/or the tool tip were visible.
In rare cases, closing a 3D object model visualization window that was opened from inside a handle inspect window could crash HDevelop. This problem has been fixed.
Enabling Record Interactions from the menu Visualization and one of the Visualization menu actions (e.g., Paint > 3D_plot) lead to a crash while closing HDevelop. This problem has been fixed.
Language
A program line with a C++ comment together with a line continuation did not work. This problem has been fixed. Now, the cases that worked before work again.
read_image(Image, // my comment 'patras')
However, combining C++ comments with line continuations is not recommended, as this does not work in all cases and can lead to runtime errors, such as in the case of string concatenations:
a := 'pat' // my comment 'ras'
Procedures
In the dark theme, code blocks within the procedure documentation were not legible. This problem has been fixed.
In rare cases, adding a new parameter in HDevelop's Edit Procedure Interfaces dialog could cause additional, unnamed parameters and even crashes. This problem has been fixed.
Several procedures were missing a group assignment or were incorrectly assigned. These problems have been fixed.
Creating a new procedure from a code block containing invalid lines could cause a crash. This problem has been fixed.
Miscellaneous
Renaming procedure parameters from the Edit Procedure Interfaces dialog sometimes changed the indentation of affected code lines. This problem has been fixed.
In some cases, a security alert appeared during the 'Check for Update' action in HDevelop as a webpage was called with HTTP instead of HTTPS. This problem has been fixed.
When using find_bar_code or find_data_code_2d with multiple threads within HDevelop, an automatic program stop could cause incorrect results. This problem has been fixed.
When using display operations with multiple threads within HDevelop, an automatic program stop could cause error messages in rare cases. This problem has been fixed.
There could be a decrease in performance when two or more variable inspect widgets were tabbed together. This problem has been fixed.
In rare cases, restoring the window layout could crash HDevelop. This problem has been fixed.
HDevelop Example ProgramsNew HDevelop Example Programs
hdevelop/3D-Matching/3D-Gripping-Point-Detection/3d_gripping_point_detection_workflow.hdev
hdevelop/3D-Object-Model/Transformations/smooth_object_model_3d.hdev
hdevelop/Applications/Measuring-2D/pm_measure_board.hdev
hdevelop/Applications/Position-Recognition-2D/matching_image_border.hdev
hdevelop/Applications/Robot-Vision/pick_and_place_2d.hdev
hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_stationary_cam_approx_sphere.hdev
hdevelop/Deep-Learning/AnomalyDetection/dl_anomaly_detection_global_context_inference.hdev
hdevelop/Deep-Learning/AnomalyDetection/dl_anomaly_detection_global_context_workflow.hdev
hdevelop/Deep-Learning/Classification/optimize_dl_model_for_inference_classification.hdev
hdevelop/Deep-Learning/Framework/create_dl_model_classification.hdev
hdevelop/Deep-Learning/Framework/create_dl_model_segmentation.hdev
hdevelop/Deep-Learning/Instance-Segmentation/dl_instance_segmentation_workflow.hdev
hdevelop/Filters/Enhancement/equ_histo_image_rect.hdev
hdevelop/Identification/Data-Code/print_quality_reflectance_reference.hdev
hdevelop/Matching/Correlation-Based/ncc_matching_workflow.hdev
hdevelop/Matching/Shape-Based/adapt_shape_model_high_noise.hdev
hdevelop/Matching/Shape-Based/alignment_for_ocr_in_semiconductor.hdev
hdevelop/Matching/Shape-Based/create_shape_model_xld.hdev
hdevelop/Matching/Shape-Based/find_aniso_shape_model.hdev
hdevelop/Matching/Shape-Based/find_generic_shape_model_workflow.hdev
hdevelop/Matching/Shape-Based/find_generic_shape_model_xld_workflow.hdev
hdevelop/Matching/Shape-Based/find_shape_low_contrast_high_noise.hdev
hdevelop/OCR/Deep-OCR/deep_ocr_prelabel_dataset.hdev
hdevelop/OCR/Deep-OCR/deep_ocr_recognition_training_workflow.hdev
hdevelop/System/Serialized-Item/encrypt_decrypt_serialized_item.hdev
hdevelop/Tuple/Data-Containers/dictionary_migration.hdev
hdevelop/Tuple/Type/tuple_numeric_limits.hdev
solution_guide/basics/variation_model_illumination.hdev
solution_guide/basics/variation_model_single.hdev
solution_guide/matching/align_measurements.hdev
solution_guide/matching/create_roi_via_vision.hdev
solution_guide/matching/first_example_shape_matching.hdev
solution_guide/matching/multiple_models.hdev
solution_guide/matching/multiple_objects.hdev
solution_guide/matching/process_shape_model.hdev
solution_guide/matching/rectify_results.hdev
solution_guide/matching/reuse_model.hdev
solution_guide/matching/synthetic_circle.hdev
New Functionality
All deep learning examples have been adapted to the new dict syntax. In particular, the operators create_dict, set_dict_tuple, get_dict_tuple, get_dict_object have been replaced by the new dict syntax.
The new HDevelop example program dl_anomaly_detection_global_context_inference.hdev shows Global Context Anomaly Detection by performing inference on a new dataset "pcb boards".
Bug Fixes
The HDevelop example program hdevelop/Applications/OCR/ocr_gradient_feature.hdev has been rewritten to not include legacy operators.
The HDevelop example program hdevelop/Deep-Learning/AnomalyDetection/dl_anomaly_detection_workflow.hdev created DL preprocessing parameters with wrong image_range_min and image_range_max values, stored in DLPreprocessParam. This problem has been fixed. Now, DLPreprocessParam uses the same image_range_min and image_range_max values as the anomaly detection model.
The example hdevelop/Segmentation/Threshold/fast_threshold.hdev has been removed.
The following deep learning examples did not use the same device for evaluation as in the training mode:
This problem has been fixed.
dl_classification_workflow.hdev
dl_detection_with orientation_workflow.hdev
dl_detection_workflow.hdev
dl_segmentation_workflow.hdev
The HDevelop example mov_region.hdev was improved in regard to usability.
HDEVENGINEBug Fixes
HDevEngine leaked memory when parsing dictionaries in dot notation. This problem has been fixed.
HALCON LIBRARYSpeedup
The arithmetic image operators abs_diff_image, add_image, scale_image, and sub_image are now faster for various image types. For Intel compatible processors with SSE/SSE2 or AVX/AVX2 support, the following speedups have been measured:
OPERATOR | RESOLUTION | TYPE | SPEEDUP UP TO |
abs_diff_image | 1600x1200 | byte | 21% |
abs_diff_image | 1600x1200 | int1 | 28% |
abs_diff_image | 1600x1200 | int2 | 37% |
abs_diff_image | 1600x1200 | int4 | 65% |
abs_diff_image | 1600x1200 | real | 54% |
add_image | 1600x1200 | byte | 63% |
add_image | 1600x1200 | int4 | 36% |
add_image | 1600x1200 | int8 | 16% |
scale_image | 1600x1200 | byte | 13% |
scale_image | 1600x1200 | int1 | 72% |
scale_image | 1600x1200 | int2 | 169% |
scale_image | 1600x1200 | int4 | 14% |
scale_image | 1600x1200 | int8 | 20% |
sub_image | 1600x1200 | byte | 18% |
sub_image | 1600x1200 | int4 | 31% |
sub_image | 1600x1200 | int8 | 18% |
bandpass_image is now faster for byte images on processors that support the AVX2 or NEON instruction set. In particular, the following speedups can be expected for a 512x512 image:
INSTRUCTIONS | SPEEDUP |
AVX2 | up to 30 % |
NEON | up to 290 % |
bandpass_image is now faster for byte and uint2 images on x64-based systems. In particular, the following speedups can be expected for a 512x512 image:
IMAGE TYPE | SPEEDUP |
byte | up to 760% |
uint2 | up to 440% |
binary_threshold with 'Method' set to 'max_separability' is now faster up to 18% for 'byte' images on Intel compatible processors that support AVX512BW.
The following operators are now faster on Windows platforms:
OPERATOR | SPEEDUP |
connection | up to 60% |
area_center | up to 50 % |
apply_bead_inspection_model | up to 45% |
photometric_stereo | up to 13% |
find_ncc_model find_ncc_models | up to 10% |
find_text | up to 10% |
find_bar_code | up to 10% |
find_box_3d | up to 10% |
emphasize is now faster for byte images if the parameter 'Mult' is not 1.0 (or very close to 1.0). The speedup is up to 100% depending on the mask size.
emphasize is now faster for int2, uint2, and byte images. In particular, the following speedups can be expected for a 512x512 image:
IMAGE TYPE | FILTER SIZE | FACTOR | SPEEDUP |
uint2 | 3x3 | 1.0 | up to 115% |
int2 | up to 30% | ||
byte | up to 265% | ||
uint2 | 5x5 | up to 20% | |
int2 | up to 30% | ||
byte | up to 195% | ||
byte | 15x15 | up to 90% | |
uint2 | 3x3 | 0.7 | up to 10% |
byte | up to 10% | ||
uint2 | 5x5 | up to 5% | |
int2 | up to 5% | ||
byte | up to 10% | ||
byte | 15x15 | up to 10% |
highpass_image is now faster for byte images. In particular, the following speedups can be expected for a 512x512 image:
FILTER SIZE | SPEEDUP |
3x3 | up to 260% |
9x9 | up to 65% |
Erosion operations with masks that have at most one run per line are now significantly faster. E.g., erosion_circle is now faster up to 140% with radius 5 and up to 70% with radius 45. Other affected operations with moderate speedup are opening and closing operations, bottom_hat, boundary, hit_or_miss, and top_hat.
The Data Matrix ECC 200 reader on a large benchmark data set is faster by 9% on average, while the medium processing time improves by 14%.
Further, the find operators in shape-based matching are faster by 20% on a large benchmark data set, while the medium processing time improves by 5.3%.
find_data_code_2d is now up to 120% faster for QR Code symbologies on x64-based systems compared to HALCON 20.11. Moreover, it is up to 60% faster on Arm-based systems for QR Code and Micro QR Code symbols. The expected speedup strongly depends on the image content.
get_data_code_2d_results is now faster for various print quality inspection standards supported by HALCON, including ISO/IEC 15415, ISO/IEC TR29158, SEMI T10, and AIM DPM-1-2006. Compared to HALCON 20.11, the PQI for Data Matrix ECC 200 codes with a module size of at least 10 pixels (robust mode) is up to 25% faster. Speedup for other code types may differ. The speedup heavily depends on the resolution and size of the data code. Furthermore, get_bar_code_result is now faster for the print quality inspection standard ISO/IEC 15416. The speedup also heavily depends on the size and resolution of the bar code.
get_data_code_2d_results is now faster on multi-core systems for various print quality inspection standards supported by HALCON, including ISO/IEC15415, ISO/IEC TR29158, SEMI T10, and AIM DPM-1-2006. Further, when parallelized, PQI on Data Matrix ECC 200 codes with a module size of approximately 18 pixels is up to 40% faster compared to HALCON 20.11. Speedup for other code types may differ. The speedup heavily depends on the resolution and size of the data code.
gray_erosion_shape, gray_dilation_shape, gray_opening_shape and gray_closing_shape with 'MaskShape' set to 'rhombus' or 'octagon' are now faster for 'byte' and 'uint2' images on Intel compatible processors that support SSE or AVX2.
The following speedups have been measured:
IMAGERESOLUTION | MASKSIZE | SHAPE | MORPHOP | THREADNUM | INSTRUCTIONS | TYPE | SPEEDUP |
1600x1200 | 3x3 | rhombus | erosion/dilation | 1 | AVX2 | byte | 103% |
1600x1200 | 3x3 | rhombus | erosion/dilation | 1 | SSE2 | byte | 19% |
1600x1200 | 7x7 | rhombus | erosion/dilation | 1 | AVX2 | byte | 79% |
1600x1200 | 7x7 | rhombus | erosion/dilation | 1 | SSE2 | byte | 13% |
1600x1200 | 11x11 | rhombus | erosion/dilation | 1 | AVX2 | byte | 82% |
1600x1200 | 11x11 | rhombus | erosion/dilation | 1 | SSE2 | byte | 13% |
1600x1200 | 3x3 | rhombus | erosion/dilation | 8 | AVX2 | byte | 139% |
1600x1200 | 3x3 | rhombus | erosion/dilation | 8 | SSE2 | byte | 56% |
1600x1200 | 7x7 | rhombus | erosion/dilation | 8 | AVX2 | byte | 87% |
1600x1200 | 7x7 | rhombus | erosion/dilation | 8 | SSE2 | byte | 34% |
1600x1200 | 11x11 | rhombus | erosion/dilation | 8 | AVX2 | byte | 109% |
1600x1200 | 11x11 | rhombus | erosion/dilation | 8 | SSE2 | byte | 23% |
ImageResolution | MaskSize | Shape | MorphOp | ThreadNum | Instructions | Type | SpeedUp |
1600x1200 | 3x3 | rhombus | opening/closing | 1 | AVX2 | byte | 80% |
1600x1200 | 3x3 | rhombus | opening/closing | 1 | SSE2 | byte | 13% |
1600x1200 | 7x7 | rhombus | opening/closing | 1 | AVX2 | byte | 73% |
1600x1200 | 7x7 | rhombus | opening/closing | 1 | SSE2 | byte | 11% |
1600x1200 | 11x11 | rhombus | opening/closing | 1 | AVX2 | byte | 77% |
1600x1200 | 11x11 | rhombus | opening/closing | 1 | SSE2 | byte | 11% |
1600x1200 | 3x3 | rhombus | opening/closing | 8 | AVX2 | byte | 71% |
1600x1200 | 3x3 | rhombus | opening/closing | 8 | SSE2 | byte | 53% |
1600x1200 | 7x7 | rhombus | opening/closing | 8 | AVX2 | byte | 56% |
1600x1200 | 7x7 | rhombus | opening/closing | 8 | SSE2 | byte | 18% |
1600x1200 | 11x11 | rhombus | opening/closing | 8 | AVX2 | byte | 84% |
1600x1200 | 11x11 | rhombus | opening/closing | 8 | SSE2 | byte | 11% |
ImageResolution | MaskSize | Shape | MorphOp | ThreadNum | Instructions | Type | SpeedUp |
1600x1200 | 3x3 | octagon | erosion/dilation | 1 | AVX2 | byte | 90% |
1600x1200 | 3x3 | octagon | erosion/dilation | 1 | SSE2 | byte | 19% |
1600x1200 | 7x7 | octagon | erosion/dilation | 1 | AVX2 | byte | 62% |
1600x1200 | 7x7 | octagon | erosion/dilation | 1 | SSE2 | byte | 5% |
1600x1200 | 11x11 | octagon | erosion/dilation | 1 | AVX2 | byte | 81% |
1600x1200 | 11x11 | octagon | erosion/dilation | 1 | SSE2 | byte | 14% |
1600x1200 | 3x3 | octagon | erosion/dilation | 8 | AVX2 | byte | 164% |
1600x1200 | 3x3 | octagon | erosion/dilation | 8 | SSE2 | byte | 54% |
1600x1200 | 7x7 | octagon | erosion/dilation | 8 | AVX2 | byte | 74% |
1600x1200 | 7x7 | octagon | erosion/dilation | 8 | SSE2 | byte | 22% |
1600x1200 | 11x11 | octagon | erosion/dilation | 8 | AVX2 | byte | 43% |
1600x1200 | 11x11 | octagon | erosion/dilation | 8 | SSE2 | byte | 34% |
ImageResolution | MaskSize | Shape | MorphOp | ThreadNum | Instructions | Type | SpeedUp |
1600x1200 | 3x3 | octagon | opening/closing | 1 | AVX2 | byte | 81% |
1600x1200 | 3x3 | octagon | opening/closing | 1 | SSE2 | byte | 13% |
1600x1200 | 7x7 | octagon | opening/closing | 1 | AVX2 | byte | 67% |
1600x1200 | 7x7 | octagon | opening/closing | 1 | SSE2 | byte | 4% |
1600x1200 | 11x11 | octagon | opening/closing | 1 | AVX2 | byte | 78% |
1600x1200 | 11x11 | octagon | opening/closing | 1 | SSE2 | byte | 10% |
1600x1200 | 3x3 | octagon | opening/closing | 8 | AVX2 | byte | 135% |
1600x1200 | 3x3 | octagon | opening/closing | 8 | SSE2 | byte | 10% |
1600x1200 | 7x7 | octagon | opening/closing | 8 | AVX2 | byte | 58% |
1600x1200 | 7x7 | octagon | opening/closing | 8 | SSE2 | byte | 17% |
1600x1200 | 11x11 | octagon | opening/closing | 8 | AVX2 | byte | 52% |
1600x1200 | 11x11 | octagon | opening/closing | 8 | SSE2 | byte | 10% |
inner_rectangle1 is now faster by up to 17000%.
interleave_channels now also supports uint2 image types and is able to make use of the SSE2/SSSE3 instruction sets. This results in speedups of up to 85%.
The operator laplace is now faster by up to 45% on Intel processors that support AVX2.
map_image with map type 'coord_map_sub_pix', 'bilinear' and 'nearest_neighbor' is now faster for 'byte', 'uint2' and 'real' images on Intel compatible processors that support SSE2 or AVX2.
The following speedups have been measured:
IMAGERESOLUTION | MAPPING | INSTRUCTIONS | TYPE | SPEEDUP |
1600x1200 | coord_map_sub_pix | AVX2 | byte | 139% |
1600x1200 | coord_map_sub_pix | AVX2 | uint2 | 134% |
1600x1200 | coord_map_sub_pix | AVX2 | real | 232% |
ImageResolution | Mapping | Instructions | Type | SpeedUp |
1600x1200 | bilinear | AVX2 | byte | 28% |
1600x1200 | bilinear | AVX2 | uint2 | 36% |
1600x1200 | bilinear | AVX2 | real | 32% |
ImageResolution | Mapping | Instructions | Type | SpeedUp |
1600x1200 | nearest_neighbor | AVX2 | byte | 1% |
1600x1200 | nearest_neighbor | AVX2 | uint2 | 0% |
1600x1200 | nearest_neighbor | AVX2 | real | 20% |
The performance of optical_flow_mg has been improved. The operator is now up to 23% faster in serial execution and up to 61% faster with internal parallelization enabled. Additionally, the new parameter 'parallel_solver' can be used to further speed up the 'fdrig' solver with internal parallelization for a total of 83% over the previous version. Note that this change affects the compatibility. Read more.
prepare_object_model_3d is now up to 34% faster.
xyz_to_object_model_3d is up to 70% faster for real images.
zoom_image_factor is up to 11% faster for uint2 images.
sobel_amp with FilterType='sum_abs' is now faster on processors that support the AVX512BW instruction set. Compared to HALCON 20.11, the speedup is up to 23% for byte images.
sobel_amp with FilterType='sum_sqrt' is now faster on processors that support the AVX512BW instruction set. Compared to HALCON 20.11, the speedup is up to 67% for byte images.
sobel_dir with FilterType='sum_sqrt' is now faster on processors that support the AVX512BW instruction set. Compared to HALCON 20.11, the speedup is up to 67%.
zoom_image_factor is now faster for images of type byte by up to 20% for 'Interpolation' set to 'nearest_neighbor'.
New Functionality3D
smooth_object_model_3d now includes a new smoothing mode that uses the XYZ-mapping of the 3D object model to speed up the smoothing. This mode can be activated with the two new methods 'xyz_mapping' and 'xyz_mapping_compute_normals'.
The new HDevelop example program hdevelop/Object-Model-3D/Transformations/smooth_object_model_3d.hdev shows the different smoothing strategies that are supported by smooth_object_model_3d.
vector_to_pose has been extended with the ability to determine the pose for line-scan cameras with perspective (entocentric) lenses. The parameter Method must be set to 'line_scan' for this type of cameras. The documentation has been extended accordingly.
get_stereo_model_param has been extended with the parameters 'from_cam_param_rect N', 'to_cam_param_rect N', 'from_cam_pose_rect N', 'to_cam_pose_rect N', and 'rel_pose_rect N' to get the camera parameters, poses, and relative poses of camera pair N, respectively.
The operator sample_object_model_3d now supports the mode furthest_point and furthest_point_compute_normals. For this mode, the number of output points is specified. The method then iteratively adds the point to the output that is furthest away from all already added points until the desired number of points is reached.
HALCON has been extended with the operator point_pluecker_line_to_hom_mat3d that computes a rigid 3D transformation from point-to-line correspondences. The lines are specified as Plücker coordinates.
HALCON has been extended with the operators points_to_pluecker_line, point_direction_to_pluecker_line, pluecker_line_to_points, and pluecker_line_to_point_direction. They can be used to convert 3D line representations to and from Plücker coordinates. In particular, points_to_pluecker_line convert lines given by two points on the line to Plücker coordinates, while point_direction_to_pluecker_line converts lines given by a point on the line and the line direction to Plücker coordinates. Furthermore, pluecker_line_to_points converts lines given in Plücker coordinates to lines given by two points on the line, while pluecker_line_to_point_direction converts lines given in Plücker coordinates to lines given by a point on the line and the line direction.
HALCON has been extended with the operators distance_point_pluecker_line and distance_point_line. They compute the distance of 3D points from 3D lines. In particular, distance_point_pluecker_line computes the distance for lines represented by Plücker coordinates, while distance_point_line computes the distance for lines represented by two points on the line.
HALCON has been extended with an operator dual_quat_trans_point_3d that transforms 3D points using a rigid 3D transformation that is specified as a dual quaternion.
HALCON has been extended with DL-based 3D Gripping Point Detection.
HALCON provides a pretrained deep learning model that can detect suitable gripping points without the need to provide a 3D model of the objects that are to be targeted. The new deep learning model can be found in the directory %HALCONROOT%/dl and is called pretrained_dl_3d_gripping_point.hdl. This method is integrated into the deep learning inference workflow.
The new HDevelop example
hdevelop/3D-Matching/3D-Gripping-Point-Detection/3d_gripping_point_detection_workflow.hdev
has been added to show how to use this feature in HALCON. For this example, a new set of images has been added. It is located in the example images directory named 3d_machine_vision/gripping_point_detection.
The following deep learning procedures have been extended:
The following new procedures are now available:A new reference manual chapter "3D-Matching/3D-Gripping-Point-Detection" has been added. The reference manual chapters "Deep Learning", "Deep Learning/Model", as well as the operator entries for get_dl_model_param, read_dl_model, and set_dl_model_param have been extended. They now describe how to use the method and the corresponding parameters.
preprocess_dl_model_3d_data
gen_dl_samples_3d_gripping_point_detection
gen_dl_3d_gripping_points_and_poses
estimate_dl_3d_sorting_direction
preprocess_dl_samples
create_dl_preprocess_param
create_dl_preprocess_param_from_model
dev_display_dl_data
Bar Code
find_bar_code now offers the possibility to specify the maximum allowed barcode width. For this, the new generic parameter 'barcode_width_max' must be set to an appropriate width in pixels via set_bar_code_param.
The print quality inspection of 2D codes according to ISO/IEC15415 and of 1D codes according to ISOIEC15416 has been extended with the parameters 'quality_isoiec15415_reflectance_reference' and 'quality_isoiec15416_reflectance_reference', respectively, to set a calibrated reference gray value for print quality inspection. This reference gray value is used to assess certain grades, e.g., Symbol Contrast.
get_bar_code_result was extended with the generic parameter 'decode_feature' indicating which feature was used for successfully decoding each result.
The bar code reader is more robust in regard to blurred Code 128/GS1-128 codes. Now, codes with a larger amount of blur can be read.
The HDevelop example program hdevelop/explore_halcon.hdev as well as the custom HPeek demo have been extended with two new images of blurred Code 128/GS1-128 codes:
images/barcode/code128/code128_blurred.png
images/barcode/gs1_128/gs1_128_blurred.png
Calibration
The new HDevelop example program hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_stationary_cam_approx_sphere.hdev shows how to perform a hand-eye calibration for a robot and a stationary 3D sensor with a calibration sphere held by the robot.
get_calib_data_observ_contours has been extended with a parameter 'marks_with_hole', which allows returning only marks detected as having holes. Further, find_calib_object can now easier detect calibration patterns. Note that this change affects the compatibility. Read more.
Color Processing
The handle inspect window can now show details of color transformation lookup tables (semantic type color_trans_lut). The operators get_handle_param and get_handle_tuple have been extended accordingly.
Data Code
The Data Matrix ECC 200 reader has been improved for small codes. Now, challenging Data Matrix ECC 200 codes with symbol sizes smaller than 16 x 16 can be read more robustly.
The algorithm to determine the module grid for print quality grading of Data Matrix ECC 200 codes can now be set with the new set_data_code_2d_param parameter 'quality_isoiec15415_decode_algorithm'. In addition to the 'robust' mode, the 'reference' mode is intended for grading with standard-compliant camera and lighting setup.
The following examples have been adapted to use the new mode:
hdevelop/Identification/Data-Code/ecc200_print_quality.hdev
hdevelop/Identification/Data-Code/print_quality_reflectance_reference.hdev
find_data_code_2d has been enhanced for large images with many Data Matrix ECC 200 codes and/or a highly structured background. For these images, the number of code candidates can become very high, especially with certain parameter settings like 'maximum_recognition'. For performance reasons, the Data Matrix ECC 200 reader always stopped after 10000 processed candidates. Now, the number of considered candidates can be increased by setting the find_data_code_2d parameter 'symbol_search' to 'exhaustive'. Then, all candidates will be taken into account if needed.
It is now possible to set all trainable data code parameters to trained by passing 'all' to the set_data_code_2d_param parameter 'trained'.
The process of locating a Data Matrix ECC 200 code for print quality grading has been improved. As a consequence, print quality grading on Data Matrix ECC 200 codes is now slightly more robust.
The print quality inspection of 2D codes according to ISO/IEC15415 and of 1D codes according to ISOIEC15416 has been extended with the parameters 'quality_isoiec15415_reflectance_reference' and 'quality_isoiec15416_reflectance_reference', respectively, to set a calibrated reference gray value for print quality inspection. This reference gray value is used to assess certain grades, e.g., Symbol Contrast.
For print quality grading of Data Matrix ECC 200 codes, HALCON now supports the additional reflectance check according to ISO/IEC 15415:2011 7.7. The new get_data_code_2d_results parameter 'quality_isoiec15415_additional_reflectance_check' has been added to obtain the result of this check.
For some cases of degraded Data Matrix ECC 200 codes with damaged solid pattern, find_data_code_2d is more robust now. Additionally, the module position determination of get_data_code_2d_results for the print quality inspection is improved for such cases.
The procedure dev_display_data_code_2d_print_quality_results has been extended with the generic parameter 'grid'. If set to 'true', dev_display_data_code_2d_print_quality_results displays a line-based grid to visualize the base for print quality grading.
For the Data Matrix ECC 200 print quality inspection, determining the solid pattern width (as part of the finder pattern) has been improved.
HALCON has been extended with a procedure grade_data_code_2d, which performs print quality inspection on data codes and returns all results in a dictionary. The quality grades can be represented either as numbers (0-4) or letters (F-A). Furthermore, in addition to the grades, all existing intermediate results can be returned.
The HDevelop example programs
have been adapted to demonstrate the usage of the procedure.
hdevelop/Identification/Data-Code/ecc200_print_quality.hdev
hdevelop/Identification/Data-Code/ecc200_print_quality_intermediate_results.hdev
hdevelop/Identification/Data-Code/print_quality_reflectance_reference.hdev
In dev_display_data_code_2d_print_quality_results, the visualization of the module grid for Data Matrix ECC 200 codes has been removed. Now, only the module centers can be visualized.
The determination of the module grid for print quality inspection has been improved for Data Matrix ECC 200 codes. In addition, the grid center determination on the alternating pattern has been adapted to follow the reference decode algorithm described in ISO/IEC 16022:2006/Cor.2:2011.
For Data Matrix ECC 200 codes, print quality inspection (get_data_code_2d_results) can now be performed even if the data code model persistence has been set to -1. This means that the memory requirements of find_data_code_2d can be reduced, while the print quality can still be determined afterwards.
Deep Learning
create_dl_layer_loss_distance has been improved by making the input node DLLayerWeights optional. Now, passing an empty tuple is possible to use a constant weight of 1 for every value.
HALCON has been extended with deep learning-based Global Context Anomaly Detection to detect logical and structural anomalies. Global Context Anomaly Detection is an additional anomaly detection method. It makes it possible to find structural anomalies like scratches or contaminations as well as logical anomalies like missing objects.
The HDevelop example hdevelop/Deep-Learning/AnomalyDetection/dl_anomaly_detection_global_context_workflow.hdev and the trained model detect_juice_bottle_gc_anomalies.hdl have been added to show how to use deep learning-based Global Context Anomaly Detection in HALCON.
The new pretrained model pretrained_dl_anomaly_global_context.hdl is now available and can be trained on the specific dataset.
The following deep learning procedures have been extended to handle Global Context Anomaly Detection and its results:
The following new deep learning procedures are now available:The reference manual chapters "Deep Learning", "Deep Learning/Model", and "Deep Learning/Anomaly Detection" methods" as well as the operator entry for get_dl_model_param have been extended and now describe how to use the method Global Context Anomaly Method and the corresponding parameters.
normalize_dl_gc_anomaly_features to prepare the model for training on a given dataset
normalize_dl_gc_anomaly_scores to normalize the anomaly scores of the local and the global network to a suitable range
compute_dl_anomaly_thresholds
create_dl_preprocess_param_from_model
create_dl_train_param
dev_display_anomaly_detection_evaluation
dev_display_dl_data
evaluate_dl_model
train_dl_model
create_dl_layer_input has been improved. Now, a new input type 'constant' exists, which allows creating an input layer that always has the same value. This value can be set via the generic parameter 'const_val'. In particular, when apply_dl_model is called, for such an input layer the DLModelHandle does not expect an entry within the feeding dictionary for input layers of type 'constant'.
The third-party oneAPI Deep Neural Network Library oneDNN (former DNNL) has been updated from version 1.2 to 2.6.
HALCON has been extended with the operator optimize_dl_model_for_inference, which optimizes a DL model for inference on a certain hardware device and for a certain model precision.
Further, HALCON has been extended with an operator set_dl_device_param, which can be used to set device-specific parameters for a device. To see which parameters can be set for a device, use the operator get_dl_device_param with 'settable_device_params'.
The new HDevelop example program hdevelop/Deep-Learning/Classification/optimize_dl_model_for_inference_classification.hdev shows the workflow of how to optimize the inference of a DL model on a given hardware device using MVTec's new NVIDIA® TensorRT™ inference plugin.
The operator get_dl_device_param has been extended with a set of parameters that supports the usage of the new operator optimize_dl_model_for_inference:
Furthermore, the operator get_dl_device_param has been extended with the parameter 'settable_device_params', which returns a dictionary containing all device-specific parameters that can be set with the new operator set_dl_device_param.
The operator get_dl_model_param has been extended with the following parameters, which return information about the model's precision:
'precision'
'precision_is_converted'
'calibration_precisions'
'cast_precisions'
'conversion_supported'
'optimize_for_inference_params'
'precisions'
HALCON has been extended with deep learning-based instance segmentation to locate and segment objects simultaneously.
Instance segmentation is an extension of object detection, i.e., the location of an instance within the image is given by a rectangular, axis parallel, or oriented bounding box. Additionally, the segmentation of an instance is given by a region.
create_dl_model_detection has been extended with the generic parameter 'instance_segmentation' to create a deep learning model for instance segmentation.
All parameters for object detection apply in the same way to instance segmentation.
The new model parameter 'mask_head_weight' has been introduced to balance the influence of the instance segmentation loss against the detection and classification losses.
For all other purposes besides creation, the general purpose dl_model operator set is used.
The dl_model procedures have been extended to handle instance segmentation in the following way:
For instance segmentation models, the IoU of instances is computed on the predicted object masks. Setting 'evaluate_mask' to 'false' evaluates the model on the predicted bounding boxes, as if it was an object detection model.
The procedure dev_display_dl_data now also displays the ground truth and result masks if they are given in DLSample and DLResult, respectively.
The HDevelop example hdevelop/Deep-Learning/Instance-Segmentation/dl_instance_segmentation_workflow.hdev has been added to show how to use deep learning based instance segmentation in HALCON. This example uses ground truth annotations in hdevelop/Deep-Learning/Instance-Segmentation/pill_bag_instance_segmentation.hdict.
The reference manual chapter "Object Detection" has been extended to describe how to use the new deep learning functionality ("Deep Learning" > "Object Detection / Instance Segmentation").
Please note that this functionality has special system requirements like all other deep learning functionality. Please ensure that the components "Deep Learning Core" and "Deep Learning Data" are selected in the MVTec Software Manager (SOM) for installation. It also contains the images and pretrained models for the example. Please refer to the Installation Guide for more information.
The procedure read_dl_dataset_from_coco is now able to read segmentation masks that are stored in the COCO format. Such masks are stored in the 'mask' field in the samples of the returned DLDataset.
The procedure gen_dl_samples now accepts the generic parameter 'instance_type' set to 'mask'.
The procedure preprocess_dl_samples now accepts the value 'mask' for key 'instance_type' in the input dictionary DLPreprocessParam. If this is the case, also the ground truth mask regions are preprocessed.
In the procedure create_dl_preprocess_param, 'instance_segmentation' has to be set to 'true' for an instance segmentation dataset.
When using the procedure create_dl_preprocess_param_from_model, it is automatically set.
The procedure augment_dl_samples has been extended to handle instance segmentation data.
The procedure evaluate_dl_model has been extended with the generic parameter 'evaluate_mask'.
There is now an OpenVINO AI Accelerator Interface, which can be obtained using SOM. The HDevelop example hdevelop/Deep-Learning/AI2Interfaces/optimize_dl_model_for_inference_classification_openvino.hdev has been added to show how to use the Accelerator Interface. Per default, HALCON OpenVINO AI Accelerator Interface comes with the OpenVINO CPU Plugin. Other OpenVINO plugins require an additional installation of the OpenVINO toolkit.
The following improvements are available for Deep OCR:
set_deep_ocr_param and get_deep_ocr_param have been extended with the parameter 'detection_tiling' to enable automatic tiling of large images. This allows processing very large images even with little GPU memory.
The HDevelop example program hdevelop/OCR/Deep-OCR/deep_ocr_workflow.hdev has been extended to show how to use the automatic tiling. The example uses the new image street_sign_02.jpg from the subdirectory images/ocr.
The pretrained Deep OCR model for text recognition, which can be found in the directory %HALCONROOT%/dl/pretrained_deep_ocr_recognition.hdl, has been improved by using an increased training dataset.
The available character set has been extended. The new model can read Japanese due dates. The example program hdevelop/OCR/Deep-OCR/deep_ocr_workflow.hdev has been extended to showcase this.
apply_deep_ocr now returns a list of character candidates with their confidences in the modes 'auto' and 'recognition'.
set_deep_ocr_param and get_deep_ocr_param have been extended with the parameter 'recognition_num_char_candidates' to control how many character candidates are reported.
The Deep OCR functionality has been extended with the possibility to change the batch size of the recognition component to speed up the processing in 'auto' and 'recognition' modes. Further, the preprocessing in all modes has been parallelized, which can improve the runtime in some cases.
set_deep_ocr_param and get_deep_ocr_param have been extended with a new parameter 'recognition_batch_size'. By default, it is set to 1. The parameter needs to be increased manually for potential speedups.
The procedure preprocess_dl_model_images is now faster for image types 'byte', 'int2', and 'uint2', especially for large images. Note that this change affects the compatibility. Read more.
The operator get_dl_model_param now supports the parameter 'num_trainable_params', which returns the total number of parameters (weights and biases) of a deep learning model that can be modified during training.
The NVIDIA CUDA Deep Neural Network library (cuDNN) has been updated to the latest version 8.1.1. HALCON ships and supports this library for the two CUDA versions 10.2 and 11.1. The libraries can be found in the cuda10_2 and cuda11_1 subdirectories of the thirdparty library directory.
The upgrade to cuDNN 8.1.1 fixes a CPU memory leak, which occurred in apply_dl_model and train_dl_model_batch using RTX-2080 and RTX-3080 GPUs. Further, the update improves the performance of inference and training on RTX-3080 GPUs, as well as the performance of the delivered model pretrained_dl_classifier_alexnet.hdl on several GPUs.
set_deep_ocr_param and get_deep_ocr_param have been extended with the new parameter 'detection_image_size' to set and get the width and height of of the images the detection component will process.
There is now a TensorRT AI Accelerator Interface, which can be obtained using SOM. The HDevelop example hdevelop/Deep-Learning/Classification/optimize_dl_model_for_inference_classification.hdev has been added to show how to use the Accelerator Interface.
HALCON has been extended with the Deep Learning Framework. This feature allows the creation of custom Deep Learning-based models within HALCON.
The operators for the Deep Learning Framework are:
create_dl_layer_activation, create_dl_layer_batch_normalization, create_dl_layer_class_id_conversion, create_dl_layer_concat, create_dl_layer_convolution, create_dl_layer_dense, create_dl_layer_depth_max, create_dl_layer_dropout, create_dl_layer_elementwise, create_dl_layer_input, create_dl_layer_loss_cross_entropy, create_dl_layer_loss_ctc, create_dl_layer_loss_distance, create_dl_layer_loss_focal, create_dl_layer_loss_huber, create_dl_layer_lrn, create_dl_layer_pooling, create_dl_layer_reshape, create_dl_layer_softmax, create_dl_layer_transposed_convolution, create_dl_layer_zoom_factor, create_dl_layer_zoom_size, create_dl_layer_zoom_to_layer_size, create_dl_model, get_dl_layer_param, get_dl_model_layer, get_dl_model_layer_activations, get_dl_model_layer_gradients, get_dl_model_layer_param, get_dl_model_layer_weights, load_dl_model_weights, set_dl_model_layer_param, set_dl_model_layer_weights
In this context, two HDevelop example programs have been added to show how to use the new operators in combination:
hdevelop/Deep-Learning/Framework/create_dl_model_classification.hdev
hdevelop/Deep-Learning/Framework/create_dl_model_segmentation.hdev
The previously released deep learning edge extraction model pretrained_dl_edge_extractor.hdl has been replaced by an improved model. This new model is up to 35% faster and allows a retraining on GPU and also CPU (note that the model released with HALCON 20.11 still requires a GPU for retraining). Additionally, the HDevelop example program hdevelop/Deep-Learning/Segmentation/segment_edges_deep_learning.hdev has been reworked to display the capabilities of the DL-based edge extraction approach on a greater variety of image types. Note that this change affects the compatibility. Read more.
The deep learning model types 'detection' and 'segmentation' now support the parameter 'class_names'. The output of apply_dl_model for the model type 'detection' now contains the parameter 'bbox_class_name'.
The TensorRT AI2 interface now also supports Jetpack 4.6 for aarch64-linux. Moreover, it has been updated to TensorRT version 8.0.3 for x64-windows and x64-linux.
HALCON has been extended with Deep OCR recognition training.Now, the recognition component of a Deep OCR model can be retrained on a specific application domain for even better reading results.
The training allows the addition of new characters.
The new HDevelop example hdevelop/OCR/Deep-OCR/deep_ocr_recognition_training_workflow.hdev has been added to show how to use this feature in HALCON. For this example, a new set of images has been added. It is located in the example images folder named "expiration_date".
The new HDevelop example program hdevelop/OCR/Deep-OCR/deep_ocr_prelabel_dataset.hdev shows how to prelabel images using Deep OCR and create a dataset that can be imported into the Deep Learning Tool for refining the labels.
A new augmentation method named "remove_pixels" has been added. It simulates an inaccurate bounding box around the word, which allows the user to train a more robust model.
The following deep learning procedures have been extended:
The following new procedures are now available:The operators set_dl_model_param and get_dl_model_param have been extended with Deep OCR recognition specific parameters:The new parameters can be used to restrict the character set for recognition.
The reference manual chapters "Deep Learning", "Deep Learning/Model", and "OCR/Deep-OCR" as well as the operator entry for get_dl_model_param, set_dl_model_param, set_deep_ocr_param, and get_deep_ocr_param have been extended. They now describe how to use the method and the corresponding parameters. The chapter on Deep OCR in the Solution Guide I Basics has been adapted accordingly.
'alphabet'
'alphabet_internal'
'alphabet_mapping'
read_dl_dataset_ocr_recognition
gen_dl_dataset_ocr_recognition_statistics
find_invalid_samples_dl_ocr_recognition
preprocess_dl_samples
create_dl_preprocess_param
create_dl_preprocess_param_from_model
dev_display_dl_data
augment_dl_samples
evaluate_dl_model
train_dl_model
The NVIDIA CUDA Deep Neural Network library (cuDNN) has been updated to version 8.2.0. HALCON ships and supports this library for the two CUDA versions 10.2 and 11.1. The libraries can be found in the cuda10_2 and cuda11_1 subdirectories of the thirdparty library directory.
The NVIDIA CUDA Deep Neural Network library (cuDNN) on Linux aarch64 has been updated to version 8.2.1, which comes from NVIDIA JetPack 4.6.
get_dl_model_param has been extended with the parameter 'layer_names', which returns the name of every layer in the model.
HALCON has been extended with file forward compatibility for deep learning models (.hdl files). Now, a model that is written using a Progress edition can be read with the latest Steady edition of HALCON. E.g., a model trained and serialized in HALCON 22.05 Progress can be read in HALCON 20.11.x Steady.
This compatibility is only possible if the written model only uses features that are also part of the feature set of the Steady version. E.g., if a model uses the Adam solver during training (a feature of HALCON 22.05 Progress), that model cannot be read in HALCON 20.11.x Steady because this feature was not part of the Steady edition. However, in that example the solver type can be reset to SGD before writing, which makes the model compatible with HALCON 20.11.x Steady.
create_dl_layer_activation has been extended to allow the creation of a leaky ReLU layer. Furthermore, read_dl_model can now read ONNX models containing leaky ReLU layers.
The procedure determine_dl_model_detection_param has been extended with the generic parameters 'image_size_constant' and 'compute_max_overlap'. The default of both parameters is 'true'. If 'image_size_constant' is 'true' it is assumed that all images have the same size to speed up the procedure. If 'compute_max_overlap' is 'true', the procedure additionally estimates the values for 'max_overlap' and 'max_overlap_class_agnostic' and adds them to the output dictionary.
Further, the parameters 'class_ids', 'image_width', 'image_height', and 'instance_type' are now part of the output dictionary. Note that this change affects the compatibility. Read more.
The procedure preprocess_dl_dataset has been improved. The option 'overwrite_files' now accepts the value 'auto'. In 'auto' mode, the preprocessed data is only regenerated if necessary. All deep-learning-based examples have been updated to use the new option where possible.
create_dl_layer_transposed_convolution has been extended to allow using arbitrary padding values.
HALCON has been extended with an operator create_dl_layer_identity that creates an identity layer.
Changing the shape of the inputs of a DL model has been sped up. The exact speedup depends on the network and is in general higher if the network contains many layers for which the shape of the weights does not change when changing the shapes of the inputs.
Reading in ONNX models with read_dl_model has been extended to support 'Mul' operation.
read_dl_model now supports reading ONNX models with ONNX operations 'Sub' and 'Mean'.
apply_dl_model now supports output requests for HALCON AI2 interfaces.
optimize_dl_model_for_inference now optimizes the RAM and file memory consumptions of the converted model.
The Deep OCR detection model used by create_deep_ocr has been improved. The resulting detection boxes of apply_deep_ocr for the modes 'detection' and 'auto' are now in general more precise and the estimation of their orientation is slightly better. Note that this change affects the compatibility. Read more.
The DL Framework now allows creating a new type of layer with the operator create_dl_layer_permutation. This layer can permute the order of the four axes of the input and rearranges the input data accordingly.
set_dl_model_param now supports a new parameter 'batchnorm_momentum' to set the momentum of the batch normalization layers of the model.
HALCON deep learning training has been extended with a new optimization algorithm (Adam). This solver is available for all deep learning models except for models of type 'anomaly_detection'.
The Handle Inspect for handles of type 'dl_model' has been extended with the following variables:
'solver_type': Defines the optimization algorithm ('sgd' or 'adam')
'adam_beta1': Defines the momentum for the linear term in the Adam solver
'adam_beta2': Defines the momentum for the quadratic term in the Adam solver
'adam_epsilon': Guarantees the numeric stability of the Adam solver
read_dl_model now supports reading ONNX models with operator 'Constant'.
The procedure augment_dl_samples provides two new augmentation methods for deep learning models. They enable augmenting the contrast and saturating input images. Note that this change affects the compatibility. Read more.
set_deep_ocr_param has been extended with the parameter 'detection_tiling_overlap', which allows the user to control the extent of the overlapping image tiles.
A ResNet-18 deep-learning classifier model has been added to HALCON, called 'pretrained_dl_classifier_resnet18.hdl'.
The deep learning graph API to build custom networks has been extended with a DepthToSpace layer. Use the new operator create_dl_layer_depth_to_space to add such a layer to a custom network.
gen_dl_model_heatmap has been extended with the heatmap method 'guided_grad_cam'. The reference manual and the example classify_pill_defects_deep_learning_3_evaluate.hdev have been adapted accordingly.
HALCON 22.11 only supports CUDA SDK and drivers supporting CUDA 11.1 and later for x64-win and x64-linux. Support for CUDA 10 has been removed for these platforms. Note that this change affects the compatibility. Read more.
The batch normalization momentum of the pretrained classification models 'pretrained_dl_classifier_mobilenet_v2.hdl' and 'pretrained_dl_classifier_resnet50.hdl' has been set to 0.9. Its previous value was 0.999. The new value generally improves the validation and test metrics, such as the top-1 error. Accordingly, the default momentum of the operator create_dl_layer_batch_normalization has been changed to 0.9. For trainings that use learning rate decay and consist of a large number of iterations, higher batch normalization momentum values such as 0.999 can lead to better results. The batch normalization momentum of a deep learning model can be set via the operator set_dl_model_param using the parameter name 'batchnorm_momentum'. Note that this change affects the compatibility. Read more.
File
list_files can now list more than one million files by using the parameter 'max_files' to override this default limit.
Filter
HALCON has been extended with an operator equ_histo_image_rect, which performs adaptive histogram equalization within a rectangular mask. The new HDevelop example program hdevelop/Filters/Enhancement/equ_histo_image_rect.hdev shows the new functionality.
HALCON has been extended with the operator mean_image_shape. It can be used to smooth an image by mean filtering with an arbitrarily shaped region.
Graphics
detach_drawing_object_from_window has been improved. Now, calling detach_drawing_object_from_window fires an 'on_select' event if the selected object is changed due to the its detachment.
The performance of HALCON's visualization has been slightly improved. Region display on average (over a large set of parameter combinations) is faster by 6%, XLD display by 15% (especially dashed lines are now significantly faster). dump_window_image is faster by almost 20%. Further, the hcanvas library on Linux does not depend on libfreetype anymore.
In HALCON graphics windows, it is now possible to draw a grid around displayed pixels as soon as the image part is enlarged sufficiently. To enable the pixel grid, the parameter 'pixel_grid_enable' of the operator set_window_param must be set to 'true'. The minimum required resolution of an image pixel in the graphics window, which is necessary for the pixel grid to become visible, can be specified via 'pixel_grid_min_resolution'. In addition, it is possible to change the default properties of the pixel grid lines via the parameters 'pixel_grid_color' and 'pixel_grid_line_width'.
Image
interleave_channels now also supports uint2 image types and is able to make use of the SSE2/SSSE3 instruction sets. This results in speedups of up to 85%.
Matching
HALCON now provides a new operator interface for shape-based matching that unifies the operators create_shape_model, create_shape_model_xld, create_scaled_shape_model, create_scaled_shape_model_xld, create_aniso_shape_model, and create_aniso_shape_model_xld as well as find_shape_model, find_shape_models, find_scaled_shape_model, find_scaled_shape_models, find_aniso_shape_model, and find_aniso_shape_models. Thus, this new operator interface can be used for shape-based matching models created from template images as well as contours and can also be used for all the different scaling types.
The following new operators have been added to the new operator interface:
create_generic_shape_model, set_generic_shape_model_param, get_generic_shape_model_param, set_generic_shape_model_object, train_generic_shape_model, find_generic_shape_model, get_generic_shape_model_result, get_generic_shape_model_result_object
These new HDevelop example programs show how to use the operators of the new operator interface:
The former example describes the workflow for a model created from a template image, while the latter describes the workflow for a model created from an XLD contour.
The new operator interface differs from the previous implementations in that no matches should be found anymore with a scale or angle way out of the set ranges. Additionally, it is possible to return only the matches that strictly respect the set ranges by setting the parameter 'strict_boundaries'.
The previously introduced functionality that automatically adapts the lowest pyramid level for high noise images is now supported through the new operator set_generic_shape_model_object.
hdevelop/Matching/Shape-Based/find_generic_shape_model_workflow.hdev
hdevelop/Matching/Shape-Based/find_generic_shape_model_xld_workflow.hdev
set_generic_shape_model_param has been extended with the parameter 'model_identifier', which allows users to set their own string as model name.
get_generic_shape_model_param has been extended with the parameter 'scale_type', which describes the type of scaling of a shape model.
The following operators of the generic shape-based matching interface were extended to enable the clutter feature:
Further, the operator get_generic_shape_model_object has been added.
Moreover, the clutter feature has been extended with the automatic parameter estimation for 'clutter_contrast' and 'clutter_hom_mat_2d' for the image case.
The new HDevelop example program hdevelop/Applications/Robot-Vision/pick_and_place_2d.hdev shows how to use the clutter functionality with the new operator interface.
set_generic_shape_model_object now supports the object 'clutter_region'.
set_generic_shape_model_param now supports the parameters 'clutter_contrast', 'clutter_hom_mat_2d', and 'clutter_border_mode'.
set_generic_shape_model_param now also takes integers as input for certain float type parameters to improve the usability. The affected parameters are:
'angle_end', 'angle_start', 'greediness', 'iso_scale_max', 'iso_scale_min', 'max_clutter', 'origin_column', 'origin_row', 'restrict_iso_scale_max', 'restrict_iso_scale_min', 'restrict_scale_column_max', 'restrict_scale_column_min', 'restrict_scale_row_max', 'restrict_scale_row_min', 'scale_column_max', 'scale_column_min', 'scale_row_max', 'scale_row_min'.
HDevelop's handle inspect for shape-matching models has been improved. Now, the parameters are clustered according to their logical groups of model, search, and iconic parameters.
Furthermore, the handle inspect now distinguishes between shape models created with the newer operators for shape matching (create_generic_shape_model, train_generic_shape_model), and shape models created with the customary operators (create_shape_model, create_shape_model_xld, create_scaled_shape_model, create_scaled_shape_model_xld, create_aniso_shape_model, create_aniso_shape_model_xld). Thereby, the model parameters are displayed in the same way as the set parameters and only show relevant information.
The shape-based matching examples have been updated to use the generic interface. This concerns the following HDevelop standard examples:
as well as the following documentation examples:The following new example has been added to demonstrate an additional use-cases: hdevelop/Matching/Shape-Based/alignment_for_ocr_in_semiconductor.hdev
The changes made the following examples redundant, which have been removed:
create_model_green_dot.hdev, matching_coins.hdev, matching_green_dot.hdev, multiple_scales.hdev
solution_guide/basics/variation_model_illumination.hdev
solution_guide/basics/variation_model_single.hdev
solution_guide/matching/align_measurements.hdev
solution_guide/matching/create_roi_via_vision.hdev
solution_guide/matching/first_example_shape_matching.hdev
solution_guide/matching/multiple_models.hdev
solution_guide/matching/multiple_objects.hdev
solution_guide/matching/process_shape_model.hdev
solution_guide/matching/rectify_results.hdev
solution_guide/matching/reuse_model.hdev
solution_guide/matching/synthetic_circle.hdev
hdevelop/Applications/Measuring-2D/pm_measure_board.hdev
hdevelop/Applications/Position-Recognition-2D/matching_image_border.hdev
hdevelop/Matching/Shape-Based/create_shape_model_xld.hdev
hdevelop/Matching/Shape-Based/find_aniso_shape_model.hdev
hdevelop/Matching/Shape-Based/find_shape_low_contrast_high_noise.hdev
The new HDevelop example program hdevelop/Matching/Correlation-Based/ncc_matching_workflow.hdev shows the basic workflow for normalized cross correlation (NCC) matching.
The C++, C++.NET, C#, VB.NET, and Python examples have been updated to the new generic shape-based matching interface.
The following example programs have been updated concerning the shape-based matching parts. Now, they use the generic interface.
The custom HPeek demo has also been updated to the generic shape matching interface. You can download this demo in our customer area for free and evaluate the performance on your hardware.
hdevelop/explore_halcon.hdev
hdevelop/Applications/Position-Recognition-2D/pm_world_plane.hdev
hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
hdevelop/Applications/Object-Recognition-2D/pm_multiple_models.hdev
hdevelop/Applications/Print-Inspection/print_check.hdev
get_generic_shape_model_object has been extended. Now, the option 'contours' offers to retrieve a representation of the shape model for the bottommost pyramid level as XLD contours.
The generic shape matching interface now allows measuring times for the significant parts of the search algorithm. To switch time measurements on, call set_generic_shape_model_param with 'time_measurement' and 'pipeline'. After a call of find_generic_shape_model, the ResultHandle will contain a dictionary with the measurements. The Solution Guide II-B Matching has been extended accordingly.
get_generic_shape_model_result has been extended. Now, the option 'match' offers to retrieve a dictionary containing all relevant alphanumerical result values for each match.
Measure
The new operator get_measure_param can be used to obtain information about a measure object. Additionally, measure objects can now be inspected in the handle inspect window.
Miscellaneous
The struct _HhandleList has been renamed to HhandleListT. Note that this change affects the compatibility. Read more.
HALCON now officially supports macOS 11 and macOS 12 on Intel® processors. Library and HDevelop IDE are also executable on Apple Silicon processors via the Rosetta 2 emulator. Note that this change affects the compatibility. Read more.
After having been deprecated for some time, OpenCL support has been removed from the macOS version of HALCON.
The new data type 'memory_block' has been introduced to support arbitrary data fields in HALCON. This data type enables the conversion of HALCON images into JPEG or PNG BLOBs and vice versa, and the sending and receiving of arbitrary data via OPC UA. For this purpose, the new operators create_memory_block_extern, get_memory_block_ptr, read_memory_block, write_memory_block, image_to_memory_block, memory_block_to_image, and compare_memory_block have been introduced.
For get_operator_info and get_param_info, the option to request the text in LaTeX formatting has been removed. Note that this change affects the compatibility. Read more.
The encryption of any serializable HALCON data is now supported to enable the protection of intellectual property. This includes the introduction of a new data type 'encrypted_item' and the new operators encrypt_serialized_item, decrypt_serialized_item, read_encrypted_item, and write_encrypted_item.
set_system can now be used to clear extended error information via the 'tsp_clear_extended_error' parameter.
System
HALCON now offers operators that convert between JSON strings and dictionaries. The new operator json_to_dict converts a string containing valid JSON into a HALCON dictionary, similar to reading a JSON file with read_dict but without requiring an intermediate file. The new operator dict_to_json transforms a dictionary into a JSON string. Additionally, the operator write_dict can now write JSON files.
HALCON now only attempts to load and initialize X11 support when a HALCON operator is called that uses X11 functionality.
The access to the system time, e.g., via get_system_time, can now be switched between local time and Coordinated Universal Time (UTC) using the new argument 'system_time_base' for set_system.
system_call has been improved. Now, it uses the POSIX Spawn API for Linux and macOS, which can improve speed and memory footprint. Additionally, more information in case of errors is provided as low-level error message.
get_compute_device_info has been extended with the parameter 'max_mem_alloc_size', which reports the maximum size of an OpenCL memory block in bytes.
set_system now supports the parameter 'reset_used_modules' to reset the collection of used license modules reported by the operator get_modules.
Tuple
read_dict and json_to_dict now optionally allow converting JSON arrays into HALCON tuples instead of HALCON dictionaries.
The operators get_handle_param, get_dict_param, and get_message_param now no longer raise an error when querying 'key_data_type' or 'key_exists' with an empty tuple as keys. Instead, an empty tuple is returned.
get_dict_tuple now allows obtaining the values of multiple keys if all of those keys map to a tuple with a length of 1.
The new operator tuple_join allows concatenating strings to a single string by adding separators in between. It works the opposite way as the already existing operator tuple_split. The short HDevelop example program hdevelop/Tuple/String-Operations/tuple_split_join.hdev has been added.
The new operator set_dict_tuple_at allows modifying tuples in a dictionary. This is more efficient than first reading the tuples from and then writing them back into the dictionary.
Bug Fixes3D
photometric_stereo returned the normalized surface normal when the parameter 'normalized_gradient' was set. The parameter has been renamed to 'normalized_surface_normal'. The old parameter name is still supported for backwards compatibility. The HDevelop example program hdevelop/Applications/Surface-Inspection/determine_tilt_slant_photometric_stereo.hdev has been extended to show the usage of the parameter.
In rare cases, project_object_model_3d raised an out-of-memory error when projected edges were behind or close to the camera. Additionally, lines behind the camera were sometimes drawn even though they should have been invisible. These problems have been fixed. Note that this change affects the compatibility. Read more.
convex_hull_object_model_3d and smallest_bounding_box_object_model_3d sometimes returned incorrect results in case the ObjectModel3D represented a straight line. This problem has been fixed.
Bar Code
In rare cases, the barcode training with find_bar_code failed due to a wrong element_size. This problem has been fixed.
For PharmaCode and 2/5 Industrial bar codes, get_bar_code_result returned only 7 or 8 quality grades ('quality_isoiec15416', 'quality_isoiec15416_float_grades') and values ('quality_isoiec15416_values') even though 9 corresponding quality grade names were returned by 'quality_isoiec15416_labels'. For these code types some of the grades are not defined in a corresponding standard and were therefore not returned. This problem has been fixed. Now, in general 'N/A' is returned for quality grades and values that are not defined. Note that this change affects the compatibility. Read more.
The barcode reader did not decode Code 128 codes containing Latin-1 characters correctly. This problem has been fixed.
The computation of decodability of UPC-A, UPC-E, EAN-13, and EAN-8 codes was incorrect due to an erroneous description in ISO/IEC 15420. The decodability of guard patterns was affected by this problem, such that perfectly printed codes never achieved a decodability of close to 100%. This problem has been fixed.
Calibration
calibrate_cameras sometimes had issues with purely telecentric camera setups if the first calibration pattern observed by the first camera was not tilted. This problem has been fixed. Now, calibrate_cameras also considers other cameras and calibration patterns until it finds a pair with tilt.
An error message contained a typo. This problem has been fixed by renaming the define H_ERR_CAL_AMBIGIOUS in HErrorDef.h to H_ERR_CAL_AMBIGUOUS. Note that this change affects the compatibility. Read more.
Classification
In some cases, select_feature_set_svm behaved non-deterministically. This problem has been fixed.
Data Code
Some internal edge computations in the data code reader were incorrect. This problem has been fixed. As a consequence, some codes that could be decoded in older versions of HALCON cannot be decoded anymore. However, this fix slightly increases the decoding performance of the data code reader in general.
In very rare cases, a too strict assumption about the position of the Data Matrix ECC 200 solid pattern could lead to issues during the print quality inspection. This problem has been fixed.
The DotCode reader did not decode small codes if the image dimension were very large. This problem has been fixed.
get_data_code_2d_results crashed for print quality inspection ('quality_isoiec15415') if 'quality_isoiec15415_aperture_size' was set to 0. This problem has been fixed.
For Data Matrix ECC 200 codes, get_data_code_2d_results returned some incorrect 'quality_semi_t10_values' and 'quality_isoiec15415_intermediate' results ('Rmin' and 'Rmax') if the data code model polarity was set to 'light_on_dark'. These problems have been fixed.
In some cases, get_data_code_2d_results returned incorrect Data Matrix ECC 200 intermediate quality results if the symbol region including the quiet zone was not fully inside the image and results for different quality standards had been queried. Further, some Data Matrix ECC 200 intermediate quality results queried with get_data_code_2d_results could differ from those visible in the handle inspect in those cases. These problems have been fixed.
In rare cases, get_data_code_2d_results could return wrong values for 'module_height' and/or 'module_width' when a DotCode symbol was decoded successfully. This problem has been fixed.
The calculation of the notional Unused Error Correction grade as part of the modulation and reflectance margin grading for Data Matrix ECC 200 symbols during the print quality inspection was incorrect. The issue was limited to small Data Matrix ECC 200 symbol sizes, i.e., 10x10, 12x12, 8x18 and 8x32. These sizes need a special treatment according to ISO/IEC 16022. This problem has been fixed.
In rare cases, the assessment of the axial non-uniformity of Data Matrix ECC 200 symbols could lead to slightly wrong results due to a small difference compared to Annex R.3 of ISO/IEC 16022:2006. This problem has been fixed.
For 144x144 Data Matrix ECC 200 symbols, the reflectance margin and modulation grading did not account for the different block sizes of this symbol type. This problem has been fixed.
The DotCode reader returned negative numbers for Latin-1 codepoints in 'decoded_data' of get_data_code_2d_results. This problem has been fixed.
The part concerning Annex M.1.2 “Grading of the outside L of fixed pattern” of ISO/IEC 16022:2006/Cor 1:2008 was not implemented. In rare cases, this could lead to wrong Fixed Pattern Damage grades – following the original standard without corrigendum – for the Data Matrix ECC 200 symbol. This problem has been fixed.
In rare cases, the 'clock track damage' and 'solid fixed pattern' intermediate grades and values, which can be queried via get_data_code_2d_results using the 'quality_isoiec15415_intermediate' and 'quality_isoiec15415_intermediate_values' parameters, did not always report the worst grades and values leading to the final Fixed Pattern Damage grade for Data Matrix ECC 200 symbols. This problem has been fixed. This issue had no implication on the final grading.
Due to an ambiguity in ISO/IEC16022:2006, there are two distinct ways a Data Matrix ECC 200 data code of size 144x144 can be encoded. HALCON is now able to decode both variants properly.
In rare cases, find_data_code_2d returned duplicate DotCode results. This problem has been fixed.
Deep Learning
In some deep learning procedures, there were overlaps and other unsightly text representations. These problems have been fixed.
The recognition model of Deep OCR was not able to read short words if the parameter 'recognition_image_width' was set to a high value (e.g., above 200 pixels). This problem has been fixed. The automatic preprocessing and training have been enhanced to support this.
set_dl_model_param allowed setting 'image_height and 'image_width' to values that are not a multiple of 32 for anomaly detection models, which was not an intended condition. This problem has been fixed.
read_dl_model and read_deep_ocr crashed when an empty tuple was passed as the file name. This problem has been fixed. Now, the error 1401 ("Wrong number of values of control parameter 1") is raised. Note that this change affects the compatibility. Read more.
apply_dl_model and train_dl_model could crash for runtime 'cpu' if the deep learning model was initialized in another thread. This problem has been fixed.
In rare cases, the basins returned by watersheds_marker were incorrectly grouped, such that basins at the image or region boundary were assigned to the wrong marker. This problem has been fixed. Note that this change affects the compatibility. Read more.
The inspection of a dl_model handle did not show the entry 'layer_weights' if the model was not initialized on a runtime. Accordingly, the operator get_handle_tuple threw an error for the parameter 'layer_weights'. This problem has been fixed. Now, the 'layer_weights' property of a dl_model handle is available if applicable. Note that some pretrained models do not allow access to the weights.
get_dl_model_layer_activations could not be used to access output activations when using the inference with an AI accelerator interface. This problem has been fixed.
The deep learning procedure train_dl_model sometimes showed overlapping text snippets during a deep learning training. This problem has been fixed by not showing the full device name anymore but cutting it after some characters.
Setting the same device multiple times for a deep learning model could lead to the error 4320 ("Error occurred in an AI Accelerator Interface"). This problem has been fixed. Note that this change affects the compatibility. Read more.
optimize_dl_model_for_inference could be applied on a model that was already optimized by a previous call of the operator. This problem has been fixed. Now, optimize_dl_model_for_inference returns the error 7917 ("Unsupported operation on converted model") in this case. Note that this change affects the compatibility. Read more.
Custom deep learning models containing input layers that were created using create_dl_layer_input with 'input_type' 'constant' could have behaved wrongly in certain cases, e.g. after changing the model parameter 'input_dimensions'. This problem has been fixed.
set_dl_model_layer_weights in some cases could leak memory. This problem has been fixed.
apply_dl_model and train_dl_model_batch could have crashed for deep learning models with a dense layer when the parameter 'bias_term' was set to 'false'. This problem has been fixed.
HALCON's AI2 Interfaces could not be used for networks with multiple inputs. This problem has been fixed.
Inference of DL models with constant input layer did not work with AI2 plugin devices. This problem has been fixed.
A deep learning layer can be directly connected to the same other layer only once. This is now ensured by the operator read_dl_model when reading an ONNX model and by the operators create_dl_layer_concat, create_dl_layer_elementwise, create_dl_layer_loss_cross_entropy, create_dl_layer_loss_ctc, create_dl_layer_loss_distance, create_dl_layer_loss_focal, create_dl_layer_loss_huber, and create_dl_layer_zoom_to_layer_size.
gen_dl_model_heatmap returned incorrect heatmaps for models that use a batchnorm layer with bounded ReLU activation as, e.g., for pretrained_dl_classifier_mobilenet_v2.hdl. This problem has been fixed.
When using the procedure read_dl_dataset_from_coco to read a dataset that does not contain segmentation masks, an exception was thrown when using the procedure's default parameters. This problem has been fixed. Now, when using default parameters, datasets without segmentation masks are read and returned without such masks, while for datasets that include segmentation masks that mask is read and returned.
Customer-defined DL networks with layer that have multiple inputs could have been handled incorrectly if inferred on an AI2 plugin. This problem has been fixed.
optimize_dl_model_for_inference sometimes crashed if entries in DLSamples have invalid key values. This problem has been fixed.
The serialization of a batchnorm layer with momentum specified as 'auto' had an error. The underlying momentum value was set to zero during the read operation regardless of the given actual momentum value. This has the effect that if a model was pretrained with such a batchnorm layer, the given layer statistics (mean/variance) were overwritten during the very first iteration by the first batch of data using train_dl_model_batch. This is a problem because if the batchnorm statistics (mean/variance) change rapidly like this, the weights of connected layers have to be changed radically as well and this leads to bad learning behavior.
This problem has been fixed. Now, the momentum value is persistent and will be restored after the read operation. The statistics of the batchnorm layers will thus not change rapidly. Note that there is an option to change the momentum value of a given model via set_dl_model_param.
This issue does not apply to any of the pretrained models provided by HALCON. The issue only applies to models created with the operator set create_dl_layer_*.
The DL layer created by create_dl_layer_reshape sometimes overwrote gradients of other layers that used the same input layer during the training. This problem has been fixed.
Depending on the layers that followed a concat layer, there could be a memory error during the training of the model if the training was done with a 'cpu' device. This problem has been fixed.
HALCON AI2 interfaces could not handle models with zoom layer created with create_dl_layer_zoom_to_layer_size where the reference input layer only served as an input to the zoom layer. This problem has been fixed.
The plots produced by dev_display_anomaly_detection_evaluation were difficult to inspect if the anomaly thresholds are close to the border. This problem has been fixed. Now, the OK and NOK histograms take up at least 15% of the whole plot width.
During the runtime initialization of a deep learning model using an AI2 device CPU memory was leaked. This problem has been fixed.
Setting the 'input_dimensions' of a deep-learning model with set_dl_model_param returned an error if the corresponding tuple with integer values within the input dictionary previously contained values of mixed data types. This problem has been fixed.
If a model was optimized for an AI2 device using optimize_dl_model_for_inference, or if a model was set to an AI2 device using set_dl_model_param, the operator sometimes returned without an error even if the underlying optimization failed, which caused a crash in a later call of the model. This problem has been fixed.
set_dl_model_param could cause memory leaks when setting the parameter 'device' to a GPU device with insufficient GPU memory. This problem has been fixed.
Setting deep-learning device parameters and performing inference or training on the same device from multiple threads could result in a crash. This problem has been fixed.
Calling query_available_dl_devices with the parameter 'runtime' set to 'cpu' or 'gpu', followed by a call with more general filter settings or none at all, could cause the handles for the devices obtained in the first call to be corrupted. Subsequent use of these devices in apply_dl_model could cause a crash. This problem has been fixed.
read_dl_model could not read ONNX models containing nodes of type 'Resize' with operator set version 13. This problem has been fixed.
apply_dl_model could crash if any of the deep learning model parameters 'fuse_conv_relu' or 'fuse_bn_relu' was set to 'true' after the model runtime was initialized. This problem has been fixed.
set_dl_model_param failed when setting 'fuse_conv_relu' to 'true' for models that contain a sequence of successive convolution and ReLU layers. This problem has been fixed.
In a special case, setting a new alphabet on a Deep OCR recognition model led to a crash. The crash could only occur if the new alphabet was bigger than the old alphabet and if the parameter 'alphabet' of set_dl_model_param was used. This problem has been fixed.
In very rare cases, using AVX2 with parallelization could lead to non-reproducible results for several operators. This problem has been fixed.
HALCON crashed for specific CUDA versions in combination with certain versions of graphics card drivers when trying to put deep learning models on already used devices. This problem has been fixed.
Using apply_deep_ocr and write_deep_ocr with the same model simultaneously in different threads could lead to a crash. This problem has been fixed.
set_dl_model_param could have lead to a crash for models with big image dimensions when setting 'runtime' to 'cpu', or 'device' to a CPU device. This problem has been fixed.
In very rare cases, apply_dl_model and train_dl_model_batch could have slowed down significantly on CPU devices if not all processors were available to the device. This problem has been fixed.
Feature
shape_histo_point did not return meaningful results for 'AbsoluteHisto' when 'Feature' was set to 'holes'. This problem has been fixed.
File
Using write_image_metadata to write tags into compressed multipage TIFF files could result in corrupted TIFF files. This problem has been fixed.
Writing tags with write_image_metadata in a specific order into a TIFF file of an image with reduced domain in mode 'mask' corrupted the TIFF file. This problem has been fixed.
Filter
add_image with image type 'int2' returned wrong results for negative numbers rounded to nearest integer values with a maximal deviation of 1. This problem has been fixed. The fix implies performance regressions of up to 40%.
The reference manual entry of abs_image did not specify the type of the output image and did not explain what happens in case of overflows or underflows. This problem has been fixed.
highpass_image returned wrong results for filter matrices of size 1x1 for uint2 images. This problem has been fixed.
edges_sub_pix did not throw an error when the size of the input image was not large enough for the filter masks used by the different edge filters. A similar issue also affected the operator lines_facet. These problems have been fixed. Now, an error message is properly returned in case the input is smaller than the used filter masks.
projective_trans_image calculated the image area incorrectly in case of specific image sizes and bilinear interpolation. This problem has been fixed.
zoom_image_factor and zoom_image_size with the interpolation method 'constant' could produce unwanted interpolation artifacts (vertical or horizontal lines) for large byte images. This problem has been fixed. Now, the results might differ slightly (± 1) for some pixels. Apart from zoom_image_factor and zoom_image_size, the operators apply_dl_model, gen_gauss_pyramid, find_data_code_2d, text_line_orientation, and adapt_shape_model_high_noise might also produce slightly different results.
Channel-based automatic operator parallelization did not work correctly when processing arrays of multi-channel images. This problem has been fixed.
Graphics
create_drawing_object_line and create_drawing_object_xld used a marker for visualization that pointed into the wrong direction. This problem has been fixed.
dump_window_image did not set the timestamp of the returned image correctly. This problem has been fixed.
read_string returned an exception when the last character was deleted. This problem has been fixed.
Inspection
apply_bead_inspection_model returned the wrong number of error types for closed input contours. This problem has been fixed.
Images
crop_domain, crop_domain_rel, crop_part, crop_rectangle1, and crop_rectangle2 crashed for very large image sizes. This problem has been fixed.
Matching
To obtain results closer to other architectures supported by HALCON, the accuracy of an internal operation on Arm was increased. Note that this change affects the compatibility. Read more.
get_generic_shape_model_result_object returned incorrect 'contours' and 'clutter_region' if an origin other than 0,0 was set. This problem has been fixed.
find_generic_shape_model did not parallelize internally. Further, the timeout was not supported. These problems have been fixed.
find_ncc_model did not find a good match in very rare cases. This problem has been fixed.
find_generic_shape_model crashed when an empty tuple was specified as 'ModelID'. This problem has been fixed.
set_shape_model_metric did not set the model parameter 'metric_param' correctly. This problem has been fixed.
set_generic_shape_model_param did not set 'min_contrast' as intended by the user when the used value was larger than 'contrast_low' or 'clutter_contrast'. Further, resetting 'min_contrast' reset 'clutter_contrast' incorrectly in some cases. These problems have been fixed.
Miscellaneous
Various operators that read or write floating point data as ASCII strings (e.g., read_tuple, write_tuple) may not have read or written the data correctly in case of a locale not using the period as the decimal separator. This problem has been fixed.
OCR
In very rare cases, using AVX2 with parallelization could lead to non-reproducible results for several operators. This problem has been fixed.
Parallelization
Operators that use FFT, including photometric_stereo with ResultType 'height_field', ignored the maximum number of threads to use set with set_system('thread_num'). This problem has been fixed. Now, the operators use at most as many threads as set with set_system.
Region
zoom_region in rare cases returned the error 3513 ("Internal error: number of chords too big for num_max"). This problem has been fixed.
System
get_extended_error_info could return an erroneous message about a license error if the first occurring error did not actually include any extended error information. This problem has been fixed.
get_system returned unexpected results for the revision query if run on a HALCON Progress edition. This problem has been fixed.
Tuple
HDevelop could crash when a variable held a dictionary that contained HNULL as one of its values. This problem has been fixed.
Cyclic references of handles, such as a dictionary containing itself, are not supported. Users will now be informed if such situations are detected during program reset (F2).
For some serialized items, the type and the content of the serialized data was not properly displayed in the handle inspect window. This problem has been fixed.
XLD
select_shape_xld crashed for certain features when a contour with exactly one point was passed. This problem has been fixed.
select_shape_xld had a memory leak for some features. This problem has been fixed.
In very rare cases, intersection_contours_xld could return certain intersection points twice if they matched exactly the points defining one of the intersecting contours. This problem has been fixed.
In rare cases, where the used line/segment/contour coordinates differed by many orders of magnitude, certain intersection operators could lead to wrong results or even crashes. This behavior was observed for the following operators: intersection_contours_xld, intersection_lines, intersection_segments, intersection_segment_line, intersection_segment_contour_xld, intersection_line_contour_xld, intersection_circle_contour_xld, intersection_line_circle, intersection_segment_circle. This problem has been fixed.
PROCEDURESFunctionality
Short descriptions of procedures have been improved. The new descriptions now conform to our style guide.
Bug Fixes
The procedure dev_disp_button returned even if the mouse button was still pressed. This problem has been fixed. Now, dev_disp_button returns when the mouse click ends. Note that this change affects the compatibility. Read more.
The deep learning procedure train_dl_model sometimes showed overlapping text snippets during a deep learning training. This problem has been fixed by not showing the full device name anymore but cutting it after some characters.
HALCON/C++Bug Fixes
The constructors HalconCpp::HTuple(double/float/Hlong*, Hlong) copied the input array but the array was not marked as const in the signature. This problem has been fixed.
Some XLD classes could not be correctly cloned in HALCON/CPP and HALCON/.NET. The affected classes were HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, and HXLDPoly. Cloning them returned an instance of the base class HXLD instead. This problem has been fixed. Note that this change affects the compatibility. Read more.
HALCON/.NETFunctionality
Some HALCON/.NET examples that still used the HWindowControl have been updated to use HSmartWindowControl.
HSmartWindowControlWPF has been extended to better support data binding. Now, it is possible to programmatically display the images in the dynamic binding scenario where the number of windows is variable (e.g., ItemsControl).
The .NET Core NuGet package MVTec.HalconDotNet-Windows now references MVTec.HalconDotNet instead of implementing a superset. This avoids type conflicts when using both packages in one application, such as when importing .NET Standard 2.0 libraries into a .NET Core 3.1 GUI application.
The assemblies included in .NET Core NuGet packages have been signed, thus making them strong-named assemblies.
An XML namespace (xlmns) definition has been added to make it easier to reference HALCON/.NET from XAML code. Instead of xmlns:ha="clr-namespace:HalconDotNet;assembly=halcondotnet"
you can now write xmlns:ha="http://schemas.mvtec.com/halcondotnet". In particular, this allows you to share the XAML code for builds targeting different assembly names, e.g., HALCON + HALCON XL or .NET Framework + .NET Core.
HSmartWindowControlWPF and HSmartWindowControl have been extended to support the operators get_mposition/get_mposition_sub_pix and get_mbutton/get_mbutton_sub_pix.
Bug Fixes
Using dependency properties like LineWidth and LineStyle of HIconicDisplayObjectWPF and HColumn, HRow, HMessageText, and HCoordinateSystem of HMessageDisplayObjectWPF caused an Visual Studio Designer error. This problem has been fixed.
Some XLD classes could not be correctly deserialized in HALCON/.NET. The affected classes were HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, and HXLDPoly. This problem has been fixed. Note that this change affects the compatibility. Read more.
Some XLD classes could not be correctly cloned in HALCON/CPP and HALCON/.NET. The affected classes were HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, and HXLDPoly. Cloning them returned an instance of the base class HXLD instead. This problem has been fixed. Note that this change affects the compatibility. Read more.
HALCON/PYTHONFunctionality
HALCON/Python now also provides HALCON error constants at the module level.
HDevEngine/Python now also supports vectors.
HDevEngine/Python now also supports dev_* operators.
HALCON/Python now provides much better error messages when failing to find the dynamic HALCON library.
A new example shows how to embed a HALCON window in a PyQt GUI.
The HALCON/Python exception class HOperatorError now includes extended error information if available.
Bug Fixes
HALCON/Python has been extended with a flag to control error handling when encountering invalid UTF-8 in string parameters. Usually this causes an error, but by setting ha.ffi.enable_utf8_error_replace invalid characters are silently replaced instead. This can be useful in special situations like data code reading.
Using iconic output vectors and get_global_iconic_var in HDevEngine/Python caused a memory leak. This problem has been fixed.
LANGUAGE INTERFACE EXAMPLE PROGRAMSFunctionality
Some HALCON/.NET examples that still used the HWindowControl have been updated to use HSmartWindowControl.
The build method of the following examples has been improved:
Now, these examples can be build with CMake by using the provided CMakeLists.txt files.
c
cpp/console
cpp/mfc/FGMultiThreading
cpp/mfc/Matching
cpp/mfc/MatchingExtWin
cpp/motif/Matching
cpp/qt/Matching
hdevengine/cpp
hdevengine/mfc/exec_procedures_mt_mfc
All C# examples have been extended to also compile and run with .NET Core 3.1.
The example program cpp/mfc/MultiThreading has been removed and the example program cpp/mfc/FGMultiThreading has been rewritten. Now, the example cpp/mfc/FGMultiThreading uses message queues for data delivery between threads.
To demonstrate how to visualize data in an Avalonia UI framework, a new C# example AvaloniaMatching has been added.
Bug Fixes
The MultiThreading example crashed when the application was closed while running. This problem has been fixed.
The following examples crashed when the application was closed while running:
This problem has been fixed.
hdevengine/c#/MultiThreading
hdevengine/c#/MultiThreadingTwoWindows
c#/MultiThreading
HBENCHFunctionality
The deprecated benchmark -c_operations is no longer available via hbench.
The hbench reference table has been updated with current Intel and AMD CPU architectures.
IMAGE ACQUISITION INTERFACES
The latest information about new interface revisions and newly supported image acquisition devices can be found on MVTec's web server. Please refer to the release notes within the documentation of the individual image acquisition interfaces for information about improvements, bugfixes, or whether a new revision of the corresponding device driver is required.
DIGITAL I/O INTERFACES
The latest information about new interface revisions and newly supported digital I/O interfaces can be found on MVTec's web server. Please refer to the release notes within the documentation of the individual digital I/O interfaces for information about improvements, bugfixes, or whether a new revision of the corresponding device driver is required.
DOCUMENTATIONIndex and Searching
The example methods contained misspelled entries. This problem has been fixed.
Programmer's Manuals
The Programmer's Guide now mentions how to load multiple programs or procedures in parallel safely.
The description how to remove the Variable Inspect Extension for Visual Studio (VSIX) has been adapted to the current versions of Visual Studio.
The documentation has been updated to indicate support of .NET 5 and .NET 6 as successor of .NET Core 3.1.
The Programmer's Guide still mentioned outdated Windows versions. This problem has been fixed.
Section 2.3.1 of the Programmer's Guide mentioned a wrong operator and contained a typo. These problems have been fixed.
In the Programmer's Guide, the path for setting up the Python environment was not given correctly. This problem has been fixed.
The documentation for HDevEngine now mentions that global variables can have only one value at a time for all running HDevEngine instances.
User Guides
The Quick Guide has been revised. The new guide is aimed at beginners and contains only the most necessary information for getting started with HALCON. The Quick Guide is now also available in HTML format.
The HDevelop User's Guide now contains a section describing how to work with dictionaries. In particular, the new syntax using dict expressions is explained.
The HDevelop Users's Guide now explains the properties of procedure states and their corresponding icons.
The Installation Guide now describes the installation via the MVTec Software Manager.
The description of the available shortcuts for autocompletion has been improved.
In the HDevelop User's Guide, the descriptions of the menu items have been structured in a clearer way. Now, tables show the menu entries with their corresponding descriptions and shortcuts.
The usability of the HDevelop User's Guide has been improved. In chapter 6, windows and dialogs are now ordered in alphabetical order. The appendix "Keyboard Shortcuts" is also ordered alphabetically.
The layout of lists, e.g, for explaining icons, in the HTML documentation has been improved.
The description of generic operating system dialogs has been removed from the HDevelop User's Guide.
In the HTML version of the HDevelop User's Guide, the references do not mention pages anymore, but show links to the corresponding sections only.
The HDevelop User's Guide now contains a warning that storing thread IDs in dictionaries or messages is not supported.
The documentation regarding reserved words and dictionary expressions has been improved.
The chapter describing the profiler in the HDevelop User's Guide has been improved. In particular, the difference between operator time and execution time is now explained more clearly.
In the Quick Guide, the figure showing the basic architecture of HALCON did not mention the AI2 interfaces. This problem has been fixed.
In the HDevelop User's Guide, the description of the emergency backup did not mention that the saved file is also available via the start dialog and that backup files are lost upon computer restart. This problem has been fixed.
In the HDevelop User's Guide, the instructions on how to enter an assignment in the program and operator window have been improved and updated.
Solution Guides
In the Solution Guide III-C, the section on hand-eye calibration did not clearly state that two separate calibration models are needed when performing a hand-eye calibration with a stereo camera system. This problem has been fixed.
Due to improvements of the data code functionality of HALCON, the intended decoding errors in the HDevelop example 2d_data_codes_data_access.hdev did not occur anymore. To show the access of intermediate results for debugging purposes, the example has been updated accordingly.
The usability of the documentation for Deep OCR has been improved. Now, it is emphasized in which step the operator create_deep_ocr needs to be called.
The Solution Guides I and II-B have been updated concerning the shape-based matching entries. Now, they refer to the generic interface.
The Solution Guide I Basics and the Solution Guide II-A Image Acquisition stated wrong example paths to Image Acquisition and I/O examples. This problem has been fixed.
The reference manual entries for find_ncc_model and find_ncc_models have been improved regarding the reference to the Solution Guide II-B. In the Solution Guide II-B, the section on shape-based vs. correlation-based matching has been extended to improve the explanation of correlation-based matching.
In the Solution Guide III-C, the section on depth from focus stated a wrong order of focus levels (sharp, blurred, sharp instead of blurred, sharp, blurred) within its four rules that define how the measurement range can be acquired. This problem has been fixed.
Reference Manual
The reference manual entry for adapt_shape_model_high_noise contained a misleading statement. This problem has been fixed.
The reference manual entry for channels_to_image did not state the memory allocation behavior for images of different dimensions. This problem has been fixed.
The usability of the documentation for Deep OCR has been improved. Now, it is emphasized in which step the operator create_deep_ocr needs to be called.
The reference manual entries for create_dl_layer_dense, create_dl_layer_convolution, and create_dl_layer_batch_normalization erroneously stated 'xavier' instead of 'const' as default value for 'bias_filler'. This problem has been fixed
The reference manual entry for dev_open_tool has been restructured to enhance its readability.
The reference manual entry for dev_open_window still referred to HDevelop settings for the canvas that were replaced by a menu command. This problem has been fixed.
The operator reference of elliptic_axis_gray did not clearly state the impact of gray values on the calculation of the ellipse parameters. The reference has been adapted accordingly.
The reference manual entries of gen_image_surface_first_order and gen_image_surface_second_order have been extended with information regarding the usage with fit_surface_first_order or fit_surface_second_order, respectively. The workflow in the example programs hdevelop/3D-Object-Model/Segmentation/remove_background_for_3d_object_localization.hdev and hdevelop/3D-Object-Model/Segmentation/remove_bin_for_3d_object_localization.hdev have been adapted accordingly. The chapter on background removal in the technical note on surface-based matching has been adapted as well.
The documentation of the parameter 'decoded_data' of get_data_code_2d_results did not cover Latin-1 encoding of the decoded data words. This problem has been fixed.
The reference manual entry of get_deep_ocr_param missed information about the image preprocessing. This problem has been fixed.
The reference manual entry for get_dl_model_param falsely listed 'tensorrt' and 'openvino' as possible values for 'runtime'. This problem has been fixed.
get_dl_model_param has been extended with the parameter 'layer_names', which returns the name of every layer in the model.
The reference manual entry for get_mbutton and get_mbutton_sub_pix suggested that pressing multiple mouse buttons would be summed up and returned in 'Button'. This problem has been fixed.
In some reference manual entries, Booleans and return values were confused: The entry for get_operator_info mentioned return values TRUE/FALSE instead of H_MSG_TRUE/H_MSG_FALSE and several operators mentioned a call of set_system with the value H_MSG_TRUE/H_MSG_FALSE instead of TRUE/FALSE in their result section. These problems have been fixed.
The reference manual entries for get_operator_info, get_keywords, get_param_info, and get_operator_info mentioned an erroneous encoding for the returned information. This has been fixed.
The reference manual entry of get_system erroneously stated that trailing zeros are omitted for the parameter 'file_version'. This problem has been fixed.
The reference manual entries for hough_lines and hough_lines_dir were not clear regarding the parameters 'AngleGap' and 'DistGap'. This problem has been fixed.
The reference manual entry of measure_pos did not clearly state how to derive useful values for the parameter 'Threshold'. The reference has been adapted accordingly.
The reference manual entry for prepare_object_model_3d has been improved regarding the description of the parameter 'OverwriteData'.
The reference manual entry for segment_contours_xld did not clearly state that for Mode 'lines' MaxLineDist2 is ignored. This problem has been fixed.
The reference manual entry of set_calib_data has been streamlined by replacing duplicate information with a link to the original information.
The reference manual entry for set_calib_data_calib_object suggested invalid values for the parameter 'CalibObjDescr'. This problem has been fixed.
The reference manual entry for set_dl_model_layer_param regarding 'bias_term' was not accurate enough. This problem has been fixed.
The documentation of the operator set_dl_model_param for the parameter 'runtime_init' has been adapted to the new 'device' parameter.
The reference manual entry of set_generic_shape_model_param did not mention the requirements regarding the restriction of its scaling parameters. This problem has been fixed.
The reference manual entry for set_generic_shape_model_param listed wrong options for the generic parameter 'optimization'. This problem has been fixed.
The reference manual entry for set_lut has been updated to make it easier and more understandable.
The reference manual entry for set_paint has been revised in order to improve its readability.
The reference manual entry for surface_normals_object_model_3d incorrectly stated that a 5x5 mask was used when using the xyz_mapping method. In fact an 11x11 mask is used. This problem has been fixed.
The German reference manual entry for triangulate_object_model_3d was missing a description for 'greedy_output_all_points'. This problem has been fixed.
tuple_is_number was accidentally mentioned in the chapter "Tuple" > "Conversion" of the reference manual while the correct place is "Tuple" > "Type". This problem has been fixed.
The reference manual entry for write_tuple did not properly explain what happens when writing a tuple that contains handles. This problem has been fixed. The documentation now correctly states that handles are replaced by zeroes.
The reference manual entries for zoom_image_factor and zoom_image_size were incorrect for special cases. This problem has been fixed.
The reference manual chapter "Filters" was updated regarding the occurrence of undefined pixels and the different strategies to prevent errors when applying filters consecutively. It was also extended with an introduction to the concept of filter masks.
The reference manual entry of image_to_world_image and gen_image_to_world_map did not clearly describe how the parameter 'Scale' was determined. The description was revised accordingly.
The reference manual entry regarding calibration was extended with additional hints on taking a set of suitable images.
In the dark theme, the tables in the documentation of the OpenVINO™ interface were barely legible. This problem has been fixed.
In the dark theme, code blocks within the procedure documentation were not legible. This problem has been fixed.
Miscellaneous
The footer of the HTML documentation now contains links to our LinkedIn and YouTube channels, which provide further interesting content, like the latest MVTec news or HALCON tutorial videos.
The appearance of the help has been improved. Now, the colors of the help window correspond to the selected theme.
In the technical note 'Surface-Based Matching', the description of the parameter 'num_matches' was misleading regarding the part of the matching process that is affected by the parameter. The description has been adapted accordingly.
The Solution Guide III-C 3D Vision has been extended with an introduction to Plücker coordinates.
The HTML documentation has been improved. So far, warnings and tips were only marked bold. Now, they are marked with the same symbols that are already used to mark them in the PDF.
Short descriptions of procedures have been improved. The new descriptions now conform to our style guide.
The documentation did not mention that using HALCON XL is only recommended if its features are really needed. Now, this is noted in the Programmer's Guide and in the Installation Guide.
The HALCON documentation start page now has an entry linking to the AI2 interface overview pages.
The manuals now mention copyright notices also in their HTML version.
INSTALLATION
HALCON now offers self-contained offline full installers for the standard platforms x64-win64, x64-linux, armv7a-linux, and aarch64-linux using the MVTec Software Manager (SOM).
HALCON Student Edition runtime installers are now also available for the 32- and 64-Bit Arm architectures.
The folder include/com was part of the discontinued HALCON/COM interface and is no longer needed. Thus it has been removed from the HALCON installation.
The installation script install-linux.sh is no longer needed when installing HALCON via the MVTec Software Manager and thus has been removed from the file set.
The HALCON SOM offline runtime installers now also contain image acquisition and digital I/O interfaces.
HALCON now uses version 7.51 of the CodeMeter Runtime.
SOM now supports the installation of the udev rules for license dongles.
LICENSING
HALCON dongles can now be accessed over the network.
get_extended_error_info could return an erroneous message about a license error if the first occurring error did not actually include any extended error information. This problem has been fixed.
The HALCON Student Edition now uses version 7.21a of the CodeMeter Runtime.
A remote dongle license was not properly released by HDevelop during termination, causing a few minutes delay until the license was usable again. This problem has been fixed.
With HALCON 22.11, the execution of some deep learning operators depend on the type of the deep learning model and the corresponding license modules. The affected modules are “Deep Learning Inference/Training”, “OCR/OCV”, and “3D Metrology”. Which model types are available with which license modules is shown in the reference manual entry of read_dl_model.
This new mechanism applies to the following operators:
read_dl_model, write_dl_model, deserialize_dl_model, serialize_dl_model, clear_dl_model, train_dl_model_batch, apply_dl_model, set_dl_model_param, get_dl_model_param, optimize_dl_model_for_inference, set_dl_model_layer_param, get_dl_model_layer_param
If CodeMeter Runtime is running, at least version 6.00 is required to be able to use CodeMeter dongles.
The grace period for embedded evaluation and student licenses was not handled correctly. This problem has been fixed.
MISCELLANEOUS
The example video xing.avi was encoded with Cinepak, which is not available on current systems anymore. This problem has been fixed. The video is now encoded with MPEG-4 Part 2.
The build method of the extension package examples has been improved. Now, these examples can be built with CMake by using the provided CMakeLists.txt files.
The project file in the vs2005 directory of the example c#/HDevelopTemplate was not actually in a proper Visual Studio 2005 format. This problem has been fixed.
RELEASE NOTES OF PREVIOUS HALCON VERSIONS
Follow this link to read about the changes of previous HALCON versions.
HALCON 22.11.1.0 Steady © Copyright 1996–2022 MVTec Software GmbH – All rights reserved.