V4.0.0 (12/2016)

SDK version v4.0.0.0: release notes

Main Changes:

  • SDK is simpler:
    • Global architecture of the SDK has been simplified
    • All objects are inherited from PObject to share common properties
    • All Papillon objects now behaves like shared pointers: no more value objects (PPoint, PRectangle, ...)
    • Almost all templates removed (e.g. PDescriptor, PList, PMap, PProperties, etc.)
  • Major update to the underlying face-recognition engine. This engine is 25x smaller, better at recognition and generates smaller templates.
  • Serialisation format has changed to be compatible with new object hierarchy: new serialisation is faster and more compact than SDK v3.X.
  • Warning: SDK v4.x binary files are no more compatible with SDK v3.X (serialisation format has changed)

Other changes in the API:

  • PList is now a generic container without templates
  • PProperties is now a generic container (PMap<PString, PObject) Objects no more cleared when deserialisation fails
  • PGuid can now handle Store Id and Object Id
  • Plugin architecture has changed: mandatory because of PObject. No more C++ inheritance; now relies on a C interface.
  • Add boxing/unboxing to support basic C++ data types as PObject, see PBoxing
  • Factorise common plugin architecture to be able to add new plugins
  • Output plugins now relies on POutputVideoStream::PutFrame() instead of PutImage() to be consistent with PInputVideoStream
  • Plugins are more generic with Set() / Get() which accept any PObject
  • No more PDetectorOptions, PImageFilterOptions; no more parameters in Detect() and Apply(). Use Set() instead (full unification)
  • PString: add Arg(const PObject&)
  • PString: new constructor(const char*, int) to create a string from the first n characters of a buffer
  • PColour3i: new constructor from a name
  • PMemoryStream: new constructor to create a stream from a raw buffer of bytes
  • PPlugin is now thread-safe
  • PImage now support a new resize mode: PImage::E_KEEP_ASPECT_RATIO_FILL_BORDER
  • PImage::Resize: when using a scale factor, aspect ratio setting is automatically set to PImage::E_IGNORE_ASPECT_RATIO
  • Add PAlarm toolbox (beta)
  • DeepCopy() methods have been renamed to Clone()
  • UnitTests for Core splitted in 6 different exe (basics, containers, network, storage, video, video processing)

Removed:

  • The following files have been removed:
    • PAnalyticsInterface.h
    • PapillonPimplInternal.h
    • PClassId.cpp
    • PClassId.h
    • PComparerInterface.h
    • PComparerVector.cpp
    • PComparerVector.h
    • PComparerVectorDistance.cpp
    • PComparerVectorDistance.h
    • PComparerVectorMedian.cpp
    • PComparerVectorMedian.h
    • PDescriberInterface.h
    • PDetectorInterface.h
    • PDetectorOptions.cpp
    • PDetectorOptions.h
    • PFeature.h
    • PFrameToFrameTrackerInterface.h
    • PImageFilterInterface.h
    • PImageFilterOptions.cpp
    • PImageFilterOptions.h
    • PInputVideoStreamInterface.cpp
    • PInputVideoStreamInterface.h
    • PInputVideoStreamPluginInterface.h
    • PNeutralBinaryFormat.cpp
    • PNeutralBinaryFormat.h
    • POutputVideoStreamInterface.h
    • PStringInternal.h

Bug Fixed:

  • Fix C++ static init order fiasco using Construct On First Use Idiom (e.g. PRectanglef::BAD replaced by PRectanglef::Bad(), e.g. PDetecterOptions::NO_OPTIONS, etc.) Almost all constants converted to inline functions (e.g. PMath::NaNf becomes PMath::NaNf())
  • PResult::GetMessage() has been renamed to PResult::GetErrorMessage() to avoid conflicts with standard Windows libraries
  • Rename class PThead to PConcurrentThread to avoid name conflicts with pthread standard library
  • No more std objects in public headers (PFileIO issue); PStdStream class has been replaced by PFileStream