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++6exact version dependency instead ofgccversion for Linux system dependencies.Upgrades minimal system requirements for Linux to
glibcversion 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
EFrameinputRegion Transform tool: added a new
EFrameinputEasyLocate tool: added a new
EFrameinput and a newERegioninput (mask)Output can be
Array of ELocatorPredictedObjectas well
EasySupervisedSegment tool: added a new
EFrameinput and a newERegioninput (mask)Output can now be
Array of ESupervisedSegmenterBloborEObjectSelectionas well
Convolution tool: can now take an
EKernelas input to perform anEasyImage::ConvolKernel.ToRegion tool:
can now take
ESupervisedSegmenterBlobandELocatorPredictedObjectas inputcan now take
EOCR2Textas inputcan now take
ECircle,EPolygon,ERectangleandEWedgeas input
ToFrame tool:
can now take
ELocatorPredictedObjectas inputcan now take
EOCR2Textas input
New tool added:
EasyOCR2 reader.
Region To ROI tool that that takes an
ERegionand an optional padding to construct a ROI from the bounding box of the inputERegion.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 ERegionas input and combines all its regions togetherToArray and FromArray tools: now support
ELine,ECircle,ERectangle,EPolygon,EWedgeandEGriditems 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
.oesto.evs. Existing.oesprojects 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 theERegion::DrawandERegion::DrawContourmethod only take a color as argument.EPoint::Drawis now used instead ofEPoint::DrawHandlein 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
EImageBW16was 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
ERegionoutput 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 Visionfolder. 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 (likeEasy.hor the global headereVision.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_INT64has been removed. All instances of this type can be replaced byint64_t. ⚠ breaking change ⚠The type
OEV_UINT64has been removed. All instances of this type can be replaced byuint64_t. ⚠ breaking change ⚠The type
OEV_INT32has been removed. All instances of this type can be replaced byint32_t. ⚠ breaking change ⚠The type
OEV_UINT32has been removed. All instances of this type can be replaced byuint32_t. ⚠ breaking change ⚠The type
OEV_INT16has been removed. All instances of this type can be replaced byint16_t. ⚠ breaking change ⚠The type
OEV_UINT16has been removed. All instances of this type can be replaced byuint16_t. ⚠ breaking change ⚠The type
OEV_INT8has been removed. All instances of this type can be replaced byint8_t. ⚠ breaking change ⚠The type
OEV_UINT8has been removed. All instances of this type can be replaced byuint8_t. ⚠ breaking change ⚠The type
euresys_smart_ptrhas been removed. All instances of this type can be replaced bystd::unique_ptr. ⚠ breaking change ⚠The type
BOOLand the valuesTRUEandFALSEhave been removed from the eVision headers. When using the eVision API, you should adapt these tobool,trueandfalse. You can also rely on automatic conversion rules and useint,1, and0. Note that this type and these values are also used and defined by the Windows API. In those cases, you should keep the usage ofBOOL,TRUEandFALSE. ⚠ breaking change ⚠The unused enum value
<name_of_enum>_reservedalways present in all enums have been removed. ⚠ breaking change ⚠Removes legacy tolerance for non-UTF8 encoded
std::stringin 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 aEExceptionwith error codeEError_InvalidUTF8Encodingif anystd::stringcontaining non-valid UTF-8 is passed to a method. ⚠ breaking change ⚠Removes auto-include mecanisms based on
#includeordering to includeeVision::EGrabberBridgeandeVision::VimbaXBridgenamespaces. 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::IsAttachedmethod as a replacement for some use cases of the now deprecatedGetParentmethod.Adds
Easy::EBaseROI::GetBaseImagemethod as well as theGetImagemethod as drop-in replacements for the now deprecatedGetBaseTopParentandGetTopParentmethods.EIntegerRangenow has an equality and an inequality operator.EFloatRangenow has an inequality operator.Adds
ERegion::FillHoles()to return a newERegionwhose holes have been filled.Adds
EFoundPattern::GetHasFeaturePoints()to query if theEFoundPatterncontains feature points.Adds
CreateFramesOnShapetoECircle,EWedge,ERectangle,EPolygonandELineto create a vector of frames on the perimeter of the shapes.Adds
EGrid::CreateFramesOnGridto create a vector of frames in the center of each cell of the grid.Adds an overload to
EBaseROI::SetPlacementandEBaseROI::Attachthat takes anERegionand an optional padding to construct a ROI from the bounding box of the inputERegion.Adds 4 new constructors to
ERegionto construct it from anERectangle,EPolygon,ECircleorEWedge.Add a new constructor to
EPolygonRegionto construct it from anEPolygon.Easy::DegreesToRadiansandEasy::RadiansToDegreesallow conversion of angles between degrees and radians units.In
EWindowsDrawAdapterandESystemDrawingDrawAdapter, added the facultative parameterenhancedDisplayin all constructors.
Changes
The structs
EC15,EC16,EBW1have been removed. ⚠ breaking change ⚠The “Euresys simplified format” was renamed to “eVision simplified format”.
Deprecations
The following methods in
EBaseROIand all its subclasses are now deprecated:GetParent,HasSubROI,GetFirstSubROI,GetNextSiblingSubROI,GetNextROI,GetNextSiblingROI,GetSubBaseROIsandGetSubROIs. 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
GetBaseTopParentandGetTopParentmethods inEBaseROIand all its subclasses are also deprecated but have drop-in replacements:GetBaseImageandGetImageEasy::SetAngleUnit,Easy::GetAngleUnit,Easy::FromRadians,Easy::ToRadians,Easy::FromDegreesandEasy::ToDegreesare 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 callsEasy::FromDegrees.The
Easy::GetEnableEnhancedImageDisplay()andEasy::SetEnableEnhancedImageDisplay()methods are deprecated in favor of passing these parameters in the constructor orEWindowsDrawAdapterinstead.
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::Calibratewill 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) andECameraCalibration::AutoCalibratewill throw only when all the tested mode yielded an error.
EasyImage¶
New features
Adds
EasyImage::FillHoles()that takes a binaryEImageBW8or aERegionand returns a binaryEImageBW8whose 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 binaryEImageBW8or a binaryEImageBW16and returns a binary image of the same type containing a 1 pixel-wide skeleton representing the overall shape of the input image.Adds
ELineDetectorthat takes a binaryEImageBW8and 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_Gs1DataBarStackedOmnidirectionalandEBarCodeSymbologies_Gs1DataBarExpandedStacked.
Changes
Reading capabilities were slightly improved, especially for Gs1 Databar symbologies.
EBarCodeSymbologies_Gs1DataBarandEBarCodeSymbologies_Rss14Codes whose payload is within [20000000000000, 20585067703929 [ were previously incorrectly decoded and are now ignored.
Solved issues
EBarCodeSymbologies_Gs1DataBarExpandedandEBarCodeSymbologies_Rss14ExpandedCodes 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::GetPositionwere 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
AdaptiveThresholdHalfKernelSizeof theirEQRCodeReader. This setting was previously computed from the input image size, resulting in instabilities in complicated cases when using ROIs. TheAdaptiveThresholdHalfKernelSizeis now50by 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 settingComputeAdaptiveThresholdHalfKernelSizeFromImagetotrueor tune the parameter manually. ⚠ breaking change ⚠
Solved issues
In some rare cases, reading could throw an
EExceptionof typeEError_PatternTooSmall, this has been fixed.
EasyOCR2¶
New features
A
ToRegionand aToFramemethod has been added toEOCR2Text.New method
EOCR2::Read2that returns aEOCR2Text.
Changes
DrawSegmentationwas 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::SetTextAngleRangewould render the internal angle range ofEOCR2invalid, messing the subsequent reads and call toEOCR2::GetTextAngleRange. This fix may implies setting the angle range of serialiazed EOCR2 object saved before this release.In some specific cases, when a
EOCR2::Detectfailed to detect the actual texts, the subsequent called toEOCR2::Recognizecould 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::Detectwith a ROI and aERegionand when theERegionhad to be cropped to fit inside the given ROI, the segmentation was either wrong and/or eVision could crash.The
GetBoundingBoxmethod ofEOCR2Char,EOCR2Word,EOCR2LineandEOCR2Textnow returns a bounding box with the correct angle suitable to build aEFrame. 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::GetRelativeSpacesWidthRangeandEOCR2::GetTextAngleRangepreviously returned a reference (to be used as a setter). It is no longer the case. UseEOCR2::SetCharsWidthRange,EOCR2::SetRelativeSpacesWidthRangeandEOCR2::SetTextAngleRangeinstead. ⚠ breaking change ⚠
Deprecations
EOCR2::ClearResult,EOCR2::GetReadTexthave been deprecated. In the future, the class EOCR2 will no longer hold the last read result.HitTestandDrawmethods previously attached to the classEOCR2have been deprecated. Use theHitTextandDrawmethods of the returnedEOCR2Text.EOCR2::Readmethod has been deprecated. Use the newEOCR2::Read2that returns aEOCR2Text.EOCR2::Recognizemethods which takes aconst EOCR2Text&as input and returns astd::stringhave been deprecated. Use the newRecognizeTextmethods that modifies theEOCR2Textinstead.Previously,
EOCR2::SetGlobalSegmentationThresholdModecould accept a positive integer instead of a properEThresholdMode(done through a wrong cast and from the fact that possible enum values forEThresholdModewere all negative) and used this integer to set theGlobalSegmentationAbsoluteThreshold. This still works for legacy code, but the newSetGlobalSegmentationAbsoluteThresholdshould 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::HasRecognitionCustomModelandETextReader::HasOrientationCustomModelhave been deprecated. UseGetHasLocationCustomModel,GetHasRecognitionCustomModelandGetHasOrientationCustomModelinstead.
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
ECodedElementandECodedImage2now have aSetFramemethod.ECodedImage2also has aGetFramemethod. 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
EImageBW16with anEImageEncoderwith another encoder thanESegmentationMethod.LabeledImagemade eVision crash. This has been fixed.
Deep Learning Inspection Libraries¶
New features
A new class,
EDataset, was introduced to replaceEClassificationDataset. Its API is largely compatible withEClassificationDataset, except for the data augmentation settings that were removed. The data augmentation settings should be handled throughEDataAugmentation.Existing Deep Learning snippets have been moved from the
Deep Learning Toolspage to their correspondingEasyClassifyandEasySegmentpages.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 LocatorandLoading a Locator and Locating Objects on a New Image.Added a ToRegion() method to
ELocatorPredictedObjectandELocatorResult.ELocatornow supports frame when computing results.ELocatorPredictedObjectnow has a non-null angle when the result has been computed with anEFrame.
EasySegment
Added a ToRegion() method to
ESupervisedSegmenterResultandESupervisedSegmenterBlob.Added a GetCodedImage() method to
ESupervisedSegmenterResult.ESegmentSupervisednow supports frame when computing results.
Changes
EDeepLearningProject::GetDataset()now returns anEDatasetobject instead of anEClassificationDatasetobject. ⚠ breaking change ⚠The
EDeepLearningBenchmarkSettings::Set/GetNumImagesmethods were removed. UseEDeepLearningBenchmarkSettings::Set/GetNumInferencesfor 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
.edldatasetfiles 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
EasyLocatedirectory was split intoEasyLocate - Axis Aligned Bounding BoxandEasyLocate - Interest Point.
Deprecations
EClassificationDatasethas been deprecated. UseEDatasetinstead.The enumeration
EClassifierCapacityhas been deprecated. All methods using this enum were already deprecated. UseEClassifier::GetModelTypeandEClassifier::SetModelTypeinstead.
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
evision.docs.alliedvision.com is the new portal for the eVision documentation
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.