Changelog for 26.10.0

Specification Changes

  • Adds Debian 13 and Ubuntu 26.04 to the list of tested Linux distributions. Also replaces RHEL 10 by Rocky Linux 10.

  • Adds Jetpack 7 to the list of tested aarch64 platforms and cites exact Jetson machines that were tested.

  • Now clearly specifies aarch64 platforms where EasyDeepLearning is supported. (Jetson Orin series only.)

  • Now specifies libstdc++6 exact version dependency instead of gcc version for Linux system dependencies.

  • Upgrades minimal system requirements for Linux to glibc version 2.31.

  • Now clearly specifies recommended compiler/environment versions. Those are distinct from minimal requirements from compilers. Those recommended versions are: MSVC 2022, g++ 11, .NET 6.0 and Python 3.12.

  • Now clearly specifies that the .NET version of eVision is Windows-only. (It was always the case as we never provided Linux .NET bindings but was not indicated in the specifications.)

eVision Studio

  • New features

    • At the top of the Tool Catalog, a new keywords menu now appears below the search field in order to propose keywords to help filling it.

    • At the top of the Sample Catalog, a new keywords menu now appears below the search field in order to propose keywords to help filling it.

    • The eVision documentation is now accessible in a dockable window.

    • New samples:

      • Reading of Gs1 Databar Stacked barcodes

      • EasyOCR2 reading with a deep learning classifier.

      • EasyOCR2 reading using a character database.

      • Reading digits across a point gauge

    • Region Morphology tool: added a new EFrame input

    • Region Transform tool: added a new EFrame input

    • EasyLocate tool: added a new EFrame input and a new ERegion input (mask)

      • Output can be Array of ELocatorPredictedObject as well

    • EasySupervisedSegment tool: added a new EFrame input and a new ERegion input (mask)

      • Output can now be Array of ESupervisedSegmenterBlob or EObjectSelection as well

    • Convolution tool: can now take an EKernel as input to perform an EasyImage::ConvolKernel.

    • ToRegion tool:

      • can now take ESupervisedSegmenterBlob and ELocatorPredictedObject as input

      • can now take EOCR2Text as input

      • can now take ECircle, EPolygon, ERectangle and EWedge as input

    • ToFrame tool:

      • can now take ELocatorPredictedObject as input

      • can now take EOCR2Text as input

    • New tool added:

      • EasyOCR2 reader.

      • Region To ROI tool that that takes an ERegion and an optional padding to construct a ROI from the bounding box of the input ERegion.

      • Create frames on shape.

      • Kernel convolution tool to define a custom convolution kernel.

      • Stream source tool that connects to an RTSP stream (via a locally installed GStreamer) and exposes the latest decoded frame as an image output.

    • Checker tool: now has a Draw Blobs checkbox to choose whether to draw found blobs

    • Region Combiner tool: can now take an Array of ERegion as input and combines all its regions together

    • ToArray and FromArray tools: now support ELine, ECircle, ERectangle, EPolygon, EWedge and EGrid items and arrays, and draw the selected item on their displays.

  • Changes

    • eVision Studio is now Allied Vision-branded software. Its style was updated to use Allied Vision colors and logo.

    • The project file extension has been changed from .oes to .evs. Existing .oes projects can still be loaded.

    • The C++ generated code was updated to only include the necessary headers.

    • Handling of image and zoom was optimized to make the application smoother.

    • The slider that occasionally appears at the right of a SpinBox (number field) is now located below it.

    • Draw 2D tool: It is now possible to set the alpha value for the pen color.

    • Region Editor tool: region primitives are now created on the current view rather than in the middle of the image.

    • Region editor, Region to image, Frame, Point and Shape (Circle, Line, Polygon, Rectangle, Wedge) tools: the surface/image size setting now enforces a common guideline (minimum 1x1, maximum 64000x64000, default 1920x1080 pixels).

    • Bearing Inspection sample: the sample now inspects the 16 rolling elements using the new CreateFramesOnShape tool.

    • The ColorPickerButton now have a checkerboard background. This makes the alpha value of the color visible.

    • The Draw2D tool now disables the Brush when setting it has no influence on the drawing. It was also removed from generated code in these cases.

    • Draw 2D tool: It is no longer possible to change the style and the width of the pen when the input is an ERegion. This previously did nothing since the ERegion::Draw and ERegion::DrawContour method only take a color as argument.

    • EPoint::Draw is now used instead of EPoint::DrawHandle in the Draw2D, Point and ObjectTemplateMatcher tools.

  • Solved issues

    • eVision Studio would crash when a Draw2D tool with the “Features” checkbox checked was connected to the output of a Matcher tool. This has been corrected.

    • A crash could occur on Windows when loading a project with 50+ links in the graph. This has been fixed.

    • The generated code for the Threshold tool when using a relative threshold and a EImageBW16 was wrong. This has been fixed.

    • The Wedge Tool generated a wrong code for the breadth value in the constructor, this has been fixed.

    • eVision Studio would crash when the ERegion output of an Image To Region tool was connected to another tool. This has been fixed.

    • Frame, Point and Shape (Circle, Line, Polygon, Rectangle, Wedge) tools: pressing Reset did not restore the surface size to its default value. This has been fixed.

    • The Line tool could not be duplicated properly. This has been corrected.

    • The selected code/index parameter was not properly copied when the BarCodeReader, MailBarCodeReader, PatternFinder, Matcher, QRCodeReader and MatrixCodeReader tools were duplicated. This has been corrected.

    • The learned region parameter was not properly copied when the PatternFinder and Matcher tools were duplicated. This has been corrected.

    • In the Object Template Matcher and Transform tool, a display widget could take all the space and compress the other. This has been fixed.

    • In the Object Template Matcher tool, modifying the pan and zoom in the view widget updated the state of the setup widget. This has been fixed.

    • Updating the parameters of the 3D Laser Line Object Calibration tool would not always update the 3D calibration model. This has been fixed.

    • eVision Studio would crash when not enough memory was available to allocate the new image in the resize tool. This has been fixed.

    • The python generated code for the QRCode Reader tool was missing a line break. This has been fixed.

    • The python generated code for the EChecker tool was incorrect. This has been fixed.

    • The python generated code for the Region To Image tool was incorrect. This has been fixed.

    • The C# generated code for the BarCode Reader tool was incorrect. This has been fixed.

    • The C# generated code for the White Balance tool was incorrect. This has been fixed.

    • The generated code for the EPointGauge tool was incorrect. This has been fixed.

Deep Learning Studio

  • New features

    • Chinese translation of Deep Learning Studio.

  • Changes

    • Deep Learning Studio is now Allied Vision-branded software. Its style was updated to use Allied Vision colors and logo.

      • The default path for the projects is now [Documents]/eVision/Deep Learning Studio Projects. Previously created projects will remain in their old folder and will still be accessible in this new version.

      • The configuration file of Deep Learning Studio is now saved in an Allied Vision folder. The old configuration file will be automatically imported the first time you open Deep Learning Studio. If you use older versions of Deep Learning Studio, you will have two separate copies of the Deep Learning Studio configuration file.

    • It is now possible to do a benchmark with any EasyDeepOCR tool.

    • The main menu of Deep Learning Studio has been reworked and now leave more place to the tabs.

    • Pressing the Control key while annotating an EasyLocate project would switch to Add mode while pressed, and back to Edit mode when lifted. This could cause issues when zooming, as it required pressing the same button. The button to switch annotations was changed to the Shift key.

    • When creating a benchmark, we no longer ask for the number of images, but rather the number of inferences.

  • Solved issues

    • A freeze could happen when trying to optimize the batch size of a benchmark, while something was running in the background. This has been fixed.

    • Loading a 16-bit image could fail with the message “An unknown error occurred while importing images to the dataset”. This has been fixed.

    • EasySegment Supervised and Unsupervised benchmark could in some instance be wrong. This has been fixed

    • Removing labels could make the application crash. This has been fixed.

    • Importing an “EasyDeepLearning dataset” in an EasySegment Supervised or EasyLocate project that already contains some labels could lead to the imported annotation to be assigned the wrong label. This has been fixed.

Across All Libraries

  • Changes in all versions (C++, DotNet, Python)

    • The unused enum values named reserved + a number present in many enumerations have been removed. ⚠ breaking change ⚠

  • Changes in C++ Version

    • All the types of the eVision library can now be included through smaller header files using #include <eVision/<sub_library>/<type_name>.h. The previous recapitulative headers (like Easy.h or the global header eVision.h) remain usable, but it is now recommended to use the small headers to optimize compilation speed in the C++ version. The necessary include lines for each type are cited in the new Doxygen API documentation published along the eVision documentation.

    • The type OEV_INT64 has been removed. All instances of this type can be replaced by int64_t. ⚠ breaking change ⚠

    • The type OEV_UINT64 has been removed. All instances of this type can be replaced by uint64_t. ⚠ breaking change ⚠

    • The type OEV_INT32 has been removed. All instances of this type can be replaced by int32_t. ⚠ breaking change ⚠

    • The type OEV_UINT32 has been removed. All instances of this type can be replaced by uint32_t. ⚠ breaking change ⚠

    • The type OEV_INT16 has been removed. All instances of this type can be replaced by int16_t. ⚠ breaking change ⚠

    • The type OEV_UINT16 has been removed. All instances of this type can be replaced by uint16_t. ⚠ breaking change ⚠

    • The type OEV_INT8 has been removed. All instances of this type can be replaced by int8_t. ⚠ breaking change ⚠

    • The type OEV_UINT8 has been removed. All instances of this type can be replaced by uint8_t. ⚠ breaking change ⚠

    • The type euresys_smart_ptr has been removed. All instances of this type can be replaced by std::unique_ptr. ⚠ breaking change ⚠

    • The type BOOL and the values TRUE and FALSE have been removed from the eVision headers. When using the eVision API, you should adapt these to bool, true and false. You can also rely on automatic conversion rules and use int, 1, and 0. Note that this type and these values are also used and defined by the Windows API. In those cases, you should keep the usage of BOOL, TRUE and FALSE. ⚠ breaking change ⚠

    • The unused enum value <name_of_enum>_reserved always present in all enums have been removed. ⚠ breaking change ⚠

    • Removes legacy tolerance for non-UTF8 encoded std::string in the methods taking strings as input that was applied only on Windows platform. Now the Windows version will behave exactly like the Linux version and throw a EException with error code EError_InvalidUTF8Encoding if any std::string containing non-valid UTF-8 is passed to a method. ⚠ breaking change ⚠

    • Removes auto-include mecanisms based on #include ordering to include eVision::EGrabberBridge and eVision::VimbaXBridge namespaces. Now, in order to use the classes in these namespaces, the #include <eVision/EGrabberBridge.h> and #include <eVision/VimbaXBridge.h> include lines must be used respectively. ⚠ breaking change ⚠

Easy

  • New features

    • Adds Easy::EBaseROI::IsAttached method as a replacement for some use cases of the now deprecated GetParent method.

    • Adds Easy::EBaseROI::GetBaseImage method as well as the GetImage method as drop-in replacements for the now deprecated GetBaseTopParent and GetTopParent methods.

    • EIntegerRange now has an equality and an inequality operator.

    • EFloatRange now has an inequality operator.

    • Adds ERegion::FillHoles() to return a new ERegion whose holes have been filled.

    • Adds EFoundPattern::GetHasFeaturePoints() to query if the EFoundPattern contains feature points.

    • Adds CreateFramesOnShape to ECircle, EWedge, ERectangle, EPolygon and ELine to create a vector of frames on the perimeter of the shapes.

    • Adds EGrid::CreateFramesOnGrid to create a vector of frames in the center of each cell of the grid.

    • Adds an overload to EBaseROI::SetPlacement and EBaseROI::Attach that takes an ERegion and an optional padding to construct a ROI from the bounding box of the input ERegion.

    • Adds 4 new constructors to ERegion to construct it from an ERectangle, EPolygon, ECircle or EWedge.

    • Add a new constructor to EPolygonRegion to construct it from an EPolygon.

    • Easy::DegreesToRadians and Easy::RadiansToDegrees allow conversion of angles between degrees and radians units.

    • In EWindowsDrawAdapter and ESystemDrawingDrawAdapter, added the facultative parameter enhancedDisplay in all constructors.

  • Changes

    • The structs EC15, EC16, EBW1 have been removed. ⚠ breaking change ⚠

    • The “Euresys simplified format” was renamed to “eVision simplified format”.

  • Deprecations

    • The following methods in EBaseROI and all its subclasses are now deprecated: GetParent, HasSubROI, GetFirstSubROI, GetNextSiblingSubROI, GetNextROI, GetNextSiblingROI, GetSubBaseROIs and GetSubROIs. The motivation is the high runtime cost on all operations associated with the maintenance of a hierarchy of ROIs within the class as well as the low usage of that feature. For users using that feature it is recommended to re-implement it on top of those classes.

    • The GetBaseTopParent and GetTopParent methods in EBaseROI and all its subclasses are also deprecated but have drop-in replacements: GetBaseImage and GetImage

    • Easy::SetAngleUnit, Easy::GetAngleUnit, Easy::FromRadians, Easy::ToRadians, Easy::FromDegrees and Easy::ToDegrees are deprecated and will be removed in 27.10. After the end of the deprecation period, changing the angle unit will no longer be possible: all angles supplied to and returned by eVision will always be in degrees. Code generated by eVision Studio no longer calls Easy::FromDegrees.

    • The Easy::GetEnableEnhancedImageDisplay() and Easy::SetEnableEnhancedImageDisplay() methods are deprecated in favor of passing these parameters in the constructor or EWindowsDrawAdapter instead.

  • Solved issues

    • Copied regions were not thread safe and a heavy usage of a region and a copy in two different threads could lead to crashes. This has been fixed.

    • Errors during calibration (automatic or explicit) could make eVision crash or would be ignored. Now, ECameraCalibration::Calibrate will always throw when an error occurred during the calibration (for example less than 8 landmarks for the advanced mode or landmarks that give a singular matrix) and ECameraCalibration::AutoCalibrate will throw only when all the tested mode yielded an error.

EasyImage

  • New features

    • Adds EasyImage::FillHoles() that takes a binary EImageBW8 or a ERegion and returns a binary EImageBW8 whose holes have been filled.

    • Adds EasyImage::RemoveOutliers() which replaces a pixel by the median of the pixels in the surrounding if it deviates from the median by more than a certain value (the threshold). Useful to remove noise and fill small holes.

    • Adds EasyImage::Thinning() that takes a binary EImageBW8 or a binary EImageBW16 and returns a binary image of the same type containing a 1 pixel-wide skeleton representing the overall shape of the input image.

    • Adds ELineDetector that takes a binary EImageBW8 and returns a list of straight lines found in the input image.

    • Adds Copy constructor, assignment operator and serialization to EKernel.

  • Solved issues

    • ConvolGaussian now works properly when halfKernelWidth is >= 64.

EasyBarCode

  • New features

    • Added support for 2 new symbologies EBarCodeSymbologies_Gs1DataBarStackedOmnidirectional and EBarCodeSymbologies_Gs1DataBarExpandedStacked.

  • Changes

    • Reading capabilities were slightly improved, especially for Gs1 Databar symbologies.

    • EBarCodeSymbologies_Gs1DataBar and EBarCodeSymbologies_Rss14 Codes whose payload is within [20000000000000, 20585067703929 [ were previously incorrectly decoded and are now ignored.

  • Solved issues

    • EBarCodeSymbologies_Gs1DataBarExpanded and EBarCodeSymbologies_Rss14Expanded Codes containing 11 finder patterns (the maximum allowed by the symbology) were not decoded correctly. This has been corrected.

    • In rare cases, the corners of EBarCode::GetPosition were not correct.

EasyQRCode

  • Changes

    • Overall improvement of QRCode reading capabilities (better positionning of QRCode grid, better handling of irregular illumination, and better handling of irregular grids).

    • Users can now set the AdaptiveThresholdHalfKernelSize of their EQRCodeReader. This setting was previously computed from the input image size, resulting in instabilities in complicated cases when using ROIs. The AdaptiveThresholdHalfKernelSize is now 50 by default, this works better than the previous setting overall but regressions are possible in some cases. If this concerns you, you may restore the previous behaviour by setting ComputeAdaptiveThresholdHalfKernelSizeFromImage to true or tune the parameter manually. ⚠ breaking change ⚠

  • Solved issues

    • In some rare cases, reading could throw an EException of type EError_PatternTooSmall, this has been fixed.

EasyOCR2

  • New features

    • A ToRegion and a ToFrame method has been added to EOCR2Text.

    • New method EOCR2::Read2 that returns a EOCR2Text.

  • Changes

    • DrawSegmentation was unable to correctly draw the segmentation when the zoom factor was different from 1.0 or when a frame was used when reading and drawing.

    • Changing the angle unit between after calling EOCR2::SetTextAngleRange would render the internal angle range of EOCR2 invalid, messing the subsequent reads and call to EOCR2::GetTextAngleRange. This fix may implies setting the angle range of serialiazed EOCR2 object saved before this release.

    • In some specific cases, when a EOCR2::Detect failed to detect the actual texts, the subsequent called to EOCR2::Recognize could make eVision crash (no validate candidate for a falsely detected character could be found). Instead, a proper exception explaining the problem is now thrown.

    • When using EOCR2::Detect with a ROI and a ERegion and when the ERegion had to be cropped to fit inside the given ROI, the segmentation was either wrong and/or eVision could crash.

    • The GetBoundingBox method of EOCR2Char, EOCR2Word, EOCR2Line and EOCR2Text now returns a bounding box with the correct angle suitable to build a EFrame. More precisely, a text that is not oriented and read from left to right returns a bounding box with an angle of 0°.

    • EOCR2::GetCharsWidthRange, EOCR2::GetRelativeSpacesWidthRange and EOCR2::GetTextAngleRange previously returned a reference (to be used as a setter). It is no longer the case. Use EOCR2::SetCharsWidthRange, EOCR2::SetRelativeSpacesWidthRange and EOCR2::SetTextAngleRange instead. ⚠ breaking change ⚠

  • Deprecations

    • EOCR2::ClearResult, EOCR2::GetReadText have been deprecated. In the future, the class EOCR2 will no longer hold the last read result.

    • HitTest and Draw methods previously attached to the class EOCR2 have been deprecated. Use the HitText and Draw methods of the returned EOCR2Text.

    • EOCR2::Read method has been deprecated. Use the new EOCR2::Read2 that returns a EOCR2Text.

    • EOCR2::Recognize methods which takes a const EOCR2Text& as input and returns a std::string have been deprecated. Use the new RecognizeText methods that modifies the EOCR2Text instead.

    • Previously, EOCR2::SetGlobalSegmentationThresholdMode could accept a positive integer instead of a proper EThresholdMode (done through a wrong cast and from the fact that possible enum values for EThresholdMode were all negative) and used this integer to set the GlobalSegmentationAbsoluteThreshold. This still works for legacy code, but the new SetGlobalSegmentationAbsoluteThreshold should be used instead. This behavior is therefore considered deprecated.

EasyDeepOCR

  • Changes

    • User retraining of the recognition network was improved: the model is now able to learn more complex use cases but the training speed will be slower, especially for very small datasets.

  • Deprecations

    • ETextReader::HasLocationCustomModel, ETextReader::HasRecognitionCustomModel and ETextReader::HasOrientationCustomModel have been deprecated. Use GetHasLocationCustomModel, GetHasRecognitionCustomModel and GetHasOrientationCustomModel instead.

  • Solved issues

    • When training an EasyDeepOCR recognizer, in some rare instances with very narrow font or with bad annotations, a crash could occur. This has been fixed.

EasyObject

  • New features

    • ECodedElement and ECodedImage2 now have a SetFrame method. ECodedImage2 also has a GetFrame method. It is useful to retrieve the frame after an encoding made with a frame or set the frame in after the encoding in case a frame was not given.

  • Solved issues

    • Encoding a EImageBW16 with an EImageEncoder with another encoder than ESegmentationMethod.LabeledImage made eVision crash. This has been fixed.

Deep Learning Inspection Libraries

  • New features

    • A new class, EDataset, was introduced to replace EClassificationDataset. Its API is largely compatible with EClassificationDataset, except for the data augmentation settings that were removed. The data augmentation settings should be handled through EDataAugmentation.

    • Existing Deep Learning snippets have been moved from the Deep Learning Tools page to their corresponding EasyClassify and EasySegment pages.

    • TensorRT Engine

      • DLA support has been added to the TensorRT engine. This feature currently supports EasyClassify and EasySegment networks only. DLA devices can now be used for inference on NVIDIA Jetson Orin hardware. 👁 Preview 👁

    • EasyLocate

      • New snippets available: Creating a Dataset and Training a Locator and Loading a Locator and Locating Objects on a New Image.

      • Added a ToRegion() method to ELocatorPredictedObject and ELocatorResult.

      • ELocator now supports frame when computing results.

      • ELocatorPredictedObject now has a non-null angle when the result has been computed with an EFrame.

    • EasySegment

      • Added a ToRegion() method to ESupervisedSegmenterResult and ESupervisedSegmenterBlob.

      • Added a GetCodedImage() method to ESupervisedSegmenterResult.

      • ESegmentSupervised now supports frame when computing results.

  • Changes

    • EDeepLearningProject::GetDataset() now returns an EDataset object instead of an EClassificationDataset object. ⚠ breaking change ⚠

    • The EDeepLearningBenchmarkSettings::Set/GetNumImages methods were removed. Use EDeepLearningBenchmarkSettings::Set/GetNumInferences for similar behavior, by interacting with the number of iterations of the benchmark instead. (see Deep Learning Studio change for more explanations.) ⚠ breaking change ⚠

    • When choosing to optimize the batch size of a benchmark, it is now done during the benchmark and thus can change between two runs.

    • Deep Learning Additional Resources

      • Added .edldataset files to all existing dataset in the Deep Learning Additional Resources. All datasets can now be loaded directly with their annotations in a custom Deep Learning project.

      • The EasyLocate directory was split into EasyLocate - Axis Aligned Bounding Box and EasyLocate - Interest Point.

  • Deprecations

    • EClassificationDataset has been deprecated. Use EDataset instead.

    • The enumeration EClassifierCapacity has been deprecated. All methods using this enum were already deprecated. Use EClassifier::GetModelType and EClassifier::SetModelType instead.

Samples

  • Changes

    • For all MSVC samples, opening files now places you by default in the most appropriate folder of the Sample Images or in the last folder you opened.

    • The CMake, MsVc and Qt samples as well as the C++ demo applications now only include the necessary headers. This results in ~20% faster build times.

    • The CMake samples now handle exceptions cleanly, such as missing licenses.

    • The Qt samples now build using Qt6 instead of Qt5.

    • The embedded samples using libcamera are now compatible with the latest release of libcamera.

Documentation

  • New documentation portal

  • Code snippets

    • The C++ code snippets were updated to only include the necessary headers.

Licensing

  • Solved issues

    • The Neo License Manager installed with the Linux RPM packages did not work properly. This has been fixed.