Release Notes for HALCON 23.05.0.0 Progress
This document provides the release notes for MVTec HALCON 23.05.0.0 Progress, as released in May2023.
- Major New Features of HALCON 23.05.0.0 Progress
- Supported Operating Systems
- Detailed Description of Changes in HALCON 23.05.0.0 Progress
Major New Features of HALCON 23.05.0.0 Progress
With Deep Counting, a feature is available to customers as of HALCON 23.05 that can be used to count a large number of objects quickly and robustly as well as to detect their position. The deep-learning-based technology offers significant advantages over existing machine vision methods: The feature can be deployed very quickly, since only very few objects need to be labeled and trained – both steps can be easily done within HALCON. The technology provides reliable results even for objects of highly reflective and amorphous material. With Deep Counting, large numbers of objects such as glass bottles, tree trunks, or food can be counted.
Training for Deep OCR
Deep OCR reads texts in a very robust way, even regardless of their orientation and font. For this purpose, the technology first detects the relevant text within the image and then reads it. With HALCON 23.05, it’s now also possible to fine-tune the text detection by retraining the pretrained network with application-specific images. This provides even more robust results and opens new application possibilities. For example: the detection of text with arbitrary printing type or unseen character types as well as an improved readability in noisy, low contrast environments.
Training for 3D Gripping Point Detection
3D Gripping Point Detection can be used to robustly detect surfaces on any object that is suitable for gripping with suction. In HALCON 23.05, there is now the possibility to retrain the pretrained model with own application-specific image data. The grippable surfaces are thus recognized even more robustly. The necessary labeling is done easily and efficiently via the MVTec Deep Learning Tool.
Easy Extensions Interface
With the help of HALCON extension packages, the integration of external programming languages is possible. The advantage for customers: Functionalities that go beyond pure image processing can thus be covered by HALCON. In HALCON 23.05, the integration of external code has become much easier with the Easy Extensions Interface. This allows users to make their own functions written in .NET code usable in HDevelop and HDevEngine in just a few steps, while benefiting from the wide range of functionalities offered by the .NET framework. Even the data types and HALCON operators known from the HALCON/.NET language interface can be used. This increases both the flexibility and the application possibilities of HALCON.
HALCON 23.05.0.0 Progress requires a valid HALCON Progress license and does not run with licenses of HALCON 13 and earlier versions or HALCON Steady.
Compared to HALCON 22.11 Progress, many extensions have been introduced. Thus, the HALCON 23.05.0.0 Progress libraries are not binary compatible with HALCON 22.11 Progress or earlier versions. However, HALCON 23.05.0.0 Progress is mostly source-code compatible to HALCON 22.11 Progress except for the changes listed below:
The color of the display of 'gripping_map', in the procedure 'dev_display_dl_data', could be changed using the parameter 'heatmap_color_scheme'. This behavior has been changed. Now, the parameter 'heatmap_color_scheme' has no influence on the color of the displayed gripping map anymore. Instead, the parameters 'gripping_point_map_color' and 'gripping_point_background_color' can be used to change the colors of the gripping map.More information.
If the augmentation method 'saturation_variation' was already used as input of augment_dl_samples in a training script for Deep-OCR recognition models, then the script will fail in a newer HALCON version. In order to make the script work, the key 'saturation_variation' has to be removed from the input dictionary.More information.
get_calib_data for ItemType='calib_obj_pose' sometimes did not raise an error when the calib_obj_pose was missing from the data, or returned the error 8458 ("Invalid calibration object index"). get_calib_data now returns the error 8459 ("Invalid calibration object pose index").More information.
The pretrained Deep OCR detection model has been improved and changed. apply_deep_ocr may now produce different results for the modes 'detection' and 'auto' for certain images. Existing applications should test the parameter settings based on the new model. In a new version of HALCON the old Deep Learning models are backward compatible for reading.More information.
Applications using the Hpar f union member can safely be modified to use the binary compatible d member. Any usage of the macro FLOAT_PAR can safely be replaced with the identical macro DOUBLE_PAR.More information.
The minimum system requirements for HALCON library on armv7a-linux, x64-linux platform, and armv8-linux platforms have been increased to gcc 7 and glibc 2.27.More information.
Trainings using the 'pretrained_dl_classifier_resnet18.hdl' model may have slightly different results compared to previous releases.More information.
HALCON ApplicationsPlease re-compile all C, C++, or .NET programs developed with HALCON 22.11 Progress. The incompatibility with HALCON 22.11 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 23.05.0.0 Progress, HALCON 22.11 Progress, and HALCON 20.11 Steady image acquisition interfaces are library compatible.
HALCON 23.05.0.0 Progress includes only a subset of available image acquisition interfaces. For more information, see the reference documentation of the Image Acquisition Interfaces. You can download additional interfaces from our web server.
Digital I/O Interfaces
In general, HALCON 23.05.0.0 Progress, HALCON 22.11 Progress, and HALCON 20.11 Steady digital I/O interfaces are library compatible.
HALCON 23.05.0.0 Progress includes only a subset of available digital I/O interfaces. For more information, see the reference documentation of the I/O Interfaces. You can download additional interfaces from our web server.
Please re-generate your own extension packages developed with HALCON 22.11 Progress.
Further Compatibility Information
As announced in previous releases, MVTec has discontinued the support of macOS systems with the release of HALCON 23.05. We recommend switching to Windows or Linux platforms for future applications.
Programs using the procedure dev_display_dl_data for 3D visualization of 3D gripping point data with the value 'point_cloud' as KeysForDisplay parameter will no longer work. Instead of dev_display_dl_data, the procedure dev_display_dl_3d_data has to be called. Moreover, the parameter value has been renamed to 'gripping_point_cloud'.More information.
Exported code using dictionaries, that was exported with HDevelop 22.11 or earlier, is not source code compatible with later versions of the language interfaces, and must be reexported.More information.
Since the release of HALCON 23.05, MVTec has discontinued support for the Windows 8.1 and Windows Server 2012 R2 operating system. This means that as of version 23.05, HALCON will no longer be tested on this platform and operating system. Specific issues with this platform will no longer be handled by the support channel.
Supported Operating Systems
HALCON 23.05.0.0 Progress has been compiled for the x64-win64 platform version for Windows Windows 10 (x64 editions), 11, Windows Server 2016, 2019, 2022 on Intel 64 or AMD 64 with SSE2 (AVX2 dispatch) processors.
HALCON 23.05.0.0 Progress has been compiled for the following Linux platform versions:
- x64-linux platform version for Linux x86_64, GLIBC_2.27, GLIBCXX_3.4.24 on Intel 64 or AMD 64 with SSE2 (AVX2 dispatch) processors
- armv7a-linux platform version for Linux armv7a, Kernel with hidraw support, hard-float ABI, GLIBC_2.27, GLIBCXX_3.4.24 on Armv7-A with NEON support
- aarch64-linux platform version for Linux aarch64, Kernel with hidraw support, GLIBC_2.27, GLIBCXX_3.4.24 on Armv8-A with AArch64 support
Please refer to the Installation Guide for detailed system requirements corresponding to the different Application Binary Interfaces.
Detailed Description of Changes in HALCON 23.05.0.0 Progress
The changes in HALCON 23.05.0.0 Progress are described with respect to HALCON 22.11.
In HDevelop, the usability of some parameter types on the parameters tab of the image acquisition assistant has been improved. IP and MAC addresses as well as hexadecimal numbers are now displayed as human-readable strings.
Working with more than one HDevelop has been improved. Instead of storing the coordinates and size properties of a widget each time it was closed in the HDevelop.ini, it is now stored only after HDevelop is closed.
The program window combo box of HDevelop has been improved. The grouping of procedures has been changed further it is now possible to search for procedures.
By consenting to sharing anonymous data with us you may receive additional information on our latest or upcoming products.
CTRL + W did close the whole program window, regardless if there were any open tabs. Now, the current tab gets closed, and if no other tab is open, CTRL + W closes the program window.
The usability of the Window menu has been improved. The option 'Open Canvas' now has a dedicated icon.
The usability of HDevelop has been improved. Now, it is possible to hide the docking drop indicators by pressing the Ctrl key. Thus, it is possible to move windows and prevent them from being docked.
It is now possible to show white spaces in the program editor by using the option provided under Preferences > User Interface > Program Window.
The usability of HDevelop has been improved by a mechanism that informs the user about modified program, procedure, or procedure library files, and offers to reload the modified files. This mechanism is implemented twofold:
- One implementation is based upon system operations. It has no effects on performance and is regarded as the preferred implementation.
- For those rare cases where that implementation is not sufficient (e.g., because the operating system is not able to hold enough file handles open simultaneously), a timer-based implementation is provided. This implementation affects performance and responsiveness of the HDevelop application, and, therefore, is merely intended as a fallback solution.
Which implementation is used is stored persistently, and can be selected, in HDevelop's General Options. It is also possible to deactivate file tracking completely.
Dictionary lookup expressions now support multiple keys (0-N). For more information, see the HDevelop User's Guide.Note that this change affects the compatibility. Read more.
The design of the HDevelop close buttons in tabs has been improved. The close buttons in HDevelop now look the same in all widgets.
Manually entering or editing fuzzy values in the measure assistant did not work. This problem has been fixed.
Using a line profile dialog associated with a measure assistant did not work under Windows. This problem has been fixed.
Dictionary expressions in conditionals of block statements could lead to incorrect code export in some cases. This problem has been fixed.
The graphics windows appeared to be pushed to the top left corner within the canvas upon maximizing and restoring. This problem has been fixed.
The last column header of the tabs in the Quick Navigation window showed a white space upon resizing the window. This problem has been fixed.
The labels of the x- and y-axis of the Function Inspect window were not visible in the dark theme. This problem has been fixed.
The function inspect windows title was not properly updated after removing functions. This problem has been fixed.
When displaying a small image, it did not fit correctly to the window while resizing. It either was displayed too large, and parts were clipped, or too small, causing black borders to appear. This problem has been fixed.
The tooltip color of the autocompletion was not correct after a theme change. This problem has been fixed.
Zoom out via the '-' button did not work, if the zoom factor was at the maximum value. This problem has been fixed.
The multiple values for "Center" and "Bounding Box" were not properly displayed in the object model 3d inspect window. This problem has been fixed.
Autocompletion in the program editor was slow. This problem has been fixed.
The autocompletion was hidden after pressing the left or right arrow keys. This problem has been fixed.
An updated iconic variable within a dict was not immediately displayed in the graphics window. This problem has been fixed. The graphics window is now updated, once the user clicks on the iconic variable in the Handle Inspect Widget.
When connecting to Linux from Windows, it was possible that HDevelop lost its focus in some rare cases. This could cause unwanted shortcuts to be triggered or characters to be lost when editing an HDevelop program. This problem has been fixed.
The dev_open_tool operator did not set the correct tool geometry when using default parameters. This problem has been fixed.
In rare cases, it took very long until the dialog Attach To Process was shown. This problem has been fixed.
If the display was set to a scaling other than 100%, lines in the Object Model 3D Inspect Window were cut off in rare cases. This problem has been fixed.
The documentation of the Extension Package operator did not appear in the HDevelop help window. This problem has been fixed.
A find&replace operation in HDevelops program window led to a wrong highlighting, in some cases. This problem has been fixed.
Reusing an existing parameter name, in the procedure interface dialog, caused an invalid renaming. This problem has been fixed.
Creating a procedure, using dictionary or vector access expressions from selection, did not always determine the proper input parameters for code. This problem has been fixed.
The procedure read_dl_dataset_ocr_recognition did not use additional text classes that can be defined in a Deep OCR project of the Deep Learning Tool (DLT). This problem has been fixed.
The program window crashed when the tooltip for autocompletion was shown between two monitors, one scaled with 125% and the other with 150%. This problem has been fixed.
The autocompletion sometimes suggested the framegrabber interface where it was not applicable. This problem has been fixed.
Opening the read image dialog after checking the option to show low-level errors (Preference > General Options > Experienced User) led to an error. Further, opening HDevelop with an image as parameter from a Linux shell threw a low-level error. These problems have been fixed.
It was possible to write code that opened a very large window. This could lead to a crash. This problem has been fixed. Now, the maximum width and height of a window is limited to 2^15.
HDevelop in some rare cases crashed while an inspection widget to select a specific iconic object was opened, and the displayed variable was modified by the running program. This problem has been fixed.
When using an HDevelop.ini file where the JSON-based entry 'MainWndDockingLayout_Canvas' has many children objects in the layout section, HDevelop took a long time to load this layout. This problem has been fixed.
In rare cases, the program window could enter an inconsistent state causing erratic behavior and coloring as well as corruption of the currently edited procedure body in the HDEV/HDVP/HDPL file. While the root cause of this issue has not yet been identified with certainty, several mitigating fixes have been implemented that reduce both the probability and the impact of such an event. In particular, one potential problem involving typing with an open handle inspect widget has been fixed. Also, there is now defensive early detection of an internal inconsistent state in the editor, which allows to save a plain text backup copy of the current editor contents prior to potential corruption.
HDevelop Example Programs
The example check_calib_image_quality.hdev sometimes displayed a coordinate system of the calibration plate incorrectly. This problem has been fixed.
'Export Program' does not export MacOS/Apple (C/C++) specific code anymore.
Loading or writing a procedure using dynamic dictionary keys caused a very small one-time memory leak. This problem has been fixed.
For some image types, the operators gen_gauss_pyramid, zoom_image_factor, and zoom_image_size are now faster on systems supporting SSSE3/AVX2/NEON for the interpolation mode 'constant' and a scale factor of 0.5. In particular, the following speedups can be expected for an image of size 512x512:
Operator Image Type Instruction Set Speedup gen_gauss_pyramid byte SSSE3 up to 70% AVX2 up to 30% uint2 SSSE3 up to 70% AVX2 up to 55% zoom_image_size
byte SSSE3 up to 95% AVX2 up to 40% uint2 SSSE3 up to 80% AVX2 up to 80% int2 NEON up to150%
mirror_image has been sped up for mode 'col' by using AVX512 instructions. On Intel machines that support the AVX512BW instruction set, it is now up to 21% faster, depending on the size of the image and region at hand. On AMD machines that support the AVX512BW/AVX512VBMI instruction set, it is now up to 45% / 91% faster, depending on the size of the image and region at hand.
The runtime of the operators read_dl_model, deserialize_dl_model, read_object_model_3d, and deserialize_object_model_3d has been improved. When ignoring I/O times, these operators are now up to 320% faster. Several other reading and deserialization operators were also sped up, though to a lesser amount.
HALCON has been extended with 3D Gripping Point Detection training. Now, the 3D Gripping Point Detection model can be finetuned to improve the detection performance for a specific 3D sensor or setup.
The new HDevelop example hdevelop/3D-Matching/3D-Gripping-Point-Detection/3d_gripping_point_detection_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 "3d_machine_vision/depalletizing".
The following deep learning procedures have been extended:
The following new procedures are now available:
The reference manual chapters "3D Matching/3D Gripping Point Detection", and "Deep Learning/Model" as well as the operator entry for get_dl_model_param, and set_dl_model_param have been extended.Note that this change affects the compatibility. Read more.
find_bar_code now supports UPC-E bar codes with number system 1 by setting the new parameter 'upce1_enable' to 'true'.
set_bar_code_param and set_bar_code_param_specific have been extended with the parameter 'max_code_length'. With this parameter, the maximum allowed length of a decoded string with which a bar code will still be considered valid, can be specified. With get_bar_code_param and get_bar_code_param_specific, the current value of the mentioned parameter can be queried.
get_bar_code_result and get_data_code_2d_results have been extended with the new parameters 'gs1_lint_result' and 'gs1_lint_passed' to check the contents of GS1 code for conformance with the GS1 specification.
The robustness of the bar code reader against false reads of EAN/UPC codes with add-on ('EAN-13 Add-On 2', 'EAN-13 Add-On 5', 'EAN-8 Add-On 2', 'EAN-8 Add-On 5', 'UPC-A Add-On 2', 'UPC-A Add-On 5', 'UPC-E Add-On 2', 'UPC-E Add-On 5') has been improved. Now, edges that are too far away from the main symbol are not considered as possible add-on edges which reduces the amount of false reads, e.g., when two codes are very close to each other.
calibrate_hand_eye has been extended with a new robust method modeling the uncertainty of measured observations including the robot poses. set_calib_data sets the new method 'stochastic' using the parameter 'optimization_method'. get_calib_data has been extended with new parameters for additional output. The new HDevelop example program hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_stationary_cam_stochastic.hdev shows, how this method is integrated into the hand-eye calibration workflow. It uses the new images from 3d_machine_vision/hand_eye/stationary_cam_stochastic.
classify_class_knn is now internally parallelized over the input points, using the automatic operator parallelization.
The print quality inspection of direct part marked codes now supports continuous grading according to ISO/IEC 29158 by using the new get_data_code_2d_results parameter 'quality_isoiec29158_float_grades' for the following code types:
Data Matrix ECC 200, QR Code, Micro QR Code, Aztec Code
Additionally, the parameters
are renamed to
preserving backward compatibility.
The debug procedures grade_data_code_2d and dev_display_data_code_2d_print_quality_results now use 'isoiec29158' as input for the parameter 'Standard' and 'QualityStandard', respectively. This also preserves backward compatibility.
It is now possible to set the list of supported GS1 Application Identifiers by providing the syntax dictionary, which can be obtained from https://ref.gs1.org/tools/gs1-barcode-syntax-resource/syntax-dictionary/, to the new set_system parameter 'gs1_syntax_dictionary'.
It is now possible to set the smallest module size used for print quality grading of 2d data codes. The new set_data_code_2d_param parameter quality_isoiec15415_smallest_module_size has been added for this purpose.
The new example hdevelop/Identification/Data-Code/print_quality_smallest_module_size.hdev shows how to use this functionality.
The DotCode reader was improved with respect to its decoding performance. The biggest benefit is given for DotCodes with some kind of visual disturbance, e.g., codes covered with foil. Our in-house benchmark suggests a relative improvement of 10% in decodability.
In addition, the default value of the generic parameter 'max_allowed_error_correction' has been reduced from 1.0 to 0.9, i.e., the code reader will use at most 90% of its error correction capacity.
read_dl_model now supports reading ONNX models that contain Transpose operations.
read_dl_model now supports reading ONNX models that contain Reshape operations.
HALCON has been extended with Deep Counting. This method makes it possible to count objects in an image easily and robustly without setting complex parameters.
The operators for Deep Counting are:
The HDevelop example programs hdevelop/Matching/Deep-Counting/deep_counting_workflow.hdev and hdevelop/Matching/Deep-Counting/deep_counting.hdev have been added to show how to use Deep Counting in HALCON.
The example hdevelop/Matching/Deep-Counting/deep_counting.hdev has been extended with the new images flasks_[01-03].jpg, pipes_[01-03].jpg, and rods_[01-03].jpg from the subdirectory images/counting.
The example hdevelop/Matching/Deep-Counting/deep_counting_workflow.hdev uses the already existing images, bottle_crate_[01-24].png, from the subdirectory images/bottles.
The new procedure draw_deep_counting_templates can be used to draw templates for the Deep Counting model. The new procedure dev_display_deep_counting_results can be used to visualize the results of Deep Counting.
The reference manual has been extended with a chapter describing how to use the new Deep Counting functionality ("Matching" > "Deep Counting").
read_dl_model can now read ONNX models that contain a ConvTranspose operation. Moreover, the transposed convolution (create_dl_layer_transposed_convolution) does now support a bias term and CPU training.
HALCON has been extended with Deep OCR detection training. Now, the detection component of a Deep OCR model can be retrained on a specific application domain for even better detection results.
The new HDevelop example hdevelop/OCR/Deep-OCR/deep_ocr_detection_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 "punched_numbers".
The existing HDevelop example program hdevelop/OCR/Deep-OCR/deep_ocr_prelabel_dataset.hdev has been adapted and it 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.
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 detection specific parameters:
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.
The pretrained Deep OCR detection model has been improved and extended. The resulting detection boxes of apply_deep_ocr for the modes ‘detection’ and ‘auto’ are now more precise.Note that this change affects the compatibility. Read more.
Additionally, a new compact detection component has been added. This compact model is slightly less precise than the default. As a benefit, it uses significantly less memory and is much faster during inference. Both models can be retrained using Deep OCR detection training.
set_deep_ocr_param has been extended with the option to specify a filename, ‘compact’ or ‘default’ for the parameter ‘detection_model’. The parameter ‘recognition_model’ has been extended with the option to set a filename or ‘default’.
The following pretrained model has been updated:
The following pretrained model has been added:
It is now possible to set certain model parameters after calling optimize_dl_model_for_inference. This eliminates the need to repeat the time-consuming optimization.
An optimized model's architecture cannot be changed, therefore only a selection of parameters is supported. In addition, restrictions may be placed on the supported parameters to meet these constraints.
The following parameters of each model type can be changed using set_dl_model_param after model optimization:
- Anomaly Detection: standard_deviation_factor
- Global Context Anomaly Detection: anomaly_score_tolerance
- Classification: class_names
- Detection: class_names, max_num_detections, max_overlap, max_overlap_class_agnostic, min_confidence
- Deep OCR Detection Component: min_character_score, min_link_score, min_word_score, orientation, sort_by_line, tiling, tiling_overlap
- Deep OCR Recognition Component: alphabet, alphabet_internal, alphabet_mapping
- Segmentation: class_names
set_deep_ocr_param has also been extended with this new functionality and supports the following parameters after optimization:
- Deep OCR: detection_min_character_score, detection_min_link_score, detection_min_word_score, detection_orientation, detection_sort_by_line, detection_tiling, detection_tiling_overlap, recognition_alphabet, recognition_alphabet_internal, recognition_alphabet_mapping
set_dl_model_param and get_dl_model_param have been extended. Using the parameter 'image_size' the width and height of the input image can be set and get, while keeping the depth, the same.
list_files has been extended to support listing of symbolic links on Linux systems.
HALCON has been extended with serialization and deserialization support for the data types 'serialized_item', 'memory_block' and 'encrypted_item'.
set_drawing_object_params has been extended with the parameter 'marker_size' to make the size of the anchors used to manipulate drawing objects configurable.
HALCON has been extended with the operator add_image_border. It can be used to add an arbitrarily sized border with a constant gray value to an image.
The generic shape matching interface now allows evaluation of the max overlap for an instance for all models passed in find_generic_shape_model. To enable global max overlap, call set_generic_shape_model_param with 'max_overlap_global_enable' set to the value 'true'.
The Hpar f union was declared legacy since HALCON 11.0 and has been removed. Furthermore, the macro FLOAT_PAR has been removed.Note that this change affects the compatibility. Read more.
The minimum system requirements for HALCON library on armv7a-linux, x64-linux platform, and armv8-linux platforms have been increased to gcc 7 and glibc 2.27.Note that this change affects the compatibility. Read more.
set_system and get_system have been extended with the parameter 'enable_neon'. This parameter controls whether NEON operations are used to accelerate selected image processing operators.
Additionally, get_system has been extended with the parameter 'neon_supported'. This parameter indicates if the processor supports NEON operations.
send_data and receive_data have been extended with support for the data type 'memory_block'.
On Windows, HALCON 22.11 added usage of the mimalloc memory allocator (see https://microsoft.github.io/mimalloc for more details) to improve performance in some specific cases. However, this change increased overall memory consumption for all cases. As a result, mimalloc can now be disabled with set_system's new 'memory_allocator' parameter. Additionally, the mimalloc memory allocator is now also available for Linux.
set_dict_tuple can now set multiple keys at the same time. For this, either a single value can be passed, which will be used as value for all keys, or a tuple of values, one for each key. This also applies to dict assignment expressions.
For models of type '3d_gripping_point_detection', optimize_dl_model_for_inference produced incorrect results if 'calibration_precisions' were used as precision (e.g., 'int8'). This problem has been fixed.
When processing 3D object model data with an excessive number of points using prepare_object_model_3d using 'gen_xyz_mapping' and 'xyz_map_width', or 'xyz_map_height' parameters, a corrupted 3D object model might have been generated. This problem has been fixed. Now, an error will be raised if the parameters are not suitable for the given number of 3D points.
project_3d_point and other operators that must compute the lens distortion, using the polynomial model, in rare cases returned erroneous coordinates for the distorted point. This problem has been fixed. In these cases, the error 8406 ("Point cannot be projected") is now returned.
segment_object_model_3d did not work correctly or crashed, when the input 3D object model had been created using triangulate_object_model_3d with GenParamName set to 'xyz_mapping_max_view_angle'. This problem has been fixed.
read_object_model_3d leaked memory when reading a DXF file containing a circle and/or an arc. This problem has been fixed.
reset_sheet_of_light_model sometimes crashed after calling apply_sheet_of_light_calibration. This problem has been fixed.
set_bar_code_param and set_bar_code_param_specific could alter the model even if the operator call failed. The reason was that all valid parameters were parsed until an invalid pair was reached. This problem has been fixed. Now, the model is only adjusted if the set_bar_code_param/set_bar_code_param_specific call completes successfully. Furthermore, certain dependency issues between parameters such as 'bar_code_width_min'/'bar_code_width_max' have been fixed, which could occur if both were set in one call.
GS1 codes with two-digit application identifiers and only one-digit content were not decoded correctly. This problem has been fixed.
calibrate_hand_eye sometimes did not raise an error when a needed calib_obj_pose was missing from the data but returned a wrong result. get_calib_data sometimes did not raise an error when a needed calib_obj_pose was missing from the data or returned the error 8458 ("Invalid calibration object index"). Now, calibrate_hand_eye returns the error 8467 ("Incomplete observation data"), get_calib_data returns the error 8459 ("Invalid calibration object pose index"). This problem has been fixed.Note that this change affects the compatibility. Read more.
get_calib_data sometimes returned wrong or undefined results when DataName was an array with more than one entry, containing 'hand_eye_calib_error'. This problem has been fixed.
The HDevelop example program hdevelop/Applications/Robot-Vision/pick_and_place_with_2d_matching_moving_cam.hdev did not correctly rectify the model images for matching and robot approach poses. This problem has been fixed.
create_color_trans_lut caused a small memory leak. This problem has been fixed.
Due to an insufficiency of the reference decode algorithm for rectangular Data Matrix ECC 200 codes with a small number of modules in the short direction (e.g. 8x..), print quality inspection (ISO/IEC 15415) with 'quality_isoiec15415_decode_algorithm' set to 'reference' could have failed, even for nearly perfect codes. This problem has been fixed.
set_data_code_2d_param and find_data_code_2d accept strings as input for many numerical or boolean GenParamValues. However, the internal conversion mechanism did not reliably catch all conversion errors. This problem has been fixed. Additionally, for the DotCode, the error codes of find_data_code_2d have been changed if a wrong GenParamName or wrong GenParamValue are used. The new error codes are in accordance with the other 2D symbols: a wrong value leads to 8830 ("Invalid parameter value") and a wrong name to 8831 ("Unknown parameter name").
set_data_code_2d_param and find_data_code_2d accepted values of different types, which could lead to an overflow, unexpected narrowing conversion, or were simply not supported. However, the internal parsing mechanism did not reliably catch all errors. This problem has been fixed. Now, an extended error message will be thrown informing the user about bad input values.
find_data_code_2d, gray_closing_shape, gray_dilation_shape, gray_erosion_shape, and gray_opening_shape showed a significant slowdown on armv7a and aarch64. This problem has been fixed.
The reference decoding algorithm, which can be activated via set_data_code_2d_param using the generic parameter 'quality_isoiec15415_decode_algorithm' and the associated value 'reference', did not inform the user in case that the grid determination failed, but instead used a fallback mechanism leading to a fixed grid. This problem has been fixed. Now, quality grades equal to -1 will be returned if the reference decoding algorithm is not applicable. In these cases, we suggest using the 'robust' mode instead.
The ranges specified for certain parameters of set_data_code_2d_param, set_bar_code_param, and set_bar_code_param_specific were not always checked. This problem has been fixed. Now, values outside the documented range will throw an error. However, there are exceptions, where no error will be thrown, in favor of usability.
GS1 codes with two-digit application identifiers and only one-digit content were not decoded correctly. This problem has been fixed.
The Data Matrix ECC 200 code reader had a problem detecting the correct symbol size for codes with strongly different module dimensions. The mentioned issue could also impact print quality results. This problem has been fixed.
The MicroQR code reader crashed in rare cases. This problem has been fixed.
The DotCode reader may have rejected good candidates due to too few dots located at the symbol boundary. This problem has been fixed.
If 'mirrored' was set to 'any' via set_data_code_2d_param, get_data_code_2d_objects returned incorrect 'module_0_rois' and 'module_1_rois' for non-decodable QR-code candidates. This problem has been fixed.
For DotCode symbols, find_data_code_2d leaked memory when called in training mode. This problem has been fixed.
read_data_code_2d_model leaked memory when reading model files generated with HALCON 6.1 or earlier. This problem has been fixed.
find_data_code_2d in some cases caused a memory leak in subsequent operator calls for Aztec Code symbols when used in training mode. This problem has been fixed.
In rare cases, apply_dl_model could have returned unnecessary intermediate outputs if the model was created with create_dl_model. This could have happened only if the model has intermediate nodes that are connected to multiple outputs and the intermediate node is directly connected to one or more losses or dropout layers. None of the pretrained models is affected by this issue. This problem has been fixed.
Saving HALCON Deep OCR models was not possible in the variable window. Saving HALCON DL Models resulted in an unreadable file. This problem has been fixed.
The augmentation method 'saturation_variation', for Deep-OCR recognition models, was wrongly supported by the procedure augment_dl_samples. This problem has been fixed.Note that this change affects the compatibility. Read more.
The output dictionary of apply_dl_model on custom deep-learning models, with a depthmax layer of mode 'arg_and_value' at the end of the network, did not contain the key for the first output. This problem has been fixed.
The procedures read_dl_dataset_anomaly and read_dl_dataset_segmentation could have failed for image directories, containing characters with special meaning in regular expressions. This problem has been fixed.
The example deep_ocr_recognition_training_workflow.hdev did not use the proper test images in step 5.) DEEP OCR INTEGRATION AND INFERENCE. This problem has been fixed.
If a deep learning dataset contained big numbers as class IDs some procedures have used too much memory. The following procedures have been affected by this issue: read_dl_dataset_from_coco, split_dl_dataset. This problem has been fixed. The public procedure create_dl_class_id_mapping has been added to support a memory efficient mapping of class IDs even if the IDs are big integer values.
The procedure check_dl_gc_anomaly_scores_normalization threw the error 2105 ("Access to undefined gray value component") if it was called for a model that had been optimized with optimize_dl_model_for_inference. This problem has been fixed.
In some cases, an ONNX DL model file could not be read if it contained a dropout operation. This problem has been fixed.
In some cases, read_dl_model failed for an ONNX model that contained a resize operation to zoom the input feature map by a given scale-factor. This problem has been fixed.
Changing the parameter recognition_alphabet with set_deep_ocr_param can fail if the parameter was set from a different thread. This only applied if the runtime of the recognition component was set to 'gpu'. This problem has been fixed.
After calling set_system('cudnn_deterministic', 'true'), train_dl_model_batch was not deterministic for runtime 'gpu' for object detection and semantic segmentation deep learning models. This problem has been fixed.
Setting the parameter 'anomaly_region_threshold' to a value could lead to an error in some scenarios. This problem has been fixed.
When using the DL Framework, it was possible to create a model for which not all output layers were connected to a loss. In those cases, using 'cpu' runtime, the operator train_dl_model_batch was throwing an error and thus the model could not be trained. This problem has been fixed.
The classification model 'pretrained_dl_classifier_resnet18.hdl' had slightly inconsistent initial values for the batch norm statistics. This should not have been a problem in applications, because the batch norm statistics are learned during finetuning to fit the new custom domain. This problem has been fixed.Note that this change affects the compatibility. Read more.
If apply_deep_ocr was aborted due to a timeout or a break event, there could have been a memory leak. This leak only occurred if the parameter 'tiling' of the Deep OCR handle was set to 'true'. This problem has been fixed.
read_dl_model leaked memory in some error cases. This problem has been fixed.
An open file descriptor did not get closed and has been leaked, when an error occurred while using read_memory_block. This problem has been fixed.
optical_flow_mg returned the same VectorField when multiple images with the same reference were passed as input images, even when the other input images were different. This problem has been fixed.
zoom_image_size returned incorrect results for Interpolation 'weighted' on int2, uint2, and real images. Specifically, the 'constant' interpolation method was used instead of the required 'weighted' method. This problem has been fixed. Now, the correct interpolation method is used for all image types.
adjust_mosaic_images did not work correctly for 'uint2' images if the first image channel did not contain the maximum gray value among all image channels. This problem has been fixed.
In buffer windows and in HDevelop graphics windows, get_mposition(_subpix) returned the state of the modifier keys even if no mouse button was pressed. This problem has been fixed and get_mposition(_subpix) now does not return the state of the modifier keys in this case.
For dev_set_draw_mode('margin'), the visualization of regions is limited to their contours. This interacted badly with the new pixel-grid feature, which overlayed the region contours and made them hard to see. This problem has been fixed.
draw_nurbs and draw_nurbs_mod leaked memory. This problem has been fixed.
zoom_image_factor was performing erroneous calculations for very big images in HALCON XL due to floating point errors. This problem has been fixed.
convert_image_type could crash for very large images in HALCON XL on 64-bit systems. This problem has been fixed.
The operator cooc_feature_matrix leaked small amounts of memory when an internal error occured. This problem has been fixed.
find_shape_model, find_shape_models, find_scaled_shape_model, find_scaled_shape_models, find_aniso_shape_model, find_aniso_shape_models, find_generic_shape_model crashed, when set_shape_model_metric was called, and the number of level was changed internally to a smaller value.
This problem has been fixed.
set_shape_model_metric did not properly copy the user-set parameters of the shape model, but instead set default values for the adapted shape model. This problem has been fixed.
Subsequent calls to get_ncc_model_region in some cases leaked memory. This problem has been fixed.
The operator read_matrix had difficulties reading matrices from ascii files, which under certain cases could lead to not reading the file or reading wrong numbers. This problem has been fixed.
In some error cases, crop_rectangle2 leaked memory. This problem has been fixed.
dump_window_image leaked memory under certain error conditions. This problem has been fixed.
set_fuzzy_measure and set_fuzzy_measure_norm_pair in some error cases leaked memory. This problem has been fixed.
find_data_code_2d, gray_closing_shape, gray_dilation_shape, gray_erosion_shape, and gray_opening_shape showed a significant slowdown on armv7a and aarch64. This problem has been fixed.
erosion_rectangle1 did not behave analogously to erosion1 with a rectangular structuring element for even values of Width and Height, but to minkowski_sub1. This problem has been fixed.
gen_ellipse did not generate a full ellipse for some orientations. A very small sector was missing in this case. This problem has been fixed.
get_region_convex returned indeterministic results for regions that consist of a single pixel. This problem has been fixed. Now, the correct convex hull, i.e. row and column of the region pixel, is returned.
sort_region did not check the value of the input Order and RowOrCol. This problem has been fixed. Now, sort_region returns the error 1302 ("Wrong value of control parameter 2") and 1303 ("Wrong value of control parameter 3").
open_socket_connect leaked memory when resolving the given hostname failed. This problem has been fixed.
send_data did not allow sending data over unbound UDP sockets on Windows. This problem has been fixed.
Some operators that use an input function containing points sorted in ascending order by the x-value and with different x-values could have returned a confusing error claiming that the values were wrongly ordered. The reason for this behavior is documented in create_funct_1d_pairs. This can happen if 2 points with different real (64-bit floating) x-values are so close to each other, that they produce the same float (32-bit floating) value, after the conversion from double to float. This problem has been fixed. Now a more suitable error message is returned for the case of points with x-values matching the same float value, also warning that this could have happened due to a double to float conversion.
List of potentially involved operators: integrate_funct_1d, zero_crossings_funct_1d, local_min_max_funct_1d, derivate_funct_1d, distance_funct_1d, invert_funct_1d, compose_funct_1d, match_funct_1d_trans, transform_funct_1d, sample_funct_1d, get_y_value_funct_1d, set_fuzzy_measure, set_fuzzy_measure_norm_pair.
In rare cases, polar_trans_region_inv did not return. The problem has been fixed.
gen_projective_mosaic leaked small amounts of memory in error case. This problem has been fixed.
Processing tuples that contained NaN elements with tuple_select_rank or tuple_median resulted in a crash under certain conditions. This problem has been fixed.
Integer tuple elements smaller than INT32_MIN were not properly handled by serialize_tuple. This problem has been fixed.
gen_ellipse_contour_xld leaked memory when one radius argument was set to zero. This problem has been fixed.
The deep learning procedure dev_display_dl_interactive_confusion_matrix sometimes became unusable when zooming in or out within the WindowHandle. This problem has been fixed.
The deep learning procedure find_dl_detection_param calculated wrong checks for compatible target input sizes. This problem has been fixed.
The procedure dev_display_dl_data used operators that are part of the Calibration and 3D Metrology license module. These operators were only used when the parameter KeysForDisplay contained the value 'point_cloud'. HDevelop's Used Modules dialogue always reported the Calibration and 3D Metrology license modules as used. This problem has been fixed. Now, all 3D visualization has been moved into a new dedicated procedure, dev_display_dl_3d_data. The example 3d_gripping_point_detection_workflow.hdev has been adapted, and the parameter 'point_cloud' was renamed to the more precise name 'gripping_point_cloud'.Note that this change affects the compatibility. Read more.
The procedure gen_dl_samples did not throw an error if images containing multiple objects were processed. This could have caused subsequent errors in other procedures that do not support this kind of images. This problem has been fixed. Now, gen_dl_samples throws a corresponding error for images with multiple objects.
HALCON/Python now supports HALCON XL. See the Programmer's Guide for details.
Using iconic output in multidimensional vectors and get_global_iconic_var in HDevEngine/Python caused a memory leak. This problem has been fixed.
HALCON Variable Inspect
Displaying HALCON data in the HALCON Variable Inspect could stop working after opening and running multiple projects in Visual Studio. This problem has been fixed. Further, the issue of larger data (e.g., big images) not being shown has mostly been fixed.
The VSIX for Visual Studio 2022 was not signed correctly, prompting the VSIX installer to display a message that the digital signature is invalid. This problem has been fixed.
The new extension package example program, extension_package/easy_extensions/dotnet, has been added as an Easy Extension Interface example for .NET. It shows how to easily integrate a .NET function, based on the HALCON/.NET interface, to HALCON's operator set and can be used within HDevEngine and HDevelop.
The extension package contains .NET source code and operator definition files for an example user-defined HALCON operator.
Further, it contains source code defining the Easy Extension Interface adapter for .NET. This Easy Extension adapter implements a generic supply method for any user-defined HALCON operators coded in .NET and can be reused for own .NET HALCON operator set extensions.
Visual Studio showed some compiler warnings when building the useropencl example. This problem has been fixed.
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.
In the HDevelop User's Guide, the tuple descriptions have been updated and shortened.
The legibility of the HDevelop User's Guide has been improved. The description of images is now better visualized.
The HDevelop User's Guide has been updated for better readability and text flow.
The Installation Guide described invalid system requirements. The Deep OCR recognition component was declared to be trainable on CPUs. However, training for this component is only possible on GPUs. This problem has been fixed.
The description of the restart behavior of floating windows in the HDevelop User's Guide was unclear. This problem has been fixed.
When using two versions of HALCON and executing Variable Inspect, this could result in a licensing error. The Installation Guide has been updated describing how to avoid this error.
The operator precedences given in the HDevelop User's Guide were incorrect. This problem has been fixed.
The Solution Guide I Basics contained a sub-section on the selection of operators for almost every chapter. As the operators are mentioned in the method description within each chapter, the respective sub-section on the operator selection wer removed.
The reference manual entry of apply_bead_inspection_model did not state that the image domain is ignored. This problem has been fixed.
The reference manual entries of correlation_fft and convol_fft have been extended to clarify the exact behavior of the operators.
The documentation did not state that the hand-eye calibration does not work with telecentric cameras. This problem has been fixed. Now, this behavior is documented in the reference manual entry of create_calib_data.
The reference manual entry of create_dl_model_detection listed 'class_weights' as a settable parameter, although the parameter does not have an effect on the detection network. This problem has been fixed.
The German reference manual entry of erosion_rectangle1 did not state correctly how an image would be affected by the erosion operation if Width and Height were not odd numbers. This problem has been fixed.
The reference manual entry of find_generic_shape_model was not precise enough for the case of multiple image objects. This problem has been fixed.
The reference manual chapter for deep-learning-based object detection missed the normalization factor in the SoAP formula. This problem has been fixed.
The reference manual chapter for 2d transformations contained erroneous statements about pixel centered coordinates. This problem has been fixed.
The German reference manual entries of get_data_code_2d_param and set_data_code_2d_param missed the sections specific for Micro QR Codes. This problem has been fixed.
The relationship between the order of 'bin_module_data' and the modules, for 2D-datacodes, accessible via 'module_1_rois' and 'module_0_rois' was not well documented. This problem has been fixed. For more information, see the reference manual entries of get_data_code_2d_results and get_data_code_2d_objects.
The reference manual entry of get_dl_model_param did not state that changing the 'solver_type' of a DL model resets the model's 'learning_rate'. This problem has been fixed.
The documentation of the extended attributes of get_object_model_3d_params, set_object_model_3d_attrib, and remove_object_model_3d_attrib was not correct. This problem has been fixed.
get_operator_info had issues displaying formulas of most matrix operators. This problem has been fixed.
The reference manual entry of image_to_memory_block now correctly lists 'png' as a supported image file format.
The reference manual entry of rigid_trans_object_model_3d did not correctly mention all non-modified attributes. This problem has been fixed.
The reference manual entry of set_spy stated that the output on stdout does not work with HDevelop. As this works if HDevelop is used with the console, the statement was invalid. This problem has been fixed.
The reference manual entry of set_system missed mentioning the parameter 'do_low_error' as exclusive. This problem has been fixed.
The reference manual entry of set_system stated that 'shared' is supported for the parameter 'global_mem_cache'. However, the 'shared' mode does not have an effect anymore, and is set to 'exclusive' internally to avoid breaking compatibility. The parameter documentation has been adjusted accordingly. This problem has been fixed.
The reference manual entry for set_window_param did not mention that 'window_title' cannot be set for buffer windows, including windows opened via dev_open_window. This problem has been fixed.
The Japanese reference manual did not distinguish between different font types, resulting in misleading formatting. This problem has been fixed. Now, different font types are used.
Some tables in the HTML reference documentation now alternate the background color, easing visual navigation.
The layout of the HTML documentation has been improved. Now, the reduced line length eases reading.
The Third-Party Copyrights page now contains links to the corresponding software location.
The table listing third-party library copyrights contained unusual formatting. This problem has been fixed.
The default location for examples and images on Windows for a current user installation was not searched automatically, requiring the environment variable HALCONEXAMPLES to be set externally. This problem has been fixed. Now, the path for "current user" and "for all users" are checked and the first available is used.
The program window did not always have focus on startup under Linux. This problem has been fixed.
Section numbering was missing in the EULA. This problem has been fixed.
The minimum Visual Studio version support for Language Interfaces examples has been changed from VS2005 to VS2013.
hrun leaked small amounts of memory if the option -t was used. Additionally the same problem applied to examples/arm-linux/hrun.cpp These problems have been fixed.
hrun and hpeek leaked small amounts of memory if the option -D was used. Additionally, the same problem applied to examples/arm-linux/hrun.cpp These problems have been fixed.
Release Notes of Previous HALCON Versions
Follow this link to read about the changes of previous HALCON versions.