MVTec Software GmbH
 

Release Notes for HALCON 17.12 Progress

This document provides the release notes for MVTec HALCON 17.12 Progress, as released in December 2017.


Addendum to the Release Notes of HALCON 17.12

The originally released version of HALCON 17.12 had the following issues:

  • The HALCON library did not export the symbols for the functions dealing with 3D object models. This only affects the linking of image acquisition interfaces and extension packages handling 3D object models and the use of HALCON 13 image acquisition interfaces that support 3D object models.
  • HALCON's deep-learning-based classification could not be used with the CUDA Toolkit Version 9.1 or higher. Note that we cannot guarantee that future CUDA versions can be used together with HALCON.
Therefore, the HALCON library 17.12 was replaced by an updated HALCON library 17.12.0.2.

To find out which version is currently installed, please open the dialog "Help->About" in HDevelop. The newest version of the HALCON library is indicated by: "HALCON version: 17.12.0.2 (18.12.2017)". The file version of the HALCON library can also be checked with the following operator call: get_system('file_version',FileVersion), or, under Windows, by inspecting the file properties of the files halcon.dll and halconxl.dll.


Contents

Major New Features of HALCON 17.12 Progress

Deep Learning

With HALCON 17.12 users are able to train their own classifier using CNNs (Convolutional Neural Networks) based on two pretrained networks that are included in HALCON. These have been highly optimized for industrial applications and are based on hundreds of thousands of images.

During training, HALCON automatically learns which features can be used to identify different classes – a big advantage compared to all previous classification methods. This significantly reduces programming efforts.

After training the CNN, it can be used for classifying new data with HALCON.

Deflectometry

HALCON 17.12 includes a new method for inspecting specular reflecting surfaces to detect defects like dents or scratches which can hardly be identified using conventional surface inspection techniques. Deflectometry uses specular reflections by observing mirror images of known patterns and their deformations on the surface.

Easy Code Export

HDevelop provides a new library export that makes the use of HALCON procedures from C++ as easy and intuitive as calling any other C++ function. This is possible via a C++ wrapper that encapsulates the necessary HDevEngine API calls. This new library export also generates CMake projects which can easily be configured to output project files for many popular IDEs, such as Visual Studio.

The new functionality is accessible from the HDevelop GUI and via command line interface.

Improved Automatic Text Reader

HALCON 17.12 features an improved automatic text reader, which now detects and separates touching characters more robustly.

3D Fusion

HALCON now offers a new method that fuses multiple 3D point clouds into one watertight surface. This new method is able to combine data from different or even various 3D sensors, like a stereo camera, time of flight camera, or fringe projection. The data from these sensors get fused into one highly optimized 3D point cloud. This technology is especially useful for reverse engineering.

GigEVision2

HALCON now provides the new GigEVision2 interface which supports devices complying with the GigE Vision 2.x standard and replaces the old GigEVision interface. In particular, this new interface supports the transmission of chunk data and additional payload types including the multipart payload. In combination with a 3D sensor that supports the multipart payload type the GigEVision2 interface is now able to directly create an ObjectModel3D when using grab_data or grab_data_async.

Compatibility

Licenses

  • HALCON 17.12 Progress is a complete new HALCON Edition. Thus, HALCON Progress licenses are not compatible with HALCON 13 and previous HALCON versions. More information.

HALCON Library

Compared to HALCON 13.0, many extensions have been introduced. Thus, the HALCON 17.12 Progress libraries are not binary compatible with HALCON 13.0.x or earlier versions.

However, HALCON 17.12 Progress is mostly source-code compatible to HALCON 13.0.x except for the changes listed below:

  • For find_text, do_ocr_single_class_cnn, and do_ocr_multi_class_cnn the implementation of the CNN-based OCR classifier has been improved. This can lead to slightly different results in the achieved confidences. More information.
  • The parameters
    • 'module_gap_col',
    • 'module_gap_col_min',
    • 'module_gap_col_max',
    • 'module_gap_row',
    • 'module_gap_row_min', and
    • 'module_gap_row_max'
    of set_data_code_2d_param and get_data_code_2d_param have been removed. Use 'module_gap_min' instead of 'module_gap_col_min'. Furthermore, use 'module_gap_row_min' and 'module_gap_max' instead of 'module_col_max' and 'module_row_max'.
  • set_stereo_model_param returned the error 1303 ("Wrong value of control parameter 3"), if GenParamName was set to 'surface_tolerance' and GenParamValue exceeded the value of 'min_thickness' stored in StereoModelID. set_stereo_model_param now returns the error 9544 ("The minimum thickness is smaller than the surface tolerance").
  • Note that the following undocumented but public functions for setting callbacks were removed. Applications must now use the new callback functionality within set_system instead.
    • HSetCallbackOCRClassMLP
    • HSetCallbackClassMLP
    • HSetCallbackOCRClassSVM
    • HSetCallbackClassSVM
    • HSetCallbackClassGMM
    • HSetCallbackTriang3D
    • HSetCallbackFeatSel
    • HSetCallbackDistXLD
    • HSetCallbackTrainTexture
    • HSetCallbackCalibSOL
    • HSetCallbackMultiView
    More information.
  • tuple_regexp_match, tuple_regexp_replace, tuple_regexp_select, and tuple_regexp_test now support empty matches. Regular expressions such as '.*' or '^$' now match on an empty string. To avoid empty matches, the regular expression has to be adapted, e.g., by using '.+' instead of '.*'. More information.

HALCON Applications

Please re-compile all C, C++, or .NET programs developed with HALCON 13.0.x.

The incompatibility with HALCON 13.0.x 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 17.12 Progress and HALCON 13.0.x image acquisition interfaces are library compatible.

HALCON 17.12 Progress includes only standard image acquisition interfaces. You can download additional interfaces from our webserver. Please note also the following compatibility issues related to image acquisition interfaces:

  • The MVTec GigE Vision Streaming Filter version 2.1.8.0 that is part of the Windows version of the new GigEVision2 interface is only compatible with revision 13.0.3 and higher of the old GigEVision interface. If both, GigEVision2 and GigEVision, interfaces should be used on the same PC you need to make sure to update to this GigEVision revision to ensure compatibility.
  • Acquisition and Digital I/O interfaces listed in the reference documentation of open_framegrabber and open_io_device will return the error code H_ERR_COMPONENT_NOT_INSTALLED instead of H_ERR_DLOPEN when loading of the interfaces fails. More information.

If you have developed your own acquisition interfaces with HALCON 13.0.x, you can re-generate them with HALCON 17.12 Progress.

Digital I/O Interfaces

In general, HALCON 17.12 Progress and HALCON 13.0.x digital I/O interfaces are library compatible.

HALCON 17.12 Progress includes only standard digital I/O interfaces. You can download additional interfaces from our webserver. If you have developed your own digital I/O interfaces with HALCON 13.0.x, you can re-generate them with HALCON 17.12 Progress.

Extension Packages

Please re-generate your own extension packages developed with HALCON 13.0.x.

Further Compatibility Information

Discontinuation of the HALCON/C++ (legacy) Language Interface

The HALCON/C++ (legacy) interface is no longer available.

Discontinuation of the HALCON/COM Language Interface

The HALCON/COM interface, including the possibility to develop with Delphi, is no longer available.

Detailed Description of Changes in HALCON 17.12 Progress

The changes in HALCON 17.12 Progress are described with respect to HALCON 13.0.1. The detailed description of changes in previous HALCON versions can be found in the release notes of the previous HALCON versions.

HDevelop

New Functionality

IDE
  • The HDevelop editor now highlights instances of the word under the cursor or instances of the selected text. The auto highlighting can be enabled and disabled in the preferences.
Procedures
  • The saving of procedures in procedure library files has been improved to facilitate the work with, e.g., version control systems. Now, procedures are always stored in lexicographical order (case insensitive).
  • Within the procedure interface dialog, now the scope of local procedures can be chosen in the same way as the scope of external procedures. The icons of private local procedures are marked in the same way as private external procedures.
    Note that in HDevelop private local procedures behave the same as public local procedures, but in HDevEngine applications no HDevProcedure objects can be created from private local procedures nor will their names get listed by HDevProgram::GetLocalProcedureNames. Additionally, private local procedures are not included in the exported header file of the new library export.
Code Export
  • C++ code exported from HDevelop now encloses the call to the action() function with a try/catch block.
  • HDevelop provides a new library export that makes the use of HALCON procedures from C++ as easy and intuitive as calling any other C++ function. This is possible via a C++ wrapper that encapsulates the necessary HDevEngine API calls. With this new library export, CMake projects are generated. CMake projects can easily be used to generate project files for many popular IDEs, such as Visual Studio. The new functionality is accessible from the HDevelop GUI and via command line interface.
Miscellaneous
  • The handling of paths with non-ASCII characters has been improved.

Bug Fixes

GUI
  • HDevelop crashed in rare cases when closing the runtime statistics window. This problem has been fixed.
  • HDevelop crashed when closing an empty variable inspection window under certain circumstances (multiple variables, multiple cells selected, program was reset). This problem has been fixed.
IDE
  • HDevelop's auto completion list box showed a dot in front of vector methods. This problem has been fixed.
  • While using the keyboard in the autocompletion of HDevelop, it happened that the tooltip obscured the shown list. This problem has been fixed.
  • When cycling through HDevelop's auto completion list, the cycling stopped at the first entry when the Up Key was pressed. This problem has been fixed. Now, it can be cycled through in both directions. Additionally, the HOME key can now be used to go to the first entry and the END key can be used to select the last entry in the list.
  • When opening an inspection window for a hom_mat3d matrix a second time, HDevelop opened another inspection window instead of re-using the existing one. This problem has been fixed.
  • HDevelop behaved inconsistently or crashed when executing procedures containing vector operations with erroneous index expressions JIT-compiled. This problem has been fixed.
HDevelop Language
  • HDevelop easily crashed on Windows systems for languages with multibyte encodings such as Japanese, e.g., when typing "tmp := abs" into the Program Window. Note that this problem has already been fixed in HALCON 13.0.1.1.
Procedures
  • If during the creation of an HDevelop procedure from a selection of code lines a variable name has been suggested as an input as well as an output parameter, the variable name is used as input parameter of the procedure, and for the output parameter a new variable name is created which corresponds to the variable name extended by "Out". However, in the procedure body, the two variables were not always used consistently, which led to wrong behavior and runtime errors. This problem has been fixed.
Miscellaneous
  • On macOS, HDevelop crashed if no connection to a remote HDevEngine process could be established. This problem has been fixed.
  • JIT-compiled HDevelop procedures that used long-running HALCON Operators caused performance problems with par_start. This problem has been fixed.
  • If the HDevEngine execution was stopped within a locked procedure (e.g., due to debug_wait_for_connection), connecting HDevelop for debugging caused an error. This problem has been fixed.
  • Stopping the program execution in HDevelop with F9 (break) or F2 (reset) as well as closing HDevelop while a program was running did not work correctly when it was using mutexes. This problem has been fixed.
  • The HDevelop GUI could have become unresponsive when executing a long-running operator or JIT-compiled procedure. This problem has been fixed.
  • The import statement in HDevelop did not resolve UNC paths on Windows correctly, leading to invalid procedure paths and problems resolving external procedures. This problem has been fixed.
  • On macOS, HDevelop could have crashed when interrupting read_string or read_char by stopping the program execution. This problem has been fixed.
  • In HDevelop, it could have happened that string constants with characters that are not supported by the current code page, like umlauts on a Japanese system, were converted to similar ANSI characters so that they could not be used as intended, even if the HLib encoding was set to UTF-8 afterwards. This problem has been fixed.

HDevelop Example Programs

New, Improved, or Deleted HDevelop Example Programs
Additionally to the new or improved examples mentioned within the context of other features, the following examples have been added or improved:
  • The HDevelop example program
    • hdevelop/3D-Object-Model/Transformations/fuse_object_model_3d_workflow.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/Applications/Surface-Inspection/inspect_flooring_uncalib_photometric_stereo.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/OCR/Segmentation/find_text_separate_touching_chars.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/Object/Manipulation/insert_obj.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/Object/Manipulation/remove_obj.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/Object/Manipulation/replace_obj.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/opc_ua_read_struct.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/opc_ua_read_write_complex_data_types.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/Tools/Geometry/distance_cc_min_points.hdev
    has been added.
  • The HDevelop example program
    • solution_guide/3d_vision/camera_calibration_single_image.hdev
    has been added.
  • The HDevelop example program
    • solution_guide/3d_vision/hand_eye_create_robot_poses.hdev
    has been added.
  • The HDevelop example program
    • solution_guide/3d_vision/hand_eye_movingcam_calibration.hdev
    has been added.
  • The HDevelop example program
    • solution_guide/3d_vision/hand_eye_movingcam_calibration_poses.hdev
    has been added.
  • The HDevelop example program
    • solution_guide/3d_vision/hand_eye_stationarycam_calibration.hdev
    has been added.
  • The HDevelop example program
    • solution_guide/3d_vision/hand_eye_stationarycam_grasp_nut.hdev
    has been added.
The following examples have been removed:
  • The HDevelop example program
    • hdevelop/Develop/dev_map_par.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/adlink-daqpilot_digital_read.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/adlink-daqpilot_digital_write.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/adlink-eos_digital_read.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/adlink-eos_digital_write.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/adlink-eos_event_based_read.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/advantech_digital_read.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/advantech_digital_write.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/contec_digital_read.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/contec_digital_write.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/interface_digital_read.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/interface_digital_write.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/nidaqmx_counter.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/nidaqmx_digital_read.hdev
    has been deleted.
  • The HDevelop example program
    • hdevelop/System/IO-Devices/nidaqmx_digital_write.hdev
    has been deleted.
  • The HDevelop example program
    • solution_guide/3d_vision/handeye_create_robot_poses.hdev
    has been deleted.
  • The HDevelop example program
    • solution_guide/3d_vision/handeye_movingcam_calibration.hdev
    has been deleted.
  • The HDevelop example program
    • solution_guide/3d_vision/handeye_movingcam_calibration_poses.hdev
    has been deleted.
  • The HDevelop example program
    • solution_guide/3d_vision/handeye_stationarycam_calibration.hdev
    has been deleted.
  • The HDevelop example program
    • solution_guide/3d_vision/handeye_stationarycam_grasp_nut.hdev
    has been deleted.
Bug Fixes
  • The HDevelop example programs and folders regarding hand-eye calibration were named inconsistently, making it difficult to find them collectively in the HDevelop example browser. This problem has been fixed. Now, filtering either for "hand-eye" or "hand_eye" lists all relevant examples.
  • A memory leak in explore_halcon.hdev resulted in accumulation of 1.5GB of data. This problem has been fixed.
  • Some HDevelop examples used the operator tuple_environment when it was possible to query the same information using get_system, like for example the HALCON example directory. This can be a problem when using macOS since it is not possible to set environment variables for applications started from the GUI. This problem has been fixed.

HDevEngine

Speed-Up

  • The just-in-time (JIT) compiler of the HDevEngine now produces faster code, especially when performing arithmetic on tuples that contain single numbers. The compiled code is now up to 8 times faster than code compiled with previous versions of HALCON, and up to 100 times faster than HDevelop code that is not JIT-compiled.

Bug Fixes

  • Due to a race condition when shutting down the HDevEngine, threads were sometimes not cleaned up correctly before exiting the application, which led to a warning message. This problem has been fixed.
  • HDevEngine crashed due to invalid memory access when sharing one HDevProcedure across multiple threads, where the HDevProcCalls get created and destroyed inside the respective thread worker functions. This problem has been fixed.
  • Creating and destroying HDevProgram instances could have led to unresolved lines in loaded external procedures and thus to potential errors when loading further programs. This problem has been fixed.
  • convert_vector_to_tuple raised an exception with JIT compilation when the input was an empty vector. This problem has been fixed. Now, an empty tuple is returned like in the non-JIT-compiled case.
  • When passing empty tuples as input parameters to procedures via HDevEngine/.NET, it was possible for tuple data to become corrupted or even for the application to crash. Note that this problem has already been fixed in HALCON 13.0.1.1.

HALCON Library

Speedup

  • binocular_disparity_ms and binocular_distance_ms are now faster due to a further parallelization on internal data level. The achieved speedup is highly dependent on the available number of threads and data and fluctuates between 15% and 200%.
  • binomial_filter is now faster on systems that support AVX2. In particular, the following speedups compared to previously available SSE implementations can be expected:
    Image Type Image Size Filter Size Available Instruction Set Speedup
    byte 1600x1200 3x3 AVX2 up to 35%
    byte 1600x1200  5x5 AVX2 up to 35%
    byte 1600x1200 7x7 AVX2 up to 25%
    byte 1600x1200 11x11 AVX2 up to 30%
    byte 1600x1200 21x21 AVX2 up to 35%
    byte 1600x1200 3x1/1x3 AVX2 up to 55%
    byte 1600x1200 5x1/1x5 AVX2 up to 40%
    byte 1600x1200 7x1/1x7 AVX2 up to 25%
    byte 1600x1200 11x1/1x11 AVX2 up to 40%
    byte 1600x1200 21x1/1x21 AVX2 up to 50%
    Image Type Image Size Filter Size Available Instruction Set Speedup
    uint2 800x600 3x3 AVX2 up to 30%
    uint2 800x600 5x5 AVX2 up to 30%
    uint2 800x600 7x7 AVX2 up to 40%
    uint2 800x600 11x11 AVX2 up to 40%
    uint2 800x600 21x21 AVX2 up to 45%
    uint2 800x600 3x1/1x3 AVX2 up to 80%
    uint2 800x600 5x1/1x5 AVX2 up to 90%
    uint2 800x600 7x1/1x7 AVX2 up to 105%
    uint2 800x600 11x1/1x11 AVX2 up to 115%
    uint2 800x600 21x1/1x21 AVX2 up to 120%

  • find_text now uses an improved parallelization on internal data level, which results in a speedup of up to 50% on a quad core machine with hyperthreading.
  • The operators for
    • shape-based matching,
    • shape-based 3D matching,
    • deformable matching, and
    • NCC-based matching
    are now faster when processing a very large number of results.
  • mean_image using a 3x3 filter mask is now faster for uint2 images. In particular, the following speedups can be expected:
    Image Type Image Size Available Instruction Set Speedup
    uint2 800x600 AVX2 up to 280%
    uint2 1024x768 AVX2 up to 315%
    uint2 1200x960 AVX2 up to 345%
    uint2 1600x1200 AVX2 up to 170%

  • median_image is now faster for byte and uint2 images, filters of size 3x3 and 5x5 (mask type 'square', mask radius 1 and 2) and border handling 'mirrored'.
    median_rect is now faster for byte and uint2 images and filters of size 3x3 and 5x5.
    rank_rect is now faster for byte and uint2 images and filters of size 3x3 (rank 5) and 5x5 (rank 13).
    In particular the following speedups can be expected for median_image for a 1600x1200 image. Similar values can also be expected for median_rect and rank_rect. Values in parenthesis apply to a 512x512 image:
    Image
    Type
    Filter
    Size
    Instruction
    Set
    Implementation
    Change
    Speedup
    without
    Parallelization
    Speedup
    with 8-Thread
    Parallelization
    vs.
    HALCON 13
    byte 3x3 SSE2 Improved  19% 60% SSE2
        AVX2 New  72% 100% SSE2
        Non-SIMD Improved  1030% 770% Non-SIMD
        MMX Removed  n/a n/a n/a
      5x5 SSE2 Improved  22% 60% SSE2
        AVX2 New  83% 150% SSE2
        Non-SIMD Improved  380% 310% Non-SIMD
        MMX Removed  n/a n/a n/a
    uint2 3x3 SSE2 Improved  -7,5% (12,5%) 15% SSE2
        SSE41 New  55% 35% SSE2
        AVX2 New  115% 40% SSE2
        Non-SIMD Improved  7770% 6850% Non-SIMD
        MMX Removed  n/a n/a n/a
      5x5 SSE2 Improved  -10,1% (1,3%) -3,7% (30%) SSE2
        SSE41 New  54% 65% SSE2
        AVX2 New  149% 165% SSE2
        Non-SIMD Improved  3040% 2710% Non-SIMD
        MMX Removed  n/a n/a n/a

  • photometric_stereo and reconstruct_height_field_from_gradient are now faster by up to 95% when constructing the cache for the poisson algorithm or when using the poisson algorithm without cache.
  • scale_image_max is now faster for uint2 images. In particular, the following speedups compared to previous HALCON versions can be expected:
    Image Type Image Size Platform Speedup
    uint2 2048x1600 Windows up to 55%
    uint2 1600x1200 Windows up to 55%
    uint2 1024x768 Windows up to 25%
    uint2 800x600 Windows up to 18%
    uint2 2048x1600 Windows up to 60%
    uint2 1600x1200 Linux up to 60%
    uint2 1024x768 Linux up to 25%
    uint2 800x600 Linux up to 20%
    uint2 2048x1600 MacOsX up to 25%
    uint2 1600x1200 MacOsX up to 25%
    uint2 1024x768 MacOsX up to 33%
    uint2 800x600 MacOsX up to 15%

New Functionality

3D
  • HALCON has been extended with an operator fuse_object_model_3d that fuses 3D object models into one watertight surface. This new method is able to combine data from various 3D sensors, even from different types like a stereo camera, a time-of-flight camera, and fringe projection. This technology is especially useful for reverse engineering. The new HDevelop example program hdevelop/3D-Object-Model/Transformations/fuse_object_model_3d_workflow.hdev shows how to use the new operator and its various parameters. It uses the new 3D object models universal_joint_part_registered_[00-14].om3 from the subdirectory 3d_models/universal_joint_part.
  • surface_normals_object_model_3d has been extended by two methods which calculate point normals from triangles or an xyz_mapping, respectively.
  • triangulate_object_model_3d has been extended by a method which derives a mesh from a xyz_mapping.
  • HALCON has been extended with an operator uncalibrated_photometric_stereo that is able to detect high-frequency details such as surface scratches without any calibration process. The new HDevelop example program hdevelop/Applications/Surface-Inspection/inspect_flooring_uncalib_photometric_stereo.hdev shows the new functionality.
Classification
  • HALCON has been extended with a set of operators that can be used to read and train a deep neural network, and to apply it on images for classification tasks. Since the CNN (Convolutional Neural Network) extracts features automatically during training, using these operators avoids the need to manually extract features – a big advantage compared to all previous classification methods. The operators for deep-learning-based classification are The new procedure library deep_learning_classification.hdpl has been added to be used for the deep-learning-based classification. It includes the following procedures:
    • apply_dl_classifier_batchwise,
    • evaluate_dl_classifier,
    • gen_dl_classifier_heatmap,
    • get_dl_classifier_image_results,
    • plot_dl_classifier_training_progress,
    • preprocess_dl_classifier_images,
    • read_dl_classifier_data_set,
    • select_percentage_dl_classifier_data, and
    • split_dl_classifier_data_set.
    The following additional general purpose procedures have been added to support deep-learning-based classification applications:
    • augment_images and apply_brightness_variation_spot in the procedure library augment_images.hdpl and
    • procedures/general/gen_confusion_matrix.hdvp.
    The new HDevelop example programs classify_pill_defects_deep_learning.hdev and classify_fruit_deep_learning.hdev in the subdirectory hdevelop/Deep-Learning/Classification have been added to show the deep-learning-based classification. The examples use the new images in the subdirectories
    • food/apple_braeburn,
    • food/apple_golden_delicious,
    • food/apple_topaz,
    • food/peach,
    • food/pear,
    • pill/ginseng,
    • pill/magnesium, and
    • pill/mint.
    The images for these examples are available as download in a separate installer. Please, refer to the Installation Guide for more information.
    HALCON has been extended with two pretrained deep-learning-based classifiers, which can be found in the directory %HALCONROOT%/dl:
    • pretrained_dl_classifier_compact.hdl and
    • pretrained_dl_classifier_enhanced.hdl.
    The Solution Guide on Classification has been extended to describe how to use the new deep learning functionality.
    Please note that this functionality has special system requirements. Amongst others, third party libraries have to be installed manually. Please refer to the Installation Guide for more information.

  • For find_text, do_ocr_single_class_cnn, and do_ocr_multi_class_cnn the implementation of the CNN-based OCR classifier has been improved. Note that this change affects the compatibility. Read more.
Feature
  • HALCON has been extended with the operators height_width_ratio and height_width_ratio_xld, which compute the height, width, and aspect ratio of the enclosing axis-aligned rectangle of regions as well as XLD contours and polygons. Furthermore, region_features, select_shape, and select_shape_xld have been extended by the feature 'ratio'. The feature 'ratio' is now also available in HDevelop's Feature Inspection and Feature Histogram dialogs.
Graphics
  • The HALCON graphics stack, which is activated with
     set_window_param (WindowHandle, 'graphics_stack', 'true')
    
    has been extended to keep track of disp_object_model_3d and display_scene_3d calls, such that the result of these calls does not vanish after set_part or set_window_extents is called. This directly affects HSmartWindowControl and HSmartWindowControlWPF, which use HALCON's graphics stack.
Inspection
  • Inspecting specular reflecting surfaces imposes special challenges because the observer does not see the surface itself, but the mirror image of the environment. This poses significant problems for most surface inspection methods such as triangulation or shape from shading because these usually rely on a diffuse reflection of the surface.
    To compensate that, HALCON now provides functionality for deflectometry, which is a variant of the generic structured light method for specular surfaces. This method can be used for defect detection on surfaces of specular objects. The following operators have been added: The use of these operators is described in the chapter Inspection / Structured Light of the operator reference. Furthermore, the Solution Guide Basics has been extended with a chapter that describes how to use deflectometry.
    The new HDevelop example program
    • hdevelop/Inspection/Structured-Light/structured_light_tap_collar.hdev
    shows how to use several of the new operators. The example uses the new images in the subdirectory structured_light/tap_collar.
    The new HDevelop procedure
    • procedures/general/structured_light_camera_screen_sync.hdvp
    helps the user to check whether the image acquisition in a deflectometric setup is correctly synchronized. Its use is described in its documentation and in the Solution Guide Basics.


Miscellaneous
OCR
  • The Automatic Text Reader has been extended to detect and separate pairs or small groups of horizontally touching characters more reliably. The new text model parameter 'separate_touching_chars' can be used to control the separation of touching characters. If this parameter is set to 'enhanced', find_text detects touching regions with a new comprehensive method that uses the new helper file %HALCONROOT%/ocr/find_text_support.hotc. The new HDevelop example program hdevelop/OCR/Segmentation/find_text_separate_touching_chars.hdev demonstrates the usage of the new text model parameter. It uses the new images article_label_01, article_label_02, and article_label_03 from the subdirectory images/ocr/.
Segmentation
  • segment_image_mser has been improved such that it is now possible to set the minimal and maximal gray values that are considered in the segmentation process, which might reduce the runtime considerably. The HDevelop example program
    • hdevelop/Segmentation/MSER/segment_image_mser.hdev
    has been adapted to display how the minimal and maximal gray values can be set.
System
  • get_system has been extended by the parameter 'edition' that returns the HALCON Edition of the running HALCON library.
  • get_system has been extended with the parameters 'cuda_loaded', 'cuda_version', 'cuda_devices', 'cudnn_loaded', 'cudnn_version', 'cublas_loaded', and 'cublas_version' to query the versions of CUDA, cuDNN, and cuBLAS, which have to be installed when using the new deep learning functionalities. The HDevelop example program hdevelop/System/Parameters/query_system_parameter.hdev has been extended to include the queries of the versions of CUDA, cuDNN, and cuBLAS.
Timeout
XLD
  • HALCON has been extended with a new operator distance_cc_min_points, which is an improved version of distance_cc_min. In particular, the new operator does the same calculations as the older one, but additionally provides the points in the two contours used for the calculation. The new HDevelop example program hdevelop/Tools/Geometry/distance_cc_min_points.hdev demonstrates the new functionality.

Bug Fixes

3D
  • The operators might have returned wrong score values in rare cases or might have crashed in rare cases. For binocular_disparity_mg and binocular_distance_mg the problem only occurred when CalculateScore was set to 'true'. For reconstruct_surface_stereo the problem only occurred when 'disparity_method' was set to 'binocular_mg' using set_stereo_model_param. This problem has been fixed.
  • copy_object_model_3d did not return an error for incorrect values in the parameter Attributes. This problem has been fixed.
  • When calling create_surface_model with 'train_3d_edges' set to 'true' from multiple threads in parallel, some of the calls could have failed and incorrectly returned the error H_ERR_NOGL. This problem has been fixed.
  • read_object_model_3d threw an error when reading OBJ files that contained too many white space characters at certain positions. Additionally, polygons with more than 1000 vertices were truncated, and only the first 1000 vertices were returned. These problems have been fixed. The operator now reads OBJ files with arbitrary white space characters and no longer truncates polygons with more than 1000 vertices.
  • register_object_model_3d_pair might have crashed if an input model contained only primitives. This problem has been fixed.
  • When passing a 3D object model that contains only a primitive as second parameter to register_object_model_3d_pair, the 3D object model sometimes was handled incorrectly, leading to a deadlock when using it in a subsequent operator. This problem has been fixed.
  • set_sheet_of_light_param crashed when a calibration object of the wrong type, i.e., no DXF model, was passed. This problem has been fixed.
  • set_surface_model_param and get_surface_model_param did not always throw an error when passing a malformed parameter for the camera parameters or camera pose of a camera with index larger than zero. Instead, the camera index was silently set to zero. This problem has been fixed.
  • simplify_object_model_3d sometimes crashed if a triangle of the input object model was degenerated by containing the same point two or three times. This problem has been fixed.
Bar Code
  • In rare cases of print growth or overexposure, find_bar_code did not apply the "merged_scanlines" feature correctly. This problem has been fixed.
  • find_bar_code in very rare cases hung when merge_scanlines was true. This problem has been fixed.
  • get_bar_code_result threw an exception and then crashed for quality inspection in rare cases when the symbol region was outside the image. This problem has been fixed.
Calibration
Classification
Compute Device
  • HALCON may have crashed after destroying the tuple returned by get_compute_device_param with GenParamName='asynchronous_execution' or GenParamName='alloc_pinned'. This problem has been fixed.
Data Code
  • find_data_code_2d for ECC 200 codes in very rare cases did not find symbols when 'module_gap_min' was set to 'no' or 'small' and 'module_gap_max' was set to 'big', although the symbols could be found when 'module_gap' was set to 'big'. This problem has been fixed.
  • For find_data_code_2d the false positive check for small datacodes using the variable 'module_grid' did not work correctly. This problem has been fixed.
  • find_data_code_2d for ECC 200 codes in very rare cases did not find symbols when a timeout was set, although the same symbols could be found when no timeout was set. This problem has been fixed.
  • In rare cases, the image pixel data for ECC 200 data codes was taken from uninitialized memory. This problem has been fixed.
  • The Data Matrix ECC 200 reader could have accessed invalid memory when reading invalid content of symbols. This problem has been fixed.
  • The Aztec code reader could have crashed in very rare cases. This problem has been fixed.
  • get_data_code_2d_results could have returned too low grades for print quality inspection and detected damages in the quiet zone where no damages were. This problem has been fixed.
File
Filter
  • edges_image returned different results in subsequent calls when executed on OpenCL compute devices. This problem has been fixed.
  • edges_sub_pix and edges_color_sub_pix could have returned contours consisting of single points for the filter 'sobel_fast'. This problem has been fixed.
  • mean_sp read the parameters MaskWidth and MaskHeight in the wrong order. This problem has been fixed.
  • phase_correlation_fft sometimes returned an indefinite output. This problem has been fixed.
Graphics
  • create_drawing_object_xld could have caused invalid memory accesses when using halconxl.dll and HALCONARCH=x86sse2-win32.This problem has been fixed.
  • When interacting with XLD drawing objects created by create_drawing_object_xld, HALCON could have crashed. This problem has been fixed.
  • disp_caltab crashed in rare cases when the parameter ScaleFac was equal to 0. This problem has been fixed.
  • disp_polygon returned an error if empty tuples were passed. This problem has been fixed.
  • When calling disp_region with an image object, sometimes the image was displayed instead of the region. This problem has been fixed.
  • dump_window_image could have caused a deadlock, when it was used together with drawing objects. This problem has been fixed.
  • open_window and set_window_extents did not apply the background color correctly. This problem has been fixed.
  • Using open_window on certain window managers on Linux systems, in particular OpenBox and LXDE used in Raspbian for the Raspberry Pi, no images could be displayed within the opened windows. This problem has been fixed.
Image
  • The HALCON/CPP interface crashed when calling operators with output control parameters if an iconic input object parameter was not set (i.e., the input was a NULL-object). This problem has been fixed.
Matching
Miscellaneous
  • Getting the host IDs via get_system's 'hostids' parameter leaked memory. This problem has been fixed.
  • interpolate_scattered_data usually returned incorrectly interpolated values if the number of points that have been used to create the interpolator exceeded 500, or if the number of evaluated points exceeded 4500. This problem has been fixed. Now, the operator might be slower in some cases.
  • Using the macro HGetElemS defined in include/HMacro.h caused a compiler error reporting too many arguments in function 'HPGetPElemS'. This problem has been fixed.
  • The undocumented macro TestRegIma() has been removed from the header file HMacro.h.
OCR
  • clear_text_model sometimes crashed if the text model parameter 'ocr_classifier' has been set before with set_text_model_param and set_text_model_param returned an error. This problem has been fixed.
  • concat_ocr_trainf did not always close all opened file handles. This problem has been fixed.
  • find_text crashed when using an ocr classifier with only one class. This problem has been fixed. Now, the minimal number of classes required by find_text is one instead of two.
  • find_text in manual mode could have produced inconsistent results over multiple executions. This problem has been fixed.

  • find_text returned an error for multichannel images. This problem has been fixed. Now, instead of throwing an error the first image channel is used for text segmentation.
  • get_text_result returned wrong results for the parameters 'class', 'class_element', and 'class_line' when the text model that was used to create the results was cleared before the call of get_text_result. This problem has been fixed.
  • trainf_ocr_class_svm might have crashed for corrupted input files. This problem has been fixed.
Parallelization
  • The set_system parameter 'tsp_thread_num' set the number of AOP threads to a number that was one below when setting the maximum available threads. The problem occurred when 'tsp_thread_num' was set to a smaller number before. This problem has been fixed.
Region
  • partition_rectangle sometimes processed vertically discontiguous input regions incorrectly. This problem has been fixed.
System
  • When determining the maximum number of threads to use for automatic operator parallelization, HALCON did not properly take CPU affinity restrictions into account on Linux systems. This problem has been fixed. On Linux systems, HALCON now checks the scheduling policy of the thread initializing HALCON and only enables the use of spinlocks for the SCHED_OTHER policy. On Windows systems, the priority class of the process is checked and spinlocks are enabled for classes below the HIGH_PRIORITY_CLASS. This behavior can be overridden by calling the HSetUseSpinLock function with the desired value prior to calling the first HALCON operator.
  • try_lock_mutex returned a semantically inverted Busy flag when running in HDevelop under Windows. This problem has been fixed.
Tuple
XLD
  • get_contour_angle_xld with AngleMode='rel' could have returned wrong angle values for the first and the last point of a closed contour. This problem has been fixed.
  • segment_contours_xld could have crashed for input contours consisting of a single point. Note that this problem has already been fixed in HALCON 13.0.1.1.

Procedures

Functionality

  • To calculate the dimensions of a calibration object for a sheet-of-light-calibration, the new procedure get_sheet_of_light_calib_object_dimensions has been added.  A technical drawing within the reference manual entry of create_sheet_of_light_calib_object shows the dimensions of the calibration object.
  • The usability of the procedure list_image_files has been improved. Now, it is possible to use a tuple of multiple image directories as input.
  • The usability of the procedures plot_tuple and plot_funct_1d has been improved. It is now possible to visualize plots using the 'step'-style. Additionally, the format of the values displayed next to the axis can be adapted, using the new parameters 'format_x' and 'format_y'.
    The parameters 'origin_x' and 'origin_y' have been renamed to 'axis_location_y' and 'axis_location_x', respectively. Additionally, it is now possible to pass convenience strings for 'axis_location_y' and 'axis_location_x': 'left', 'right', 'origin', 'bottom', 'top', and 'origin'.
  • The HDevelop procedure set_display_font now supports Liberation Fonts.
  • HALCON has been extended with the procedure remove_dir_recursively to remove a directory recursively.

HALCON/C++

Bug Fixes

  • In HALCON/CPP and HALCON/.NET, the member function GetGrayval of the HImage class returned only the gray value of the first image channel when using the signature variant with native input types for the coordinates. This problem has been fixed. To solve the problem, the type of the return value for this member function has been changed to HTuple. For HALCON/C, the operator variant with the tuple signature is the only available anymore. Note that this change affects the compatibility. Read more.

HALCON/.NET

Bug Fixes

  • In HALCON/CPP and HALCON/.NET, the member function GetGrayval of the HImage class returned only the gray value of the first image channel when using the signature variant with native input types for the coordinates. This problem has been fixed. To solve the problem, the type of the return value for this member function has been changed to HTuple. For HALCON/C, the operator variant with the tuple signature is the only available anymore. Note that this change affects the compatibility. Read more.
  • Operators in HALCON/.NET that took an array of tool classes as input parameters (such as HObjectModel3D[] or HShapeModel[]) exhibited a resource leak. This problem has been fixed. Note that HTuple-based signatures via HOperatorSet or types that represent tuple data such as HPose[] were not affected.
  • Changing the window size resizes also a displayed image. However, when the HKeepAspectRatio option of the HSmartWindowControl was enabled, the image was not displayed with the correct ratio. This problem has been fixed.
  • There were several problems with HSmartWindowControlWPF and/or HWindowControlWPF:
    • The returned value of HalconDotNet.HMouseEventArgsWPF.Button in HMouseMove event in HSmartWindowControlWPF and HWindowControlWPF was always Left. This problem has been fixed. Now, the pressed button is returned. Notice that in case of multiple buttons pressed, only one value can be returned. If no button is pressed, null is returned.
    • The returned value of HalconDotNet.HMouseEventArgsWPF.Delta in HMouseWheel event in HSmartWindowControlWPF was always 0.
    • In HWindowControlWPF, the Middle, XButton1 and XButton2 buttons change state was not detected in HMouseUp and HMouseDown.
    These problems have been fixed. Additionally, the summary information of the mouse events in HSmartWindowControlWPF, HSmartWindowControl, HWindowControlWPF and HWindowControl has been improved.
     
    Note that this change affects the compatibility. Read more.
  • Accessing multiple elements of HTuple at once by indexing with another HTuple (t1[t2]) was inefficient in HALCON/.NET. This problem has been fixed. For pure integral indexing tuples the performance has been improved.
  • In Microsoft Visual Studio 2013 Express, trying to view a Form containing a HSmartWindowControl in the Designer led to an error stating that an attempt was made to load a program with an incorrect format. This problem has been fixed.
  • If the HSmartWindowControl was set to an arbitrary position inside the father window, the zooming of iconic data returned with wrong results, because the offset between the upper left corner of the father window and the HSmartWindowControl was not considered. This problem has been fixed.
  • In some cases, binding the ActualHeight or ActualWidth properties of the HSmartWindowControlWPF could have led to a null pointer exception. This problem has been fixed.
  • Calling an operator with a null input parameter caused a memory leak in HALCON/.NET. This problem has been fixed.

Language Interface Example Programs

Functionality

  • The exported armv7a C and C++ examples have been updated.

Bug Fixes

HALCON Variable Inspect extension for Visual Studio

Bug Fixes

  • The HALCON Variable Inspect extension for Visual Studio displayed a crash message when it was started without a valid license. This problem has been fixed.
  • The HALCON Variable Inspect extension for Visual Studio did not support the inspection of images of type 'cyclic'. This problem has been fixed.
  • Microsoft Visual Studio creates temporary variables for return values of method calls. The HALCON Variable Inspect extension for Visual Studio displayed these values. But it was not possible to inspect them and they were not deleted from the list until the scope has changed, even if Visual Studio no longer displayed them. This problem has been fixed. Now, these return value variables are no longer displayed in the locals view.
  • During a drag and drop operation to the watch window of the HALCON Variable Inspect extension for Visual Studio, the dropped text was moved instead of copied. This problem has been fixed.

Image Acquisition Interfaces

HALCON 17.12 Progress includes only standard 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.

New, Modified, or Removed Image Acquisition Interfaces

  • HALCON has been extended with a new image acquisition interface for GigE Vision devices complying with GigE Vision 1.x or GigE Vision 2.x. It supports the operating systems Windows, Linux, and macOS.

Miscellaneous

Image Acquisition Example Programs

Modified Image Acquisition Example Programs
  • The HALCON/C++ example ia_callback and the HALCON/.NET example IACallback have been refactored to improve their usability. Now, GenICam Module Events and Event Data are supported, the Image Acquisition Interface is selected interactively, and the error handling has been improved.
New Image Acquisition Example Programs

The following HDevelop example programs have been added:

  • hdevelop/Image/Acquisition/genicamtl_smartray_ecco_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/gigevision2.hdev
  • hdevelop/Image/Acquisition/gigevision2_2cameras.hdev
  • hdevelop/Image/Acquisition/gigevision2_atc4_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/gigevision2_crop.hdev
  • hdevelop/Image/Acquisition/gigevision2_do_abort_grab.hdev
  • hdevelop/Image/Acquisition/gigevision2_flir_ax5.hdev
  • hdevelop/Image/Acquisition/gigevision2_forceip.hdev
  • hdevelop/Image/Acquisition/gigevision2_frame_rate.hdev
  • hdevelop/Image/Acquisition/gigevision2_information.hdev
  • hdevelop/Image/Acquisition/gigevision2_interpacket_delay.hdev
  • hdevelop/Image/Acquisition/gigevision2_ip_address_handling.hdev
  • hdevelop/Image/Acquisition/gigevision2_link_aggregation.hdev
  • hdevelop/Image/Acquisition/gigevision2_multiframe.hdev
  • hdevelop/Image/Acquisition/gigevision2_parameters.hdev
  • hdevelop/Image/Acquisition/gigevision2_photonfocus3d_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/gigevision2_simple.hdev
  • hdevelop/Image/Acquisition/gigevision2_software_trigger.hdev
  • hdevelop/Image/Acquisition/gigevision2_wenglor_wecat3d_objectmodel3d.hdev
Removed Image Acquisition Example Programs

The following HDevelop example programs have been removed:

  • hdevelop/Image/Acquisition/abs.hdev
  • hdevelop/Image/Acquisition/abs_crop.hdev
  • hdevelop/Image/Acquisition/abs_multiple_cameras.hdev
  • hdevelop/Image/Acquisition/abs_parameters.hdev
  • hdevelop/Image/Acquisition/abs_simple.hdev
  • hdevelop/Image/Acquisition/adlink.hdev
  • hdevelop/Image/Acquisition/adlink_parameters.hdev
  • hdevelop/Image/Acquisition/adlink_simple.hdev
  • hdevelop/Image/Acquisition/andor.hdev
  • hdevelop/Image/Acquisition/andor_parameters.hdev
  • hdevelop/Image/Acquisition/andor_simple.hdev
  • hdevelop/Image/Acquisition/bitflow.hdev
  • hdevelop/Image/Acquisition/bitflow_2boards.hdev
  • hdevelop/Image/Acquisition/bitflow_2ports.hdev
  • hdevelop/Image/Acquisition/bitflow_change_size.hdev
  • hdevelop/Image/Acquisition/bitflow_cl_serial_usage.hdev
  • hdevelop/Image/Acquisition/bitflow_cont.hdev
  • hdevelop/Image/Acquisition/bitflow_cont_async_oneshot.hdev
  • hdevelop/Image/Acquisition/bitflow_cxp_register_poke_peek.hdev
  • hdevelop/Image/Acquisition/bitflow_lut.hdev
  • hdevelop/Image/Acquisition/bitflow_open_by_switch_connector.hdev
  • hdevelop/Image/Acquisition/bitflow_register_poke_peek.hdev
  • hdevelop/Image/Acquisition/bitflow_simple.hdev
  • hdevelop/Image/Acquisition/bitflow_simple_sw_trigger.hdev
  • hdevelop/Image/Acquisition/bitflow_version.hdev
  • hdevelop/Image/Acquisition/crevis.hdev
  • hdevelop/Image/Acquisition/crevis_binning.hdev
  • hdevelop/Image/Acquisition/crevis_parameters.hdev
  • hdevelop/Image/Acquisition/crevis_simple.hdev
  • hdevelop/Image/Acquisition/crevis_trigger.hdev
  • hdevelop/Image/Acquisition/dahengcam.hdev
  • hdevelop/Image/Acquisition/dahengcam_2cameras.hdev
  • hdevelop/Image/Acquisition/dahengcam_parameters.hdev
  • hdevelop/Image/Acquisition/dahengcam_simple.hdev
  • hdevelop/Image/Acquisition/ensenso-nxlib_2cameras.hdev
  • hdevelop/Image/Acquisition/ensenso-nxlib_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/ensenso-nxlib_parameters.hdev
  • hdevelop/Image/Acquisition/ensenso-nxlib_simple.hdev
  • hdevelop/Image/Acquisition/ensenso-nxlib_surface_based_3d_matching.hdev
  • hdevelop/Image/Acquisition/ensenso-nxlib_workspace_calibration.hdev
  • hdevelop/Image/Acquisition/gigevision.hdev
  • hdevelop/Image/Acquisition/gigevision_2cameras.hdev
  • hdevelop/Image/Acquisition/gigevision_atc4_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/gigevision_crop.hdev
  • hdevelop/Image/Acquisition/gigevision_do_abort_grab.hdev
  • hdevelop/Image/Acquisition/gigevision_flir_ax5.hdev
  • hdevelop/Image/Acquisition/gigevision_forceip.hdev
  • hdevelop/Image/Acquisition/gigevision_frame_rate.hdev
  • hdevelop/Image/Acquisition/gigevision_interpacket_delay.hdev
  • hdevelop/Image/Acquisition/gigevision_ip_address_handling.hdev
  • hdevelop/Image/Acquisition/gigevision_link_aggregation.hdev
  • hdevelop/Image/Acquisition/gigevision_multiframe.hdev
  • hdevelop/Image/Acquisition/gigevision_parameters.hdev
  • hdevelop/Image/Acquisition/gigevision_photonfocus3d_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/gigevision_simple.hdev
  • hdevelop/Image/Acquisition/gigevision_software_trigger.hdev
  • hdevelop/Image/Acquisition/gigevision_wenglor_wecat3d_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/ginga++.hdev
  • hdevelop/Image/Acquisition/ginga++_2cameras.hdev
  • hdevelop/Image/Acquisition/ginga++_capture_freq.hdev
  • hdevelop/Image/Acquisition/ginga++_continuous.hdev
  • hdevelop/Image/Acquisition/ginga++_crop.hdev
  • hdevelop/Image/Acquisition/ginga++_external_drive.hdev
  • hdevelop/Image/Acquisition/ginga++_frame_exposure.hdev
  • hdevelop/Image/Acquisition/ginga++_parameters.hdev
  • hdevelop/Image/Acquisition/ginga++_sequence.hdev
  • hdevelop/Image/Acquisition/ginga++_simple.hdev
  • hdevelop/Image/Acquisition/ginga++_trigger.hdev
  • hdevelop/Image/Acquisition/ginga++_walking.hdev
  • hdevelop/Image/Acquisition/gingadg_continuous_grabbing.hdev
  • hdevelop/Image/Acquisition/gingadg_multi_woi_grabbing.hdev
  • hdevelop/Image/Acquisition/gingadg_sequence_grabbing.hdev
  • hdevelop/Image/Acquisition/helicamc3_2cameras.hdev
  • hdevelop/Image/Acquisition/helicamc3_bidirectional.hdev
  • hdevelop/Image/Acquisition/helicamc3_modes.hdev
  • hdevelop/Image/Acquisition/helicamc3_motor_control.hdev
  • hdevelop/Image/Acquisition/helicamc3_simple.hdev
  • hdevelop/Image/Acquisition/linx.hdev
  • hdevelop/Image/Acquisition/linx_2boards.hdev
  • hdevelop/Image/Acquisition/linx_2ports.hdev
  • hdevelop/Image/Acquisition/linx_cont.hdev
  • hdevelop/Image/Acquisition/linx_simple.hdev
  • hdevelop/Image/Acquisition/lps36_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/lps36_parameters.hdev
  • hdevelop/Image/Acquisition/lps36_simple.hdev
  • hdevelop/Image/Acquisition/lucam_2cameras.hdev
  • hdevelop/Image/Acquisition/lucam_crop.hdev
  • hdevelop/Image/Acquisition/lucam_parameters.hdev
  • hdevelop/Image/Acquisition/lucam_simple.hdev
  • hdevelop/Image/Acquisition/matrixvisionacquire.hdev
  • hdevelop/Image/Acquisition/matrixvisionacquire_crop.hdev
  • hdevelop/Image/Acquisition/matrixvisionacquire_multiple_instances.hdev
  • hdevelop/Image/Acquisition/matrixvisionacquire_parameters.hdev
  • hdevelop/Image/Acquisition/matrixvisionacquire_properties.hdev
  • hdevelop/Image/Acquisition/matrixvisionacquire_simple.hdev
  • hdevelop/Image/Acquisition/millite.hdev
  • hdevelop/Image/Acquisition/millite_parameters.hdev
  • hdevelop/Image/Acquisition/millite_simple.hdev
  • hdevelop/Image/Acquisition/millite_trigger.hdev
  • hdevelop/Image/Acquisition/multicam.hdev
  • hdevelop/Image/Acquisition/multicam_2cameras.hdev
  • hdevelop/Image/Acquisition/multicam_parameters.hdev
  • hdevelop/Image/Acquisition/multicam_picolo.hdev
  • hdevelop/Image/Acquisition/multicam_quickpack.hdev
  • hdevelop/Image/Acquisition/multicam_simple.hdev
  • hdevelop/Image/Acquisition/multicam_split_cable.hdev
  • hdevelop/Image/Acquisition/multicam_stereo.hdev
  • hdevelop/Image/Acquisition/o3d3xx_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/o3d3xx_parameters.hdev
  • hdevelop/Image/Acquisition/o3d3xx_simple.hdev
  • hdevelop/Image/Acquisition/o3d3xx_temporary_parameters.hdev
  • hdevelop/Image/Acquisition/o3d3xx_valid_data.hdev
  • hdevelop/Image/Acquisition/opteon.hdev
  • hdevelop/Image/Acquisition/opteon_crop.hdev
  • hdevelop/Image/Acquisition/opteon_parameters.hdev
  • hdevelop/Image/Acquisition/opteon_simple.hdev
  • hdevelop/Image/Acquisition/opteon_trigger.hdev
  • hdevelop/Image/Acquisition/pixelink.hdev
  • hdevelop/Image/Acquisition/pixelink_2cameras.hdev
  • hdevelop/Image/Acquisition/pixelink_parameters.hdev
  • hdevelop/Image/Acquisition/pixelink_simple.hdev
  • hdevelop/Image/Acquisition/pylon.hdev
  • hdevelop/Image/Acquisition/pylon_2cameras.hdev
  • hdevelop/Image/Acquisition/pylon_crop.hdev
  • hdevelop/Image/Acquisition/pylon_parameters.hdev
  • hdevelop/Image/Acquisition/pylon_simple.hdev
  • hdevelop/Image/Acquisition/saperalt.hdev
  • hdevelop/Image/Acquisition/saperalt_2boards.hdev
  • hdevelop/Image/Acquisition/saperalt_2cameras.hdev
  • hdevelop/Image/Acquisition/saperalt_crop.hdev
  • hdevelop/Image/Acquisition/saperalt_gio.hdev
  • hdevelop/Image/Acquisition/saperalt_lut.hdev
  • hdevelop/Image/Acquisition/saperalt_parameters.hdev
  • hdevelop/Image/Acquisition/saperalt_simple.hdev
  • hdevelop/Image/Acquisition/sentech.hdev
  • hdevelop/Image/Acquisition/sentech_2cameras.hdev
  • hdevelop/Image/Acquisition/sentech_parameters.hdev
  • hdevelop/Image/Acquisition/sentech_simple.hdev
  • hdevelop/Image/Acquisition/sentech_trigger.hdev
  • hdevelop/Image/Acquisition/shapedrive_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/shapedrive_parameters.hdev
  • hdevelop/Image/Acquisition/shapedrive_simple.hdev
  • hdevelop/Image/Acquisition/sick-3dcamera.hdev
  • hdevelop/Image/Acquisition/sick-3dcamera_buffer_queue.hdev
  • hdevelop/Image/Acquisition/sick-3dcamera_calibration.hdev
  • hdevelop/Image/Acquisition/sick-3dcamera_components.hdev
  • hdevelop/Image/Acquisition/sick-3dcamera_grabbing_modes.hdev
  • hdevelop/Image/Acquisition/sick-3dcamera_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/sick-3dcamera_parameters.hdev
  • hdevelop/Image/Acquisition/sick-3dcamera_simple.hdev
  • hdevelop/Image/Acquisition/sick-scanningruler_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/sick-scanningruler_parameters.hdev
  • hdevelop/Image/Acquisition/sick-scanningruler_simple.hdev
  • hdevelop/Image/Acquisition/siliconsoftware.hdev
  • hdevelop/Image/Acquisition/siliconsoftware_continuous.hdev
  • hdevelop/Image/Acquisition/siliconsoftware_fieldparameter.hdev
  • hdevelop/Image/Acquisition/siliconsoftware_gige_vision.hdev
  • hdevelop/Image/Acquisition/siliconsoftware_multiroi.hdev
  • hdevelop/Image/Acquisition/siliconsoftware_objectmodel3d.hdev
  • hdevelop/Image/Acquisition/siliconsoftware_parameters.hdev
  • hdevelop/Image/Acquisition/siliconsoftware_simple.hdev
  • hdevelop/Image/Acquisition/siliconsoftware_smartapplets.hdev
  • hdevelop/Image/Acquisition/slink_parameters.hdev
  • hdevelop/Image/Acquisition/slink_simple.hdev
  • hdevelop/Image/Acquisition/ueye.hdev
  • hdevelop/Image/Acquisition/ueye_2cameras.hdev
  • hdevelop/Image/Acquisition/ueye_crop.hdev
  • hdevelop/Image/Acquisition/ueye_memory_mode.hdev
  • hdevelop/Image/Acquisition/ueye_parameters.hdev
  • hdevelop/Image/Acquisition/ueye_persistent_memory.hdev
  • hdevelop/Image/Acquisition/ueye_sequencer_mode.hdev
  • hdevelop/Image/Acquisition/ueye_simple.hdev
  • hdevelop/Image/Acquisition/ueye_timestamp.hdev
  • hdevelop/Image/Acquisition/ueye_trigger.hdev
  • hdevelop/Image/Acquisition/ueye_vertical_roi_merge_mode.hdev
  • hdevelop/Image/Acquisition/vrmusbcam.hdev
  • hdevelop/Image/Acquisition/vrmusbcam_2cameras.hdev
  • hdevelop/Image/Acquisition/vrmusbcam_crop.hdev
  • hdevelop/Image/Acquisition/vrmusbcam_parameters.hdev
  • hdevelop/Image/Acquisition/vrmusbcam_simple.hdev
  • hdevelop/Image/Acquisition/vrmusbcam_trigger.hdev

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.

Miscellaneous

  • HALCON has been extended by the new error code H_ERR_COMPONENT_NOT_INSTALLED, which is returned by the operators open_framegrabber, info_framegrabber, open_io_device, and query_io_interface if an image acquisition or digital I/O interface can not be loaded because it was not installed. Note that this change affects the compatibility. Read more.
  • The hioTemplate operator get_io_channel_param started with the index 1 to initialize the 'param_name' values. This problem has been fixed.

Documentation

Miscellaneous

  • Within include/hlib/HObjectModel3D.h, HOM3DAddPoints, HOM3DAddPointsAndMapping, HOM3DGetPoints, HOM3DAddPointsFromImagesRegion, and HOM3DAddPointsFromImagesInvalid did not document that values of point coordinates are treated as 'mm'. This problem has been fixed.
  • The usability of the document third_party_copyrights.html has been improved. Now, for every third party library, the components of HALCON that use it are mentioned.
  • All HALCON PDF manuals have been adapted to uniformly match the paper format DIN A4.

Programmer's Manuals

  • The Programmer's Guide has been improved to describe the default behavior of the implementation class 'HDevOpMultiWindowImpl'.
  • The Programmer's Guide has been improved such that the sections for 'Error Handling' provide links to the list of HALCON error codes.
  • The Programmer's Guide has been improved. It now describes how to fit a new image (or other content) to the size of the window control in the source code.
  • The Programmer's Guide did not mention that collecting database information is not thread-safe when exchanging iconic objects between threads. This problem has been fixed.
  • The Programmer's Guide has been extended by the information that the HDevEngine method LoadProgram changes the working directory if a program is loaded.

Reference Manual

  • The reference manual entries of the following operators contained imprecise restrictions for the parameter Sigma: These problems have been fixed.
  • The warning section of the reference manual entry of clear_all_matrices did not mention that the operator is obsolete, and the attention section of the reference manual entry of clear_all_calib_data was missing. These problems have been fixed.
  • The reference manual entries for have been extended to also describe possible behavior at the border of the image or a reduced domain.
  • The reference manual entries of create_caltab and gen_caltab have been improved. They now explain how to calculate the size of the generated calibration plate.
  • The German reference manual entry of create_planar_calib_deformable_model contained a wrong parameter description of ScaleCMin. This problem has been fixed.
  • The reference manual entry of create_planar_uncalib_deformable_model_xld incorrectly described that the parameters ScaleCMin and ScaleRMin are not used by the operator. This problem has been fixed.
  • The reference manual entry of create_sheet_of_light_calib_object has been improved to mention that, if the parameters HeightMin and HeightMax were chosen such that the height difference between the truncated pyramid and the ramp was too small, calibrate_sheet_of_light might not have found the calibration object.
  • The reference manual entries of edges_image and edges_color did not contain the information that the hysteresis threshold operation is not applied if NMS is set to 'none'. This problem has been fixed.
  • The reference manual entry of enqueue_message mentioned a deep copy behavior which was mistakable. This problem has been fixed.
  • The overview pages of the reference manuals for image acquisition and I/O interfaces now include a separate section for systems based on Linux for Armv7-A.
  • The reference manual entry of set_hsi contained a wrong formula. This problem has been fixed.
  • The description of the set_system parameter 'filename_encoding' was outdated and lacked details. This problem has been fixed.
  • In the reference manual entries of update_window_pose and set_camera_setup_cam_param, the multi-threading scope was set to local instead of global. This problem has been fixed.
  • Within the reference manual entry of write_ocr_class_knn, the default file extension was documented incorrectly as  '.onc' instead of '.okc'. This problem has been fixed.
  • Within the reference manual, the introduction of the chapter Filters / Smoothing has been extended with information regarding the differences between the different smoothing filter operations.
  • Within the reference manual, the introduction of the chapter 3D Reconstruction / Multi-View Stereo has been extended with general information related to the workflow when reconstructing 3D surfaces and points.
  • Within the reference manual, the introduction of the chapter Region / Morphology has been extended with more detailed descriptions regarding region morphology operations.

Solution Guides

  • The Solution Guide Basics has been improved to mention also the texture inspection model in the chapter 'Texture Analysis'.
  • The Solution Guide on 3D Vision has been improved. In particular, the recommendations for acquiring calibration images have been revised.
  • The Solution Guide Basics has been improved to describe multi-threading issues for compute devices more clearly.

User Guides

  • The Solution Guide on 3D Vision has been extended with a section about camera calibration using a single image.
    The new HDevelop example program
    • solution_guide/3d_vision/camera_calibration_single_image.hdev
    shows a measurement after a single image calibration and explains the systematic error that occurs when measuring outside the calibrated plane.
  • In the HDevelop OCR assistant, when training an OCR Classifier, the training might have taken a very long time if the number of trained characters was very high. The reason for this might have been the Hidden Units parameter, where the auto mode produces a too large value for a large number of characters. The description of this parameter has been adapted accordingly in the HDevelop Users Guide.
  • The Installation Guide did not accurately describe how many instances of HALCON can be used in parallel. This problem has been fixed.
  • The section Limitations of the User's Guide for HALCON for ARM-based Platforms did not mention that OpenCL is currently not supported. This problem has been fixed.
  • The in-line operator notation table within the HDevelop User's Guide has been extended.
  • The list of color names in appendix B of the HDevelop User's Guide was incomplete. This problem has been fixed. In addition, the numbering of appendices in the HTML version of the manuals now matches the PDF version.
  • The Programmer's Guide has been extended with the information that when working with the HALCON Variable Inspect extension for Visual Studio using an older installation of Visual Studio 2013, it might be necessary to install the .NET 4.6 framework.

Supported Operating Systems

Windows

HALCON 17.12 Progress has been compiled for the following Windows platform versions:

  • x86sse2-win32 platform version for Windows 7/8/8.1/10 or Windows Server 2008 R2/2012/2012 R2/2016 on x86 processors with SSE2 extension, i.e., Intel Pentium 4 / AMD Athlon 64 or higher
  • x64-win64 platform version for Windows 7/8/8.1/10 or Windows Server 2008 R2/2012/2012 R2/2016 x64 Edition on Intel 64 or AMD64 processors

The setup process checks whether it is running on a 32- or 64-bit system and provides a suitable list of platform versions that can be installed.

During the installation, the environment variable HALCONARCH is set to x86sse2-win32 or x64-win64 to indicate the installed platform version. Please note that if you want to switch to another platform version, you must first install it. Then, you must adapt the environment variable HALCONARCH (see the Installation Guide for more information).

Linux

HALCON 17.12 Progress has been compiled for the following Linux platform versions:

  • x64-linux platform version for Linux x86_64, Kernel 3.6 or higher, libc.so.6 (GLIBC_2.17 or higher), libstdc++.so.6 (GLIBCXX_3.4.15 or higher), on Intel 64 or AMD64 processors
  • arm7a-linux platform version for Linux armv7a, Kernel with hidraw support, hard-float ABI, glibc 2.17 or higher, libstdc++.so 6.0.18

Please refer to the Installation Guide for detailed system requirements corresponding to the different Application Binary Interfaces.

macOS

HALCON 17.12 Progress has been compiled for macOS in the following platform versions:

  • x64-macosx platform version for macOS 10.12/10.13 on Intel 64.

Miscellaneous

Installation

  • With HALCON 17.12 Progress, the HALCON/COM interface is being discontinued, and thus, the following files have been removed from the Windows installation:
    • bin\x64-win64\halconx.dll
    • bin\x64-win64\halconxxl.dll
    • bin\x64-win64\hdevenginex.dll
    • bin\x64-win64\hdevenginexxl.dll
    • bin\x86sse2-win32\halconx.dll
    • bin\x86sse2-win32\halconxxl.dll
    • bin\x86sse2-win32\hdevenginex.dll
    • bin\x86sse2-win32\hdevenginexxl.dll
    • lib\x64-win64\halconx.lib
    • lib\x64-win64\halconxxl.lib
    • lib\x64-win64\hdevenginex.lib
    • lib\x64-win64\hdevenginexxl.lib
    • lib\x86sse2-win32\halconx.lib
    • lib\x86sse2-win32\halconxxl.lib
    • lib\x86sse2-win32\hdevenginex.lib
    • lib\x86sse2-win32\hdevenginexxl.lib
    Furthermore, the examples
    • examples\cpp\mfc\MatchingCOM and
    • examples\delphi\Matching
    have been removed from the installation and support for building HALCON/COM extension package examples has been removed.

  • The usability of the HALCON Windows installer has been improved. Now, the examples are always installed to the user documents folder path.
  • Linux armv7a libraries got installed by mistake during compact and runtime installation. This problem has been fixed.
  • The images used by the HDevelop example programs for deep learning require a lot of memory space. Therefore, they are provided in a separate installer that can be downloaded from the MVTec HALCON download area.
  • The usability of starting HDevelop for different HALCON versions and platform versions has been improved for Windows. In previous HALCON versions, the environment variable %HALCONROOT% and/or %HALCONARCH% had to be adapted accordingly. Now, the Windows batch files
    • start_hdevelop_x64.bat
    • start_hdevelopxl_x64.bat
    • start_hdevelop_x86sse2.bat
    • start_hdevelopxl_x86sse2.bat
    are installed to the HALCON root directory. A double-click on one of these batch files starts the respective HDevelop (platform) version. Furthermore, HDevelop program files can be dragged on the batch files to open them with the respective HDevelop (platform) version.
  • Proprietary image acquisition and digital I/O interfaces are no longer part of the standard HALCON installation. These interfaces can be obtained online on the MVTec image acquisition interfaces page. The reference manual has been adapted accordingly and the Solution Guides have been revised so that code examples no longer use any proprietary image acquisition or digital I/O interfaces.
  • The IO integration example and the corresponding documentation were not installed during installations on Linux. This problem has been fixed.

Licensing

  • Licensing has been updated to support the new HALCON Progress Edition. HALCON Progress is licensed in a subscription model. Therefore, the developlment license is always time limited. HALCON Progress licenses are also valid for future versions of HALCON Progress, which will be released during an active subscription term.
    Note that this change affects the compatibility. Read more.
  • The new license modules "Deep Learning Training" and "Deep Learning Inference" have been introduced for licensing the training and inference operators of the deep learning functionality.
  • The Installation Guide has been extended by an explanation to check for a genuine halcon.dll. If you encounter an unexpected behavior of HALCON, please make sure to use a genuine halcon.dll.
  • When using dongle licenses and starting HALCON processes simultaneously, some processes might have exited with an license error on macOS platforms. This problem has been fixed.
  • HALCON was unable to verify the signature of license files containing unknown modules, flags or platforms, which made the licenses non-forward compatible. This problem has been fixed.