MVTEC Halcon 22.05.0.0 Progress Full Version MACOS64 HALCON22.05.0.0演进完整版 64位苹果系统版
MVTEC官方地址:
www.mvtec.com
百度网盘下载地址和大恒图像下载地址:
MVTEC Halcon 22.05.0.0 Progress Full Version MACOS64 HALCON22.05.0.0演进完整版 64位苹果系统版
http://pcmv.cn/thread-29050-1-1.html?fromuid=9
(出处: 机器视觉论坛)
RELEASE NOTES FOR HALCON 22.05 PROGRESS
CONTENTS
Major New Features of HALCON 22.05.0.0 Progress
Notable Quality-of-Life Improvements and Speed-Ups
Improved Print Quality Inspection for ECC 200 Codes
Global Context Anomaly Detection
Deep OCR Training
Compatibility
Licenses
HALCON Library
HALCON Applications
Image Acquisition Interfaces
Digital I/O Interfaces
Extension Packages
Further Compatibility Information
Planned Discontinuation of HALCON for macOS
Supported Operating Systems
Detailed Description of Changes in HALCON 22.05.0.0 Progress
Speedup
New Functionality
Bug Fixes
Bug Fixes
New Functionality
Bug Fixes
HDevelop Example Programs
HDevelop
HDevEngine
HALCON Library
Procedures
HALCON/C++
HALCON/.NET
Language Interface Example Programs
HBench
Image Acquisition Interfaces
Digital I/O Interfaces
Documentation
Licensing
Release Notes of Previous HALCON Versions
MAJOR NEW FEATURES OF HALCON 22.05.0.0 PROGRESSNOTABLE QUALITY-OF-LIFE IMPROVEMENTS AND SPEED-UPS
IMPROVED PRINT QUALITY INSPECTION FOR ECC 200 CODES
GLOBAL CONTEXT ANOMALY DETECTION
DEEP OCR TRAINING
COMPATIBILITYLICENSES
HALCON LIBRARY
The results of optical_flow_mg can be slightly different when enabling the new parameter 'parallel_solver'. More information.
For the operator create_dl_layer_pooling, the default value of 'global_pooling_mode' has been changed (only applicable for pooling layers with mode 'global_maximum' or 'global_average' and kernel size other than [1, 1]). To obtain the same results as in the previous version, the generic parameter 'global_pooling_mode' must be set to 'non_overlapping'. This only affects DL models that are newly created with the DL framework using the above operator, followed by create_dl_model. Models that have been serialized and are just read using read_dl_model are not affected. More information.
set_dl_classifier_param and set_dl_model_param may return the error message 7913 ("DL: Requested runtime cannot be set") if the legacy parameter 'runtime' (use operator query_available_dl_devices instead) is set to 'gpu' but no GPU is available on the system. More information.
gen_filter_mask does not scale anymore but takes the inverse into account and its output is now independent of the image size. As a consequence, the operator's results will differ from those of its previous implementation. More information.
Due to an internal bug, the Inception_v1 model from the ONNX model zoo could be read in and the runtime could be set to 'cpu' but returned pure inference results. Therefore, this specific model can no longer be inferred using a HALCON runtime.
As the Deep OCR detection model used by create_deep_ocr has been improved and changed, apply_deep_ocr may now produce different results for the modes 'detection' and 'auto' for certain images. More information.
The error messages returned by the deep learning procedure augment_dl_samples have been modified. More information.
The define H_ERR_CAL_AMBIGIOUS in HErrorDef.h has been renamed to H_ERR_CAL_AMBIGUOUS, which can break source code compatibility. More information.
HALCON APPLICATIONS
IMAGE ACQUISITION INTERFACES
DIGITAL I/O INTERFACES
EXTENSION PACKAGES
FURTHER COMPATIBILITY INFORMATION
Deserializing an instance of HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, or HXLDPoly now returns an instance of the exact same type where previously it returned an HXLD base class instance. This is unlikely to cause compatibility issues except in situations where the runtime type was explicitly checked. More information.
Cloning an instance of HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, or HXLDPoly now returns an instance of the exact same type where previously it returned an HXLD base class instance. This is unlikely to cause compatibility issues except in situations where the runtime type was explicitly checked. More information.
PLANNED DISCONTINUATION OF HALCON FOR MACOS
SUPPORTED OPERATING SYSTEMSWINDOWS
LINUX
x64 platform version for Linux x86_64, GLIBC_2.17, GLIBCXX_3.4.21, on Intel 64 or AMD 64 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
MACOS
DETAILED DESCRIPTION OF CHANGES IN HALCON 22.05.0.0 PROGRESS
HDEVELOPNew FunctionalityAssistants
The HDevelop Matching Assistant has been updated and now generates code using the generic shape model interface. The assistant also supports the logic of the generic model interface and uses the angle range as search parameters. The corresponding chapter explaining the Matching Assistant in the HDevelop User's Guide has been restructured and updated.
Note that the behavior of the Matching Assistant has been changed regarding the effect of 'Detect All': The value for 'Maximum Number of Matches' is not reset (except for descriptor-based matching) and the number of visible objects is only set if no value was specified before.
GUI
HDevelop no longer supports the Italian language setting. The corresponding option is no longer available in the Preferences dialog.
On Windows and Linux, HDevelop relied on the regional format to decide which GUI language to use. Now, HDevelop uses the selected display language of the OS instead. Note that this is only relevant when HDevelop is started for the first time.
The usability of the language selection has been improved. Now, the language page permanently displays a reminder to restart HDevelop if the help language has been changed.
The usability of the language selection has been improved. Now, the entries for selecting the language have the same format.
The operator window has been improved. Now, the layout of the window can be switched between one and two columns.
The execution time of dev_set_window has been improved. Now, if dev_set_window is called on the already active window, the execution is much faster.
Help
On a fresh installation, the language of the operator reference will be the same as the language of the system if applicable. If the system language is not supported for the help, the default language will be English.
IDE
Auto-completion in HDevelop now considers operator and procedure input parameter types when showing suggestions for dictionary keys.
Miscellaneous
The command line interface has been improved. Now, it is possible to convert all files contained in a directory in a single step. For example, it is now possible to protect all files in a directory with one call.
Bug FixesCode Export
Passing a constant string literal to a parameter with default type real (e.g., threshold(Image, Region, 'min', 255) produced incorrect code when exporting to HALCON/C. This problem has been fixed.
If the last case in a switch statement contained only comments but no code then the code export to C or C++ did not compile. This problem has been fixed.
HDevelop erroneously rejected namespace names containing a period (.) when using the library export from the command line to the target language C#. This problem has been fixed.
GUI
When moving a dialog (for example, the image acquisition dialog) between screens with different scaling, artifacts could appear in GUI controls. This problem has been fixed.
When moving a floating window over the main HDevelop window, the drop indicators were sometimes not visible. This problem has been fixed.
After undocking a tabbed widget from the application with the dock button, the new floating and tabbed widgets could not be docked again to the application via the dock button. This problem has been fixed.
The used fonts for the buttons of the User Interface > Fonts settings in the preferences dialog did not always correspond to the selected font. This problem has been fixed.
Under Linux, docking a minimizable window to a free floating window that was covered by HDevelop let the window disappear. This problem has been fixed.
In a setup with multiple monitors and different scaling, the size of the graphics window was not correct when running a program after dragging HDevelop from one monitor to another. This problem has been fixed.
When opening a graphics window on the main screen, moving it to a second screen with 150% scaling, closing it, and then reopening it on the main screen again, the window had a different size. This problem has been fixed.
In rare cases, the Create Procedure dialog initially showed wrong fields when opened. This problem has been fixed.
When opening a variable inspect window, some visual artifacts appeared temporarily. This problem has been fixed.
Changing the size of a graphics window in the canvas during a drawing operation could lead to unexpected window sizes. This problem has been fixed. Now, it is not possible to change the size of a graphics window during a drawing operation.
Under Linux, the help window sometimes did not open the first time. This problem has been fixed.
The tab order in the Preferences > General Options dialog was confusing. This problem has been fixed.
The preview of the visualization settings in the Preferences dialog was distorted when resizing the window. This problem has been fixed.
Minimizable floating windows did not have an icon in the taskbar. This problem has been fixed.
For a graphics window present in the canvas, wrong image coordinates were displayed when pressing Ctrl and moving the mouse over the graphics window frame (i.e., outside the image). This problem has been fixed. Now, no coordinates are displayed in this case.
Sometimes the wrong cursor symbol was displayed for a graphics window in the canvas. This problem has been fixed.
When a draw operator like get_mbutton was waiting for an event within the graphics window in the canvas, the context menu could appear upon right-click. This problem has been fixed.
Under Linux, the HDevelop assistants opened and reopened at unexpected positions and with unexpected sizes. This problem has been fixed.
When using the Window > Restore Default Layout use > Canvas option, unexpected zooming could happen. Further, the view could jump slightly when zooming or resizing the canvas. These problems have been fixed.
On the canvas, the text displayed on the zoom button sometimes was bigger than the zoom button itself. This problem has been fixed.
The size of graphics window was not correct if it was opened between two screens with different scaling. This problem has been fixed.
The resizing of windows located in the canvas has been improved. Previously, windows may not have been resized correctly if the canvas was zoomed in or out. Now, the resizing works as expected.
Some options of the Telemetry dialog were not translated. This problem has been fixed.
The German translation contained some spelling errors. These problems have been fixed.
Adding a graphics window to the canvas via the main window menu could result in the graphics window not being fully visible. This problem has been fixed.
Reopening the Export Library Project dialog did not bring it in front of the application if the floating window behavior was set to minimizable windows. This problem has been fixed.
The usability of HDevelop has been improved. Previously, large menus were multi-column and could take up a lot of the available screen space. This problem has been fixed. Now, the menus are always single-column and can be scrolled if they contain many entries.
The icons in the Edit Procedure menu did not change when the theme was changed. This problem has been fixed.
Help
The path of the extension package documentation was wrong when trying to display it via the HDevelop help. This problem has been fixed.
IDE
When executing a program line in HDevelop with Ctrl+Return or Ctrl+Enter, the handle inspect widget was not updated properly. This problem has been fixed.
The colors of the program editor were reset and not imported from previous versions. This problem has been fixed.
HDevelop sometimes highlighted lines incorrectly. This problem has been fixed.
HDevelop's autocompletion did not react to typing the string dict at a position where an operator or procedure name was expected. This problem has been fixed.
HDevelop procedures were sorted into the operator menu according to their English chapter entries, instead of those for the currently selected help language. This problem has been fixed.
The inline method of tuple_gen_sequence displayed a wrong tool tip. This problem has been fixed.
Code lines that start with an invalid character behaved misleadingly. E.g., their tool tip displayed 'comment' as operator type but did not display the error text. This problem has been fixed. Now, these lines behave like any other code lines with errors.
The variable inspect did not update when it was hidden. This problem has been fixed.
In rare cases, HDevelop's autocompletion erroneously removed one or more letters of the code that should be completed. This problem has been fixed.
HDevelop sometimes added a superfluous dot when replacing the key of a dictionary by a second key. This problem has been fixed.
The completion when pressing Tab did not always stick to the written code. For example, if a variable bab existed and in the next line the user typed ab, then the completion result was bab instead of the correct ab. This problem has been fixed.
HDevelop could crash if a variable inspect window was open during execution and the inspected iconic variable changed a lot. This problem has been fixed.
Language
In rare cases, HDevelop resolved imported procedures not correctly. The problem occurred when a statement imported a procedure, and a second import below the first one pointed to a procedure that was not visible (e.g., because it was a private library procedure) with the same name at a different location.
In this case, a procedure call could not be resolved to the first procedure, but remained unresolved. This problem has been fixed.
Procedures
Pressing Ctrl+Alt+Enter to open a procedure in HDevelop did not work. This problem has been fixed.
In the dark theme, code blocks within the procedure documentation were not legible. This problem has been fixed.
Miscellaneous
Sometimes HDevelop crashed when a widget was closed. This problem has been fixed.
C-style comments in HDevelop language scripts (i.e., comments at the end of a code line that begin with "//") were not printed when printing a program from HDevelop. This problem has been fixed.
Furthermore, reformatting a program with hdevelop -convert -reset_free_text now preserves C-style comments as well.
Opening graphics windows inside the canvas has been improved. Previously, opening a window with default size argument (-1, -1) lead to a very small window if the window was opened in the canvas. This problem has been fixed. Now, the previous window settings are used.
HDevelop Example ProgramsNew HDevelop Example Programs
hdevelop/Deep-Learning/AnomalyDetection/dl_anomaly_detection_global_context_workflow.hdev
hdevelop/Filters/Enhancement/equ_histo_image_rect.hdev
hdevelop/OCR/Deep-OCR/deep_ocr_prelabel_dataset.hdev
hdevelop/OCR/Deep-OCR/deep_ocr_recognition_training_workflow.hdev
Bug Fixes
The HDevelop example program hdevelop/Applications/OCR/ocr_gradient_feature.hdev has been rewritten to not include legacy operators.
The HDevelop example program hdevelop/Deep-Learning/AnomalyDetection/dl_anomaly_detection_workflow.hdev created DL preprocessing parameters with wrong image_range_min and image_range_max values, stored in DLPreprocessParam. This problem has been fixed. Now, DLPreprocessParam uses the same image_range_min and image_range_max values as the anomaly detection model.
The model created in the HDevelop example program hdevelop/Deep-Learning/Framework/create_dl_model_segmentation.hdev could not be used in the HDevelop example program hdevelop/Deep-Learning/Segmentation/dl_segmentation_workflow.hdev. This problem has been fixed.
HDEVENGINEBug Fixes
Using the attribute 'ignore_unresolved_lines' it was possible for an unresolved procedure call to be excuted in HDevEngine when that call occurred before an import statement making the procedure available. This problem has been fixed.
HALCON LIBRARYSpeedup
bandpass_image is now faster for byte and uint2 images on x64-based systems. In particular, the following speedups can be expected for a 512x512 image:
IMAGE TYPE | SPEEDUP |
byte | up to 760% |
uint2 | up to 440% |
The following operators are now faster on Windows platforms:
OPERATOR | SPEEDUP |
connection | up to 60% |
area_center | up to 50 % |
apply_bead_inspection_model | up to 45% |
photometric_stereo | up to 13% |
find_ncc_model find_ncc_models | up to 10% |
find_text | up to 10% |
find_bar_code | up to 10% |
find_box_3d | up to 10% |
emphasize is now faster for int2 and uint2 images. In particular, the following speedups can be expected for a 512x512 image:
IMAGE TYPE | FILTER SIZE | FACTOR | SPEEDUP |
uint2 | 3x3 | 1.0 | up to 115% |
int2 | up to 30% | ||
uint2 | 5x5 | up to 20% | |
int2 | up to 30% | ||
uint2 | 3x3 | 0.7 | up to 10% |
uint2 | 5x5 | up to 5% | |
int2 | up to 5% |
highpass_image is now faster for byte images. In particular, the following speedups can be expected for a 512x512 image:
FILTER SIZE | SPEEDUP |
3x3 | up to 260% |
9x9 | up to 65% |
find_data_code_2d is now about 20% faster for QR codes on x64-based systems. The expected speedup strongly depends on the image content.
get_data_code_2d_results is now faster for various print quality inspection standards supported by HALCON including ISO/IEC 15415, ISO/IEC TR29158, SEMI T10, and AIM DPM-1-2006. A speedup of up to 150% can be achieved on images with highly resolved data codes (module size at least 10 pixels). The speedup heavily depends on the resolution and size of the data code. Furthermore, get_bar_code_result is now faster for the print quality inspection standard ISO/IEC 15416. The speedup also heavily depends on the size and resolution of the bar code.
The performance of optical_flow_mg has been improved. The operator is now up to 23% faster in serial execution and up to 61% faster with internal parallelization enabled. Additionally, the new parameter 'parallel_solver' can be used to further speed up the 'fdrig' solver with internal parallelization for a total of 83% over the previous version. Note that this change affects the compatibility. Read more.
sobel_dir with FilterType = 'sum_sqrt' is now faster on processors that support the AVX512BW instruction set. The speedup is up to 67% compared to the AVX2 version.
New Functionality3D
HALCON has been extended with an operator dual_quat_trans_point_3d that transforms 3D points using a rigid 3D transformation that is specified as a dual quaternion.
Bar Code
get_bar_code_result was extended with the generic parameter 'decode_feature' indicating which feature was used for successfully decoding each result.
HALCON now supports all GS1 application identifiers specified in the latest version of the “GS1 General Specifications” (January 2022).
Data Code
The Data Matrix ECC 200 reader has been improved for small codes. Now, challenging Data Matrix ECC 200 codes with symbol sizes smaller than 16 x 16 can be read more robustly.
For some cases of degraded Data Matrix ECC 200 codes with damaged solid pattern, find_data_code_2d is more robust now. Additionally, the module position determination of get_data_code_2d_results for the print quality inspection is improved for such cases.
The procedure dev_display_data_code_2d_print_quality_results has been extended with the generic parameter 'grid'. If set to 'true', dev_display_data_code_2d_print_quality_results displays a line-based grid to visualize the base for print quality grading.
For the ECC 200 print quality inspection, determining the solid pattern width (as part of the finder pattern) has been improved.
HALCON has been extended with a procedure grade_data_code_2d, which performs print quality inspection on data codes and returns all results in a dictionary. The quality grades can be represented either as numbers (0-4) or letters (F-A). Furthermore, in addition to the grades, all existing intermediate results can be returned.
The HDevelop example programs
have been adapted to demonstrate the usage of the procedure.
hdevelop/Identification/Data-Code/ecc200_print_quality.hdev
hdevelop/Identification/Data-Code/ecc200_print_quality_intermediate_results.hdev
hdevelop/Identification/Data-Code/print_quality_reflectance_reference.hdev
In dev_display_data_code_2d_print_quality_results, the visualization of the module grid for ECC 200 codes has been removed. Now, only the module centers can be visualized.
HALCON now supports all GS1 application identifiers specified in the latest version of the “GS1 General Specifications” (January 2022).
The determination of the module grid for print quality inspection has been improved for Data Matrix ECC 200 codes. In addition, the grid center determination on the alternating pattern has been adapted to follow the reference decode algorithm described in ISO/IEC 16022:2006/Cor.2:2011.
Deep Learning
create_dl_layer_loss_distance has been improved by making the input node DLLayerWeights optional. Now, passing an empty tuple is possible to use a constant weight of 1 for every value.
HALCON has been extended with deep learning-based Global Context Anomaly Detection to detect logical and structural anomalies. Global Context Anomaly Detection is an additional anomaly detection method. It makes it possible to find structural anomalies like scratches or contaminations as well as logical anomalies like missing objects.
The HDevelop example hdevelop/Deep-Learning/AnomalyDetection/dl_anomaly_detection_global_context_workflow.hdev and the trained model detect_juice_bottle_gc_anomalies.hdl have been added to show how to use deep learning-based Global Context Anomaly Detection in HALCON.
The new pretrained model pretrained_dl_anomaly_global_context.hdl is now available and can be trained on the specific dataset.
The following deep learning procedures have been extended to handle Global Context Anomaly Detection and its results:
The following new deep learning procedures are now available:The reference manual chapters "Deep Learning", "Deep Learning/Model", and "Deep Learning/Anomaly Detection" methods" as well as the operator entry for get_dl_model_param have been extended and now describe how to use the method Global Context Anomaly Method and the corresponding parameters.
normalize_dl_gc_anomaly_features to prepare the model for training on a given dataset
normalize_dl_gc_anomaly_scores to normalize the anomaly scores of the local and the global network to a suitable range
compute_dl_anomaly_thresholds
create_dl_preprocess_param_from_model
create_dl_train_param
dev_display_anomaly_detection_evaluation
dev_display_dl_data
evaluate_dl_model
train_dl_model
The DL framework pooling layer operator create_dl_layer_pooling has been improved. For the global pooling modes 'global_maximum' and 'global_average', a new generic parameter 'global_pooling_mode' has been introduced that allows selecting among three different modes for the calculation of the internally used kernel size and stride of global pooling: 'overlapping' (new default), 'non_overlapping' (previous default), and 'adaptive'. Note that this change affects the compatibility. Read more.
HALCON has been extended with Deep OCR recognition training.Now, the recognition component of a Deep OCR model can be retrained on a specific application domain for even better reading results.
The training allows the addition of new characters.
The new HDevelop example hdevelop/OCR/Deep-OCR/deep_ocr_recognition_training_workflow.hdev has been added to show how to use this feature in HALCON. For this example, a new set of images has been added. It is located in the example images folder named "expiration_date".
The new HDevelop example program hdevelop/OCR/Deep-OCR/deep_ocr_prelabel_dataset.hdev shows how to prelabel images using Deep OCR and create a dataset that can be imported into the Deep Learning Tool for refining the labels.
A new augmentation method named "remove_pixels" has been added. It simulates an inaccurate bounding box around the word, which allows the user to train a more robust model.
The following deep learning procedures have been extended:
The following new procedures are now available:The operators set_dl_model_param and get_dl_model_param have been extended with Deep OCR recognition specific parameters:The new parameters can be used to restrict the character set for recognition.
The reference manual chapters "Deep Learning", "Deep Learning/Model", and "OCR/Deep-OCR" as well as the operator entry for get_dl_model_param, set_dl_model_param, set_deep_ocr_param, and get_deep_ocr_param have been extended. They now describe how to use the method and the corresponding parameters. The chapter on Deep OCR in the Solution Guide I Basics has been adapted accordingly.
'alphabet'
'alphabet_internal'
'alphabet_mapping'
read_dl_dataset_ocr_recognition
gen_dl_dataset_ocr_recognition_statistics
find_invalid_samples_dl_ocr_recognition
preprocess_dl_samples
create_dl_preprocess_param
create_dl_preprocess_param_from_model
dev_display_dl_data
augment_dl_samples
evaluate_dl_model
train_dl_model
HALCON has been extended with file forward compatibility for deep learning models (.hdl files). Now, a model that is written using a Progress edition can be read with the latest Steady edition of HALCON. E.g., a model trained and serialized in HALCON 22.05 Progress can be read in HALCON 20.11.x Steady.
This compatibility is only possible if the written model only uses features that are also part of the feature set of the Steady version. E.g., if a model uses the Adam solver during training (a feature of HALCON 22.05 Progress), that model cannot be read in HALCON 20.11.x Steady because this feature was not part of the Steady edition. However, in that example the solver type can be reset to SGD before writing, which makes the model compatible with HALCON 20.11.x Steady.
read_dl_model and deserialize_dl_model now return an extended error message in case that the operator fails due to a compatibility issue with a newer version.
create_dl_layer_transposed_convolution has been extended to allow using arbitrary padding values.
Changing the shape of the inputs of a DL model has been sped up. The exact speedup depends on the network and is in general higher if the network contains many layers for which the shape of the weights does not change when changing the shapes of the inputs.
read_dl_model now supports reading ONNX models with ONNX operations 'Sub' and 'Mean'.
apply_dl_model now supports output requests for HALCON AI2 interfaces.
The Deep OCR detection model used by create_deep_ocr has been improved. The resulting detection boxes of apply_deep_ocr for the modes 'detection' and 'auto' are now in general more precise and the estimation of their orientation is slightly better. Note that this change affects the compatibility. Read more.
The DL Framework now allows creating a new type of layer with the operator create_dl_layer_permutation. This layer can permute the order of the four axes of the input and rearranges the input data accordingly.
set_dl_model_param now supports a new parameter 'batchnorm_momentum' to set the momentum of the batch normalization layers of the model.
HALCON deep learning training has been extended with a new optimization algorithm (Adam). This solver is available for all deep learning models except for models of type 'anomaly_detection'.
The Handle Inspect for handles of type 'dl_model' has been extended with the following variables:
'solver_type': Defines the optimization algorithm ('sgd' or 'adam')
'adam_beta1': Defines the momentum for the linear term in the Adam solver
'adam_beta2': Defines the momentum for the quadratic term in the Adam solver
'adam_epsilon': Guarantees the numeric stability of the Adam solver
read_dl_model now supports reading ONNX models with operator 'Constant'.
The procedure augment_dl_samples provides two new augmentation methods for deep learning models. They enable augmenting the contrast and saturating input images. Note that this change affects the compatibility. Read more.
set_deep_ocr_param has been extended with the parameter 'detection_tiling_overlap', which allows the user to control the extent of the overlapping image tiles.
Filter
HALCON has been extended with an operator equ_histo_image_rect, which performs adaptive histogram equalization within a rectangular mask. The new HDevelop example program hdevelop/Filters/Enhancement/equ_histo_image_rect.hdev shows the new functionality.
HALCON has been extended with the operator mean_image_shape. It can be used to smooth an image by mean filtering with an arbitrarily shaped region.
Matching
The C++, C++.NET, C#, VB.NET, and Python examples have been updated to the new generic shape-based matching interface.
The following example programs have been updated concerning the shape-based matching parts. Now, they use the generic interface.
The custom HPeek demo has also been updated to the generic shape matching interface. You can download this demo in our customer area for free and evaluate the performance on your hardware.
hdevelop/explore_halcon.hdev
hdevelop/Applications/Position-Recognition-2D/pm_world_plane.hdev
hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
hdevelop/Applications/Object-Recognition-2D/pm_multiple_models.hdev
hdevelop/Applications/Print-Inspection/print_check.hdev
Measure
The new operator get_measure_param can be used to obtain information about a measure object. Additionally, measure objects can now be inspected in the handle inspect window.
Miscellaneous
The zlib library has been updated to 1.2.12.
System
system_call has been improved. Now, it uses the POSIX Spawn API for Linux and macOS, which can improve speed and memory footprint. Additionally, more information in case of errors is provided as low-level error message.
get_compute_device_info has been extended with the parameter 'max_mem_alloc_size', which reports the maximum size of an OpenCL memory block in bytes.
Tuple
The new operator tuple_join allows concatenating strings to a single string by adding separators in between. It works the opposite way as the already existing operator tuple_split. The short HDevelop example program hdevelop/Tuple/String-Operations/tuple_split_join.hdev has been added.
Bug Fixes3D
calibrate_sheet_of_light crashed in rare cases when applied to a read or deserialized model. This problem has been fixed.
depth_from_focus on OpenCL devices returned incorrect results if mean filtering was used with the 'Filter' parameter, e.g.: Filter = ['bandpass', 3, 3]. This problem has been fixed.
read_object_model_3d returned an error when reading an OBJ file that contained both vn lines and v lines, and where the number of vn lines was different from the number of v lines. This problem has been fixed. Now, the operator ignores vn lines if their number is different from the number of v lines.
photometric_stereo returned the normalized surface normal when the parameter 'normalized_gradient' was set. The parameter has been renamed to 'normalized_surface_normal'. The old parameter name is still supported for backwards compatibility. The HDevelop example program hdevelop/Applications/Surface-Inspection/determine_tilt_slant_photometric_stereo.hdev has been extended to show the usage of the parameter.
Bar Code
In very rare cases, find_bar_code crashed when barcode candidates were found at the image border. This problem has been fixed.
In very rare cases, get_bar_code_result crashed for print quality inspection ('quality_isoiec15416') of barcode results found at the image border. This problem has been fixed.
get_bar_code_object and get_bar_code_result in some cases returned wrong scanline statuses if the result was retrieved by a call to find_bar_code with 'min_identical_scanlines' set to a number larger than 1. This problem has been fixed.
Calibration
An error message contained a typo. This problem has been fixed by renaming the define H_ERR_CAL_AMBIGIOUS in HErrorDef.h to H_ERR_CAL_AMBIGUOUS.Note that this change affects the compatibility. Read more.
Classification
In some cases, select_feature_set_svm behaved non-deterministically. This problem has been fixed.
Data Code
The print quality inspection for Data Matrix ECC 200 codes returned incorrect grades on mirrored codes. This problem has been fixed.
write_data_code_2d_model did not write Micro QR code models correctly, i.e., no Micro QR codes could be found when using such models. This problem has been fixed.
get_data_code_2d_results accepted tuples of parameter names for which some parameter names return multiple values (e.g., '*_labels' parameters). This problem has been fixed. Now, get_data_code_2d_result returns an error in this case.
In rare cases, find_data_code_2d returned duplicate results for Aztec codes. Further, Aztec codes could be returned that did not lie completely within the image domain. These problems have been fixed.
get_data_code_2d_results returned the orientation angle for DotCode symbols in radians instead of degrees. Additionally, the orientation angle of successfully decoded DotCode results was given in the range of [-90, 90] degrees rather than [-180, 180] degrees. These problems have been fixed.
find_data_code_2d crashed in rare cases for the DotCode symbol. This problem has been fixed.
In very rare cases, find_data_code_2d returned the error 6001 ("Not enough memory available") for Micro QR Codes. This problem has been fixed.
get_data_code_2d_results crashed for print quality inspection ('quality_isoiec15415') if 'quality_isoiec15415_aperture_size' was set to 0. This problem has been fixed.
In very rare cases, the variable 'module grid' used in find_data_code_2d and print quality inspection for Data Matrix ECC 200 was incorrect. This problem has been fixed.
Deep Learning
The deep learning procedure train_dl_model sometimes showed overlapping text snippets during a deep learning training. This problem has been fixed by not showing the full device name anymore but cutting it after some characters.
Setting the same device multiple times for a deep learning model could lead to the error 4320 ("Error occurred in an AI Accelerator Interface"). This problem has been fixed. Note that this change affects the compatibility. Read more.
For instance segmentation models, setting the parameters 'min_confidence', 'max_overlap', 'max_overlap_class_agnostic', and 'max_num_detections' had no effect. This problem has been fixed.
Custom deep learning models containing input layers that were created using create_dl_layer_input with 'input_type' 'constant' could have behaved wrongly in certain cases, e.g. after changing the model parameter 'input_dimensions'. This problem has been fixed.
set_dl_model_layer_weights in some cases could leak memory. This problem has been fixed.
apply_dl_model and train_dl_model_batch could have crashed for deep learning models with a dense layer when the parameter 'bias_term' was set to 'false'. This problem has been fixed.
HALCON's AI2 Interfaces could not be used for networks with multiple inputs. This problem has been fixed.
Inference of DL models with constant input layer did not work with AI2 plugin devices. This problem has been fixed.
Using the batchnorm layer with the parameter 'has_biases' set to 'false' resulted in a crash during serialization and training. This problem has been fixed.
A deep learning layer can be directly connected to the same other layer only once. This is now ensured by the operator read_dl_model when reading an ONNX model and by the operators create_dl_layer_concat, create_dl_layer_elementwise, create_dl_layer_loss_cross_entropy, create_dl_layer_loss_ctc, create_dl_layer_loss_distance, create_dl_layer_loss_focal, create_dl_layer_loss_huber, and create_dl_layer_zoom_to_layer_size.
gen_dl_model_heatmap returned incorrect heatmaps for models that use a batchnorm layer with bounded ReLU activation as, e.g., for pretrained_dl_classifier_mobilenet_v2.hdl. This problem has been fixed.
When using the procedure read_dl_dataset_from_coco to read a dataset that does not contain segmentation masks, an exception was thrown when using the procedure's default parameters. This problem has been fixed. Now, when using default parameters, datasets without segmentation masks are read and returned without such masks, while for datasets that include segmentation masks that mask is read and returned.
Customer-defined DL networks with layer that have multiple inputs could have been handled incorrectly if inferred on an AI2 plugin. This problem has been fixed.
optimize_dl_model_for_inference sometimes crashed if entries in DLSamples have invalid key values. This problem has been fixed.
The serialization of a batchnorm layer with momentum specified as 'auto' had an error. The underlying momentum value was set to zero during the read operation regardless of the given actual momentum value. This has the effect that if a model was pretrained with such a batchnorm layer, the given layer statistics (mean/variance) were overwritten during the very first iteration by the first batch of data using train_dl_model_batch. This is a problem because if the batchnorm statistics (mean/variance) change rapidly like this, the weights of connected layers have to be changed radically as well and this leads to bad learning behavior.
This problem has been fixed. Now, the momentum value is persistent and will be restored after the read operation. The statistics of the batchnorm layers will thus not change rapidly. Note that there is an option to change the momentum value of a given model via set_dl_model_param.
This issue does not apply to any of the pretrained models provided by HALCON. The issue only applies to models created with the operator set create_dl_layer_*.
The DL layer created by create_dl_layer_reshape sometimes overwrote gradients of other layers that used the same input layer during the training. This problem has been fixed.
Depending on the layers that followed a concat layer, there could be a memory error during the training of the model if the training was done with a 'cpu' device. This problem has been fixed.
HALCON AI2 interfaces could not handle models with zoom layer created with create_dl_layer_zoom_to_layer_size where the reference input layer only served as an input to the zoom layer. This problem has been fixed.
The plots produced by dev_display_anomaly_detection_evaluation were difficult to inspect if the anomaly thresholds are close to the border. This problem has been fixed. Now, the OK and NOK histograms take up at least 15% of the whole plot width.
It was not safe to call the operator train_dl_classifier_batch simultaneously from different threads. This problem has been fixed.
Setting and afterwards getting an unsupported value for the 'meta_data' for a deep learning model via set_dl_model_param could lead to a crash. This problem has been fixed.
During the runtime initialization of a deep learning model using an AI2 device CPU memory was leaked. This problem has been fixed.
Setting the 'input_dimensions' of a deep-learning model with set_dl_model_param returned an error if the corresponding tuple with integer values within the input dictionary previously contained values of mixed data types. This problem has been fixed.
Filter
In rare cases, optical_flow_mg could have returned nondeterministic results that may have included NaNs. This problem has been fixed.
rank_image treated regions with negative center points erroneously due to rounding errors. This problem has been fixed.
rank_image and trimmed_mean may have returned wrong error messages or even crash if the filter size exceeded the image size. These problems have been fixed. Now, an appropriate error message is returned.
gen_filter_mask did not work as documented, in particular, the values could be scaled, the inverse was ignored, and there was a dependency to the image size. This problem has been fixed. Note that this change affects the compatibility. Read more.
optical_flow_mg sometimes crashed for large images or unnecessarily returned the error 6001 ("Not enough memory available"). Further, optical_flow_mg sometimes leaked memory in cases where it returned an error. These problems have been fixed.
gray_erosion, gray_dilation, gray_tophat, gray_bothat, gray_opening, and gray_closing may have crashed in HALCON XL for very large image sizes. This problem has been fixed.
The OpenCL implementation of mean_image allowed input parameter combinations that could lead to undefined behavior of the OpenCL device. This problem has been fixed.
Graphics
Attaching a drawing object to a window or buffer in one thread, while setting or getting its parameters in a different thread, could result in a crash. This problem has been fixed.
create_drawing_object_circle, create_drawing_object_circle_sector, create_drawing_object_ellipse, create_drawing_object_ellipse_sector, and create_drawing_object_rectangle2 rounded floating-point control parameters to the next integer. This problem has been fixed.
Through an internal change in the HDevelop Start Dialog, a performance regression was introduced with HDevelop 19.11. This affected operators like get_mposition_sub_pix, dev_display, and more.
The runtime environment HDevEngine has never been affected by this. This problem has already been fixed with HDevelop 21.11.
Images
write_image did not correctly write images bigger than 2 GB. This problem has been fixed.
crop_rectangle2 returned a low level error (still allocated temporary memory) if AlignToAxis was set to 'false'. This problem has been fixed.
get_image_pointer1_rect did not return the number of used bits for uint2 images if set from the acquisition device. This problem has been fixed.
Matching
find_ncc_model could occasionally yield non-deterministic results. This problem has been fixed.
In rare cases, shape model functionality may have crashed or malfunctioned for a large number of rotations or scales. This problem has been fixed. Now, the error 6001 ("Not enough memory available") is returned.
find_generic_shape_model crashed when an empty tuple was specified as 'ModelID'. This problem has been fixed.
find_ncc_model and find_ncc_models had unexpected results without parallelization in rare cases. This problem has been fixed.
set_shape_model_metric did not set the model parameter 'metric_param' correctly. This problem has been fixed.
Miscellaneous
set_bg_esti_params and close_bg_esti leaked memory. This problem has been fixed.
Morphology
gray_erosion, gray_dilation, gray_opening, gray_closing, gray_tophat, and gray_bothat could have worked incorrectly for structuring elements with size larger than the image size. This problem has been fixed. A corresponding error is now returned in this case.
minkowski_add1, minkowski_add2, minkowski_sub1, and minkowski_sub2 returned the error 3501 ("Number of chords too big. Increase 'current_runlength_number' using set_system!") if the input region had more runs than 'current_runlength_number' and 'Iterations' was set to a value larger than 1. This problem has been fixed.
Parallelization
Operators that use FFT, including photometric_stereo with ResultType 'height_field', ignored the maximum number of threads to use set with set_system('thread_num'). This problem has been fixed. Now, the operators use at most as many threads as set with set_system.
Region
Calling gen_random_regions with parameters that create only empty regions caused an infinite loop for rectangle1, circles, ellipses, and rings. This problem has been fixed. Now, also empty regions are returned.
move_region did not correctly detect situations where the region coordinates exceeded the maximum allowed range. This problem has been fixed. Now, the respective exception will be thrown if the coordinates exceed the allowed range and 'clip_region' is set to 'false'.
gen_rectangle1 and other region operators could have displayed an inaccurate error message in HDevelopXL if the minimum or maximum value for the input rows or columns were exceeded. This problem has been fixed.
gen_circle incorrectly returned an error in extreme cases when the resulting region was very close to the allowed minimum or maximum. This problem has been fixed.
In very rare cases, area_center could suffer from signed integer overflow, especially on 32-bit systems and 64-bit systems with enabled AVX2 support. This problem has been fixed.
polar_trans_region and polar_trans_region_inv accepted too large inputs for their 'width' and 'height' input parameters. This problem has been fixed.
Segmentation
hysteresis_threshold returned errors with very large values for the thresholds. This problem has been fixed.
hysteresis_threshold did not return correct results for low thresholds near -FLT_MAX. This problem has been fixed.
System
A sequence of get_system('alloctmp_single_block', Value) and set_system('alloctmp_single_block', Value) could unintentionally overwrite the 'temporary_mem_cache' setting if the temporary memory cache was set to 'shared' or 'aggregate'. This problem has been fixed. Now, whenever the current 'temporary_mem_cache' mode is not supported by the deprecated 'alloctmp_single_block' setting, get_system('alloctmp_single_block', Value) will return 'unsupported_mode' and a low error message will be thrown.
get_system with parameter 'current_license_info' did not report the Deep Learning Training module. This problem has been fixed.
get_system returned unexpected results for the revision query if run on a HALCON Progress edition. This problem has been fixed.
Transformation
affine_trans_image_size in some cases crashed when using HALCON XL if the input image dimensions exceeded the maximum image dimensions of HALCON, AVX2 instructions were enabled, and 'int_zooming' was set to 'true' .
Furthermore, affine_trans_image_size may have returned wrong results when using HALCON XL if the input image dimensions exceeded the maximum image dimensions of HALCON, 'int_zooming' was set to 'true', and AVX2 instructions were disabled or not supported.
Both problems applied to all image types except 'real'. These problems have been fixed.
Tuple
HDevelop could crash when a variable held a dictionary that contained HNULL as one of its values. This problem has been fixed.
For some serialized items, the type and the content of the serialized data was not properly displayed in the handle inspect window. This problem has been fixed.
XLD
select_shape_xld had a memory leak for some features. This problem has been fixed.
select_shape selected only features greater than 0 when using 'min' for the Min argument. This problem has been fixed.
PROCEDURESBug Fixes
The deep learning procedure train_dl_model sometimes showed overlapping text snippets during a deep learning training. This problem has been fixed by not showing the full device name anymore but cutting it after some characters.
HALCON/C++Bug Fixes
Some XLD classes could not be correctly cloned in HALCON/CPP and HALCON/.NET. The affected classes were HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, and HXLDPoly. Cloning them returned an instance of the base class HXLD instead. This problem has been fixed. Note that this change affects the compatibility. Read more.
HALCON/.NETFunctionality
An XML namespace (xlmns) definition has been added to make it easier to reference HALCON/.NET from XAML code. Instead of xmlns:ha="clr-namespace:HalconDotNet;assembly=halcondotnet"
you can now write xmlns:ha="http://schemas.mvtec.com/halcondotnet". In particular, this allows you to share the XAML code for builds targeting different assembly names, e.g., HALCON + HALCON XL or .NET Framework + .NET Core.
HALCON exceptions during initialization of HSmartWindowControlWPF and HSmartWindowControl (in particular due to missing license) could not be handled easily. Now, they will be caught internally, for example, to allow a later license check in application code. Details about errors during startup can be obtained via the HErrorNotify event.
Bug Fixes
Using dependency properties like LineWidth and LineStyle of HIconicDisplayObjectWPF and HColumn, HRow, HMessageText, and HCoordinateSystem of HMessageDisplayObjectWPF caused an Visual Studio Designer error. This problem has been fixed.
Some XLD classes could not be correctly deserialized in HALCON/.NET. The affected classes were HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, and HXLDPoly. This problem has been fixed. Note that this change affects the compatibility. Read more.
Display using HSmartWindowControl leaked some unnecessary GDI objects (until garbage collection). In rare cases, the display handling in HSmartWindowControl may have caused undefined behavior. This problem has been fixed.
Some XLD classes could not be correctly cloned in HALCON/CPP and HALCON/.NET. The affected classes were HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, and HXLDPoly. Cloning them returned an instance of the base class HXLD instead. This problem has been fixed. Note that this change affects the compatibility. Read more.
LANGUAGE INTERFACE EXAMPLE PROGRAMSFunctionality
The build method of the following examples has been improved:
Now, these examples can be build with CMake by using the provided CMakeLists.txt files.
c
cpp/console
cpp/mfc/FGMultiThreading
cpp/mfc/Matching
cpp/mfc/MatchingExtWin
cpp/motif/Matching
cpp/qt/Matching
hdevengine/cpp
hdevengine/mfc/exec_procedures_mt_mfc
The example program cpp/mfc/MultiThreading has been removed and the example program cpp/mfc/FGMultiThreading has been rewritten. Now, the example cpp/mfc/FGMultiThreading uses message queues for data delivery between threads.
Bug Fixes
The cpp.net/Interoperate example did not open in newer versions of Visual Studio. This problem has been fixed by adding a separate project for Visual Studio 2019 and later.
The MultiThreading example crashed when the application was closed while running. This problem has been fixed.
The HDevelopTemplate example crashed when the application was closed while running. This problem has been fixed.
The following examples crashed when the application was closed while running:
This problem has been fixed.
hdevengine/c#/MultiThreading
hdevengine/c#/MultiThreadingTwoWindows
c#/MultiThreading
HBENCHFunctionality
The deprecated benchmark -c_operations is no longer available via hbench.
IMAGE ACQUISITION INTERFACES
Miscellaneous
Grabbing images from two or more open image acquisition interfaces could lead to execution of open_framegrabber being blocked indefinitely. This problem has been fixed.
DIGITAL I/O INTERFACES
DOCUMENTATIONProgrammer's Manuals
The description how to remove the Variable Inspect Extension for Visual Studio (VSIX) has been adapted to the current versions of Visual Studio.
User Guides
In the HDevelop User's Guide, the descriptions of the menu items have been structured in a clearer way. Now, tables show the menu entries with their corresponding descriptions and shortcuts.
The usability of the HDevelop User's Guide has been improved. In chapter 6, windows and dialogs are now ordered in alphabetical order. The appendix "Keyboard Shortcuts" is also ordered alphabetically.
The layout of lists, e.g, for explaining icons, in the HTML documentation has been improved.
The description of generic operating system dialogs has been removed from the HDevelop User's Guide.
The documentation regarding reserved words and dictionary expressions has been improved.
In the Quick Guide, the figure showing the basic architecture of HALCON did not mention the AI2 interfaces. This problem has been fixed.
Solution Guides
In the Solution Guide III-C, the section on hand-eye calibration did not clearly state that two separate calibration models are needed when performing a hand-eye calibration with a stereo camera system. This problem has been fixed.
The Solution Guide I Basics and the Solution Guide II-A Image Acquisition stated wrong example paths to Image Acquisition and I/O examples. This problem has been fixed.
The Solution Guide III-C 3D Vision still stated that camera parameters, camera pose, light plane pose, and movement pose of calibrated sheet-of-light models could not be obtained. As this is not the case anymore, the corresponding section has been adapted.
Reference Manual
The formula describing the NCC method in the reference manual entries of binocular_disparity and binocular_distance was not correct. This problem has been fixed.
The reference manual entry for create_dict, set_dict_tuple, and create_message as well as the section in the HDevelop User's Guide discussing dictionaries contained wrong information about copies of handles. This problem has been fixed.
The reference manual entries for create_dl_layer_dense, create_dl_layer_convolution, and create_dl_layer_batch_normalization erroneously stated 'xavier' instead of 'const' as default value for 'bias_filler'. This problem has been fixed
The reference manual entry for create_message stated that tuple and objects in messages are stored as deep copies. However, this is just the case for tuples. This problem has been fixed.
The reference manual entry for find_bar_code had a misleading description of the parameter 'quiet_zone'. This problem has been fixed.
The reference manual chapter "Deep Learning" > "Object Detection, Instance Segmentation" listed the non-existent parameter 'mask_threshold' for instance segmentation models. This entry has been removed.
The reference manual entries of gen_image_surface_first_order and gen_image_surface_second_order have been extended with information regarding the usage with fit_surface_first_order or fit_surface_second_order, respectively. The workflow in the example programs hdevelop/3D-Object-Model/Segmentation/remove_background_for_3d_object_localization.hdev and hdevelop/3D-Object-Model/Segmentation/remove_bin_for_3d_object_localization.hdev have been adapted accordingly. The chapter on background removal in the technical note on surface-based matching has been adapted as well.
The reference manual entry for gen_random_regions missed a precise parameter description. This problem has been fixed.
The reference manual entry for get_dict_param missed the default value for the parameter 'key'. This problem has been fixed.
The reference manual entry for get_dl_model_param falsely listed 'tensorrt' and 'openvino' as possible values for 'runtime'. This problem has been fixed.
In some reference manual entries, Booleans and return values were confused: The entry for get_operator_info mentioned return values TRUE/FALSE instead of H_MSG_TRUE/H_MSG_FALSE and several operators mentioned a call of set_system with the value H_MSG_TRUE/H_MSG_FALSE instead of TRUE/FALSE in their result section. These problems have been fixed.
The reference manual entries of get_polygon_xld, get_lines_xld, and get_parallels_xld did not clearly state that the retrieved angles refer to the normals of the lines. This problem has been fixed.
The reference manual entry for local_threshold did not draw attention to the fact that unexpected results can occur for images with a reduced domain. This problem has been fixed by adding a corresponding note.
In the reference manual entry for segment_contours_xld, a statement concerning the condition for the second optimization step was wrong. This problem has been fixed.
The reference manual entries for send_tuple and receive_tuple did not mention restrictions regarding tuples. This problem has been fixed.
The reference manual entry for set_dl_model_layer_param regarding 'bias_term' was not accurate enough. This problem has been fixed.
The reference manual entry for set_generic_shape_model_param listed wrong options for the generic parameter 'optimization'. This problem has been fixed.
The reference manual entry for set_surface_model_param now describes the behavior of 'symmetry_axis_direction' and 'symmetry_axis_origin' when used together with a restriction of the pose range.
The reference manual entry for tuple_insert, tuple_sem_type, and tuple_sem_type_elem lacked a description of the in-line notation. For tuple_insert, the description was also missing in the HDevelop User's Guide. These problems have been fixed.
The reference manual entries for zoom_image_factor and zoom_image_size were incorrect for special cases. This problem has been fixed.
The reference manual chapter "Filters" was updated regarding the occurrence of undefined pixels and the different strategies to prevent errors when applying filters consecutively. It was also extended with an introduction to the concept of filter masks.
In the dark theme, the tables in the documentation of the OpenVINO™ interface were barely legible. This problem has been fixed.
In the dark theme, code blocks within the procedure documentation were not legible. This problem has been fixed.
The HDevelop example code snippet of the procedure documentation of plot_funct_1d caused an exception when being executed. This problem has been fixed.
Miscellaneous
The documentation did not mention that using HALCON XL is only recommended if its features are really needed. Now, this is noted in the Programmer's Guide and in the Installation Guide.
LICENSING
A remote dongle license was not properly released by HDevelop during termination, causing a few minutes delay until the license was usable again. This problem has been fixed.
RELEASE NOTES OF PREVIOUS HALCON VERSIONS