Release Notes for HALCON 22.11.0.0 Progress
This document provides the release notes for MVTec HALCON 22.11.0.0 Progress, as released in November 2022.
Contents
Major New Features of HALCON 22.11.0.0 Progress
3D 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.
Compatibility
Licenses
HALCON 22.11.0.0 Progress requires a valid HALCON Progress license and does not run with licenses of HALCON 13 and earlier versions or HALCON Steady.
HALCON Library
Compared to HALCON 22.05 Progress, many extensions have been introduced. Thus, the HALCON 22.11.0.0 Progress libraries are not binary compatible with HALCON 22.05 Progress or earlier versions. However, HALCON 22.11.0.0 Progress is mostly source-code compatible to HALCON 22.05 Progress except for the changes listed below:
- 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.
- As the pretrained Global Context Anomaly Detection (GC-AD) model has been improved and changed, a training of the new model may lead to different results in comparison to a training of the previous GC-AD model on the same dataset. 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 22.05 Progress. The incompatibility with HALCON 22.05 Progress 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.0.0 Progress, HALCON 22.05 Progress, and HALCON 18.11 Steady image acquisition interfaces are library compatible.
HALCON 22.11.0.0 Progress includes only a subset of available image acquisition interfaces. Image acquisition interfaces that are included are: DirectFile, DirectShow, File, GenICamTL, GigEVision2, GStreamer, USB3Vision, and Video4Linux2. You can download additional interfaces from our web server.
Digital I/O Interfaces
In general, HALCON 22.11.0.0 Progress, HALCON 22.05 Progress, and HALCON 18.11 Steady digital I/O interfaces are library compatible.
HALCON 22.11.0.0 Progress includes only a subset of available digital I/O interfaces. Digital I/O interfaces that are included are: Linux-GPIO and OPC_UA. You can download additional interfaces from our web server.
Extension Packages
Please re-generate your own extension packages developed with HALCON 22.05 Progress.
Legacy or No Longer Supported Functionality
The following functionality may be discontinued in a future major release:
- 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 Systems
Windows
HALCON 22.11.0.0 Progress 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.0.0 Progress 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.0.0 Progress 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.0.0 Progress
The changes in HALCON 22.11.0.0 Progress are described with respect to HALCON 22.05 Progress.
HDevelop
New Functionality
Assistants
- 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.
Code Export
- 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
- 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 procedure documentation in dark theme has been improved. Previously, links and other elements were hard to read while using the dark theme. The corresponding colors have been adapted and now work within both themes.
- 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 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.
IDE
- 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.
- When hovering over dictionary keys, now a preview of the content of corresponding iconic elements is shown.
- 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'.
- 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
- 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]).
Procedures
- The procedure documentation in dark theme has been improved. Previously, links and other elements were hard to read while using the dark theme. The corresponding colors have been adapted and now work within both themes.
Miscellaneous
- The performance of HDevelop when dealing with tuples that contain either a very large number of elements or very long strings has been improved.
Bug Fixes
Assistants
- 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 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.
- If the INI file stored coordinates greater than the size of the display, the Find/Replace dialog was not visible. This could happen if HDevelop had been used with a larger display and later with a smaller one. This problem has been fixed. Now, the Find/Replace dialog is always shown on the available display.
- 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 global and breakpoint icons of iconic variables in HDevelop's variable window were rendered too small. This problem has been fixed.
Help
- 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
- HDevelop's autocompletion offered wrong suggestions under the following conditions:
- 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
- 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
- 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.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:
read_image(Image, // my comment\ 'patras')
a := 'pat' // my comment\ 'ras'
Procedures
- 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
- When executed JIT-compiled, dev_get_exception_data did not behave as it did when executed non-JIT-compiled or as described in the operator reference. This problem has been fixed.
- get_mposition returned the value '1' when double-clicking the middle mouse button on a graphics window. This problem has been fixed. Now, the correct value '2' is returned. Further, the canvas is now dragged by pressing Ctrl+middle mouse button instead of just the middle mouse button as before.
- Having multiple variable inspect widgets tabbed together could crash HDevelop when opening a new program. 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 Programs
New HDevelop Example Programs
- hdevelop/3D-Matching/3D-Gripping-Point-Detection/3d_gripping_point_detection_workflow.hdev
- hdevelop/Deep-Learning/AnomalyDetection/dl_anomaly_detection_global_context_inference.hdev
- hdevelop/System/Serialized-Item/encrypt_decrypt_serialized_item.hdev
- hdevelop/Tuple/Type/tuple_numeric_limits.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 mov_region.hdev was improved in regard to usability.
HDevEngine
Bug Fixes
- HDevEngine leaked memory when parsing dictionaries in dot notation. This problem has been fixed.
HALCON Library
Speedup
- 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 % - 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.
- 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 70% faster on x64-based systems and up to 60% on Arm-based systems for QR Code and Micro QR Code symbols.
New Functionality
3D
- 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:- preprocess_dl_samples
- create_dl_preprocess_param
- create_dl_preprocess_param_from_model
- dev_display_dl_data
- preprocess_dl_model_3d_data
- gen_dl_samples_3d_gripping_point_detection
- gen_dl_3d_gripping_points_and_poses
- estimate_dl_3d_sorting_direction
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 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
- 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'.
- 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
- 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 an operator create_dl_layer_identity that creates an identity layer.
- Reading in ONNX models with read_dl_model has been extended to support 'Mul' operation.
- optimize_dl_model_for_inference now optimizes the RAM and file memory consumptions of the converted model.
- 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.
- In HALCON 22.11, the Global Context Anomaly Detection (GC-AD) is significantly faster and requires less GPU memory, both during training and inference. train_dl_model_batch is now up to 750% faster and requires up to 5 times less GPU memory. Using HALCON's AI Accelerator Interface, apply_dl_model is now up to 850% faster on a CPU and 900% faster on a GPU.
The new pretrained GC-AD model is available in the deep learning model called 'pretrained_dl_anomaly_global_context.hdl'. In comparison to the previous GC-AD model, some internal layers have been removed and some have been added. The new model has a default patch size of 33, unlike the previous GC-AD model's patch size of 32. Note that this change affects the compatibility. Read more. - 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 workflow example for the Global Context Anomaly Detection, dl_anomaly_detection_global_context_workflow.hdev, has been rewritten. Now, each part of the workflow is executed in a local procedure, which makes it easier to get an overview of the workflow. To skip the training phase of the workflow, the parameter 'TrainedModel' can now be set to the path of a trained model. Furthermore, the comparison of the local and the global network now works for other datasets than the example's dataset as well.
- 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.
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.
- 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'.
Matching
- 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.
Miscellaneous
- 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
- 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.
- 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.
Bug Fixes
3D
- The visualization of 3D object models has not been correct in rare cases. This has not only affected the general visualization but also several operators that use the visualized 3D object model as (intermediate) result: object_model_3d_to_xyz with type 'cartesian_faces', display_scene_3d, render_object_model_3d, render_scene_3d, disp_object_model_3d, and create_surface_model when using the edge-supported surface-based matching. This problem has been fixed.
- 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.
- svd_matrix, projective_trans_image, and norm_matrix in rare cases could create a crash with enabled floating point exceptions. This problem has been fixed.
- In rare cases on systems where OpenGL is not available or not working properly, or where graphics output is not available at all, object_model_3d_to_xyz with mode 'cartesian_faces' threw an error. This problem has been fixed. Additionally, the operator now has a new mode 'cartesian_faces_no_opengl' that can be used to explicitly use a non-OpenGL variant of 'cartesian_faces'.
- 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
- The orientation of a barcode decoded with find_bar_code was slightly off in rare cases. This problem has been fixed.
- For Pharmacodes with a single successfully decoded scanline, get_bar_code_result returned an incorrect 'orientation' (rotated by 180 degrees) if the reading direction was backward only. This problem has been fixed.
- find_bar_code in some cases returned Pharmacode results whose orientation exceeded the range specified with 'orientation' and 'orientation_tol' in set_bar_code_param. This problem has been fixed.
- 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.
Data Code
- The DotCode reader did not decode small codes if the image dimension were very large. 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.
- find_data_code_2d returned the resulting symbol XLD with wrongly ordered points in case of DotCodes. This problem has 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.
- The additional reflectance check for the Data Matrix ECC 200 code reader returned incorrect results. This problem has been fixed.
- Due to an ambiguity in ISO/IEC16022:2006, there are two distinct ways a Data Matrix ECC 200 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
- If a model was optimized for an AI² device using optimize_dl_model_for_inference, or if a model was set to an AI² 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.
- The Global Context Anomaly Detection procedure normalize_dl_gc_anomaly_features only used a single training image for the normalization of the pretrained features prior to training. This problem has been fixed. Now, the normalization is performed using multiple training images.
- 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.
Filter
- 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
- 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
- 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.
- dict_to_json now accepts HNULL as a value in the dictionary.
OCR
- In very rare cases, using AVX2 with parallelization could lead to non-reproducible results for several operators. This problem has been fixed.
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.
Tuple
- 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).
- dict_to_json could crash if the dictionary contained a recursion. This problem has been fixed. Now, an error is raised when a dictionary with a recursion is passed to dict_to_json.
XLD
- 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.
Procedures
Functionality
- Short descriptions of procedures have been improved. The new descriptions now conform to our style guide.
HALCON/.NET
Functionality
- 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 assemblies included in .NET Core NuGet packages have been signed, thus making them strong-named assemblies.
- HSmartWindowControlWPF and HSmartWindowControl have been extended to support the operators get_mposition/get_mposition_sub_pix and get_mbutton/get_mbutton_sub_pix.
HALCON/PYTHON
Functionality
- HALCON/Python now also provides HALCON error constants at the module level.
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 Programs
Functionality
- To demonstrate how to visualize data in an Avalonia UI framework, a new C# example AvaloniaMatching has been added.
Bug Fixes
- The CMake build for MFC examples did not work properly for some generators or when opening the CMake files directly in Visual Studio. This problem has been fixed.
HBench
Functionality
- 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.
Documentation
Index 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 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 HDevelop Users's Guide now explains the properties of procedure states and their corresponding icons.
- 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 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 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
- 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 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 reference manual entry for stop did not mention that continuing a program is not possible for its subthreads. This problem has been fixed.
- 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 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.
- 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 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 for set_calib_data_calib_object suggested invalid values for the parameter 'CalibObjDescr'. This problem has been fixed.
- 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 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 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.
Miscellaneous
- Short descriptions of procedures have been improved. The new descriptions now conform to our style guide.
- The manuals now mention copyright notices also in their HTML version.
Installation
- 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
- 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.