Most of video analytics and image processing algorithms are provided as separate components, named plugins.

What is a plugin?

A plugin is an additional component which add new features to Papillon. Plugins are provided as shared library (.dll files for Windows or *.so for Linux).

Which plugins are avalaible with this release?

The 6 families of plugins available are:

The table below details the plugins that are available in this release.

Video Analytics Detectors Describers Image Filters Video Streams Reader Video Streams Writers
See PAnalytics to learn more See PDetector to learn more See PDescriber to learn more See PImageFilter to learn more See PInputVideoStream to learn more See POutputVideoStream to learn more
FaceLog (Simple Face Tracking) FaceDetector6 DescriberDnn EnhanceBrightness DeviceInputVideoStream (webcams) OpenCVOutputVideoStream (video files)
FaceLog6 (Real-time face identification) FaceDetector5 DescriberFaceQuality HistogramEqualisation PPluginInputVideoStreamFFmpeg (RTSP streams) NetworkOutputVideoStream
SafeZone2D with AI (Advanced Motion Detection) FaceDetector2 LACE (Local Contrast Enhancement) PPluginInputVideoStreamVLC (RTSP streams) ScreenOutputVideoStream (screen display)
People Counting MotionDetector Stabilisation OpenCVInputVideoStream (video files)
PersonDetector PPluginInputVideoStreamFeverCam (temperature video stream)
How to develop your own Input Video Stream Plugin?

How to use Papillon plugins?

Basically, to use plugins you just need to initialise the Papillon library using PapillonSDK::Initialise(), see example below.

Plugins management is fully transparent: all available plugins are automatically loaded by Papillon when the SDK is initialised. Once plugins are loaded, new features becomes available through Papillon factories (e.g. PDetector::Create() or PInputVideoStream::Open()).

Papillon will try to load plugins using the following rules:

1. PapillonSDK::SetPluginsPath(): Papillon will first try to load plugins from the path optionaly specified using PapillonSDK::SetPluginsPath().
Warning: SetPluginsPath() is taken into account if and only if it is called before PapillonSDK::Initialise().

2. PAPILLON_INSTALL_DIR environment variable: if PapillonSDK::SetPluginsPath() has not been used OR no plugins have been found, then Papillon will try to load plugins from "PAPILLON_INSTALL_DIR/plugins"

3. "/plugin" local folder: if PAPILLON_INSTALL_DIR environment variable has not been set OR no plugins found, then Papillon SDK will try to load plugins from the local "/plugins" path.

4. "/plugins" in the same folder than the executable: if local folder "/plugins" do not exist OR no plugins found, try Papillon SDK will try to load plugins from "/plugins" in the same folder than current executable.

5. If no plugin have been found, then Papillon will try to find plugins in the same folder than current executable.

// Somewhere in the startup of your application, you should add the following line of code
// which initialises Papillon SDK once and for all, and load all available plugins automatically
// ... among plugins distributed with the SDK, there is a face detector contained in a plugin named PPluginDetectorFace.dll (or .so for linux)
// once loaded by PapillonSDK::Initialise(), you simply have to use PDetector::Create() to get an instance:
PDetector faceDetector;
PDetector::Create("FaceDetector", PProperties(), faceDetector).OrDie();

Note: calling PResult::OrDie() method is radical: it will exit your program on failure. You should prefer to write the code like this:

if (PapillonSDK::Initialise().Failed())
// an error occurred while trying to initilise PapillonSDK: do something...