Contents
Versions 11.x
Version 11.3.0
This update contains API breaking changes. Please read the log carefully.
Features
- Measurement Fields: Add, remove and manipulate measurement fields in the shape of rectangles, ellipses, polygons and splines with enhanced statistical evaluation.
- Alarms: Add, remove and manipulate alarms. Route their signals to PIF output channels.
- Radial distortion correction for all cameras that support it.
- Download the calibration from device for Xi 80s and Xi 410s.
- Custom user data directory: Define a custom directory where the SDK should store configurations, calibrations, logs and more.
- Improved color palettes: Color palettes for false color conversion are now defined in simple
CSV files. You can now add your own palettes via CSV files or programmatically.
- Enhanced callbacks: All
IRImagerClient callbacks now use event classes to bundle the callback data. Several previous callbacks were compounded into a single onFrame() callback that is triggered on a per frame basis. The callbacks are now executed by dedicated threads and no longer block the processing pipeline.
Changes
- Bindings
- C#
- The SDK namespace was changed from
Optris.OtcSDK to Optris.OtcSdk.
- Python
- It is now required to remove
IRImagerClients from the IRImager before they are destroyed to ensure destroyed clients can no longer be accessed.
- Configuration file
- Incremented version to 3.
- Added sections to accommodate new features:
- Alarms
- Processing
output defines which outputs (raw frames, thermal frames or measurement fields) should be generated.
max_result_pool_size sets the maximum number of buffers used to store processing results.
- Added
rdc_mode to optics section to specifying the mode of radial distortion correction (RDC).
- Reworked the
measurement_field section to accommodate the new shapes and features.
- Amended the
pif section
- The
analog_outputs and digital_outputs channel have a new mode option alarm.
- A
channel in the analog_outputs using the measurement_field mode now has to specify which statistical value of the field should be output via the stat setting.
- Added a low pass filter for the automatic temperature scaling in the
ImageBuilder resulting in smoother transitions.
- You can now specify which processing outputs (raw frames, thermal frames and measurement fields) should be provided by the SDK.
- The startup (re-)calibrations can now be skipped by calling
IRImager::skipStartupCalibration().
- On-device network settings can now be manipulated on an active
IRImager Ethernet connection. Depending on the changes the SDK will try to retain the active connection. If they are too severe, the SDK will consider the active connection lost and will trigger the corresponding callbacks.
- Framerate sub-sampling can now be set at runtime.
- The SDK now uses an internal pool of reusable buffers to store the results of the processing pipeline. The pool size can be configured and manipulated at runtime.
ImageBuilder can now render the false color images to an external buffer.
- The current version of the
Formats.def can now be accessed via the Sdk class.
- The
IRImager now establishes a device connection even if the calibration files are missing. Refer to this section in the documentation on the resulting limitations.
- Performance improvements in the processing pipeline and the false color image generation.
- Updated API used to download files on Windows.
- Improved thread safety.
- Improved device enumeration.
API changes
- C#
- The SDK namespace was changed from
Optris.OtcSDK to Optris.OtcSdk.
- New classes
- Event classes for all the callbacks defined in
IRImager client.
- Classes facilitating the implementation of alarms and measurement fields.
ProcessingOutputConfig struct defining what processing outputs should be provided by the SDK.
- Dedicated
Version class to represent a version.
OperationInfo class holding debug and performance information of the processing pipeline.
UncommittedValueStatus class bundling the status of an uncommitted value generated by a PIF analog input.
RangeF and RangeI structs defining float and integer ranges.
Vector2f and Vector2i structs defining two-dimensional float and integer vectors.
PifIndex struct encapsulating the device and pin indices of a PIF channel.
- Removed classes
- The iterator classes for
Frames, MeasurementFields and Images were removed due to poor performance.
- DeviceInfo
- Added method
hasFocusMotor().
- IRImager
- Added getter and setter for sub-sampled frame rate.
- Added getter for the
IRImagerConfiguration.
- Added method to save the current
IRImagerConfiguration configuration.
run() now returns a bool indicating, if the processing loop started correctly.
- Added getter and setter for the
ProcessingOutputConfig setting.
- Added getter and setter for the maximum size of the processing result buffer pool.
- Added method to skip startup (re-)calibration.
- Added getter and setter for the radial distortion correction mode (RDC).
- Added and updated methods to add, remove and manipulate measurement fields.
- Added methods to add, remove, query and manipulate alarms.
- Added method to configure
OperationInfo retrieval.
- The method
setDeviceNetworkConfig() now returns a boolean indicating whether an active connection could be retained.
- IRImagerClient
- All callbacks feature event classes encapsulating all relevant data as argument.
onThermalFrame(), onMeasurementField() and onFlagStateChange() were compounded into the onFrame() callback that is triggered once per processed frame (subject to sub-sampling).
onConnectionLost() and onConnectionTimeout() were subsumed into the onConnection() callback that offers additional functionality (e.g. calibration file acquisition).
- Added callback
onRawFrame() providing raw unprocessed frame data.
- Added callback
onOperationInfo() for receiving debug and performance information about the processing pipeline.
- Removed dead callback
onThermalEvent().
- Removed callback
onProcessExit().
- ImageBuilder
- Added methods to query and adjust the low pass filter for the automatic temperature scaling modes.
- Added getters for the filtered minimum and maximum scaling temperatures.
- Added a variant of the
convertTemperatureToPaletteImage() method that renders the false color image to an external buffer.
- Renamed enum
PaletteScalingMethod to TemperatureScalingMode.
- Renamed methods:
setManualTemperatureRange() to setTemperatureScaling()
getIsothermalMin() to getTemperatureScalingMin()
getIsothermalMax() to getTemperatureScalingMax()
setPaletteScalingMethod() to setTemperatureScalingMode()
getPaletteScalingMethod() to getTemperatureScalingMode()
- ProcessInterface
- Added method to get the supported PIF device types by the current camera.
- PifXXChannelConfig
- Added a simple struct
PifIndex to hold the device and pin indices in the configuration structs.
- VersionInfo
- Added getter for the Sdk and
Formats.def versions.
- Removed redundant methods that implemented the functionality of the new
Version class.
- Sdk
- Added methods to set, get and clear a custom user data directory.
- Added methods for managing color palettes.
- Added method to set a callback that receives all the log message generated by the SDK.
- TemperatureConverter
- Added method to convert an internal value in float to degree Celsius.
- The heating mode of the sensor chip is now represented by the enum
ChipHeatingMode instead of an string.
- All classes holding configurations are now plain structs without constructors.
Bugs
- Fixed an issue that crashed the SDK while searching for required files when used on Windows without an installation.
- Fixed an issue that caused the SDK to get stuck when calling
IRImager::disconnect() from a callback.
- Fixed Python 3 and C# enumeration examples.
- Fixed bindings access to
IRImager::getPif().
- Fixed the handling of invalid temperature in the
ImageBuilder.
- Pixels with invalid temperatures are now converted to black in false color images.
- Pixels with invalid temperatures are now longer considered in
- the automatic temperature scaling methods.
- the calculation of mean, min and max regions.
- Fixed the conversion of invalid temperatures in the
TemperatureConverter.
- Fixed an issue where dead pixels could lead to a faulty auto skim calibration resulting in seemingly overexposed false color images.
- Fixes to the USB subsystems to improve stability and the reliability of device enumeration.
- Fixes and improvements to the TCP subsystem to better detect and propagate errors to the client and to improve stability.
- Various corrections in the documentation.
- Miscellaneous minor fixes and improvements.
Versions 10.x
Version 10.1.1
Features
Changes
- Configuration file
- Added option
sos_correction to optics section. It enables size of source correction for devices that support it.
- Overhaul of the startup/connection process. It features
- an improved arbitration between detected and configured device connection details.
- an automated reconfiguration of the IP address Ethernet devices send their frame data to.
- an automated adjustment of the video format, if an Ethernet capable device uses a different connection interface as configured.
- a rejection of devices that already have an active connection.
- Radiation parameters
- Added a class
RadiationParameters encapsulating a set of emissivity, transmissivity and ambient temperature values. It also features a flag indicating whether the SDK should estimate the ambient temperature based on internal thermal probe readings. It used throughout the API.
- Ambient temperature estimates are now updated when the readings of the internal probes from which it is derived changes.
- Radiation parameters are only updated every 500 ms regardless whether their values are set by the PIF, the SDK or a SDK client.
- The
FrameMetadata object returned by the IRImagerClient::onThermalFrame() callback now contains the radiation parameters and their respective sources that were used to process the frame.
- The
MeasurementField objects returned by the IRImagerClient::onMeasurementField() provide these details for their respective fields.
- Video formats
- Clipped video formats (PI 640I and PI 1M) are now centered within their larger formats.
- API
- DeviceInfo
- Added a busy status indicating whether the device already has an active connection.
- Added MAC-Address information for devices on a network.
- Added a connection interface address that returns the endpoint for USB connections or the IP address of the SDK client with Ethernet connections.
- Enumeration Manager
- Added methods to add and remove detectors for USB and Ethernet devices.
- The
EnumerationClient now features an additional callback onDeviceDetectionChanged() that is triggered when the details/status of a detected device changes (for example an available device accepted a connection).
- FrameMetadata
- Added getters for the radiation parameters and their respective sources used to process the thermal frame.
- IRImager
- Added setters for the active operation mode.
- Added a setter and getter to en-/disable
- size of source correction.
- high precision temperature measurements.
- temperature range extension.
- Added getters for the device connection details (connection interface, device IP address and reception port).
- Added getters returning the current source of radiation parameters.
- Updated the setter and getter for the radiation parameters of the overall thermal frame.
- IRImagerClient
- Added callback
onVideoFormatChanged() that is triggered upon a new device connection or when the video format changed due to a new active operation mode.
- MeasurementField
- Added getters for the radiation parameters and their respective sources used to process the field.
- Sdk
- Added a method to reconfigure the logger settings.
- Command line tools
- otc_configure_ethernet. Added command line options to find and configure devices on the network.
- otc_find_devices. Added command line options to support Ethernet device detection and updated output.
- Examples
- All examples add a detector for Ethernet devices on the network
192.168.0.0/24 by default.
- All Simple View examples can now cycle through the available operation modes and display hot and cold spots.
- Various internal improvements to the core library and bindings for better performance and thread safety.
Bugs
- Fixed static linking with MSVC on Windows.
- Fixed debug builds with MSVC on Windows.
Version 10.1.0
Features
Changes
- Configuration file
- Added the following new sections to accommodate the new features
- Fail safe
- Measurement fields
- Process Interface
- Incremented file version to 2 but remains compatible with version 1.
- Measurement fields
- All measurement field related headers are now located in
otcsdk/fields folder.
- Measurement fields are now created with the help of
MeasurementFieldConfig objects.
- Measurement fields can now be assigned a
mode that defines what data point is returned by the MeasurementField::getDataPoint() method.
- API
- The active operation mode can now be accessed via the
getActiveOperationMode() method of the IRImager.
- The
ThermalFrame and MeasurementField classes now offer a copyTemperaturesTo() method that copies all their thermal data in degree Celsius to a target array.
- Language bindings
- The Python 3 bindings now offers access to the string conversion functions for the C++ enums in the SDK. Since C++ enums are converted to integer constants the names of these functions must be made more specific by adding a prefix. For example, use
deviceTypeToString() for any DeviceType_<Value> constant to get the corresponding string representation.
- Examples
- All simple view examples now feature the ability to display the FPS and shutter flag state as well as the possibility to trigger a manual flag cycle.
- Reduced the overall console output of the examples.
- Windows
- The default installation path changed to
C:\Program Files\Optris\otcsdk. The installer automatically removes the old version and adjust all relevant environment variables and registry entries. An empty folder in the old SDK location may persist.
- Linux
- The OTC SDK Debian packages not longer conflicts with the ones of the IR Direct SDK.
Bugs
- Fixed issues that prevented the SDK from correctly parsing and probing all available download sites for calibration data.
- Fixed an issue that prevented the SDK from performing required automatic skim calibrations.
- Fixed an issue that created pointless dependencies on other language bindings when using CMake to compile C++ SDK applications.
- Fixed a memory access issue that caused the compilation with an active Address Sanitizer to fail.
- Fixed an issue that caused memory access violations in multi-threaded environments with USB cameras while disconnecting.
- Other minor bug fixes and improvements.
Version 10.0.1
Features
- Extended and enhanced the documentation.
- Improved Python 3 bindings downwards compatibility on Windows to Python 3.9 and NumPy 2.0.0.
Bugs
- Fixed an issue that caused the installation of the Debian packages to fail on headless systems.
- The method
EnumerationManger::getDetectedDevices() will no longer block indefinitely, if its argument is set to 0.
- The Simple View terminal windows will no longer close immediately upon an error.
Version 10.0.0
Redesigned the SDK based on the feature set of the IR Direct SDK version 8.9.0 with the following additional features
- Updated modern C++ API
- Multi camera support
- Xi1M support
- Full object oriented C# and Python 3 bindings
- Normalization support
- Command line tool for adjusting the device Ethernet settings
- Updated XML configuration file
- Automated calibration file download and XML configuration files generation
- Improved logging output