|
#pragma once
|
|
|
|
#include "TrackEngineTypes.h"
|
|
#include <fsdk/Types/Span.h>
|
|
|
|
namespace tsdk {
|
|
|
|
/**
|
|
* @brief BestShot observer interface
|
|
*/
|
|
struct TRACK_ENGINE_API IBatchBestShotObserver {
|
|
/**
|
|
* @brief Ready portrait notification for streams
|
|
* @param streamIDs ids of the streams.
|
|
* @param data callback data. see 'BestShotCallbackData' for details
|
|
* Do not delete it under no circumstances.
|
|
* @note pure virtual method
|
|
*/
|
|
virtual void bestShot(const fsdk::Span<tsdk::StreamId> &streamIDs,
|
|
const fsdk::Span<tsdk::BestShotCallbackData> &data) = 0;
|
|
|
|
/**
|
|
* @brief End of the tracks notification for streams
|
|
* @param streamIDs ids of the streams.
|
|
* @param data callback data. see 'TrackEndCallbackData' for details
|
|
* @note pure virtual method
|
|
* @note See 'TrackEndCallbackData' struct comments for more information about logic of this callback
|
|
*/
|
|
virtual void trackEnd(const fsdk::Span<tsdk::StreamId> &streamIDs,
|
|
const fsdk::Span<tsdk::TrackEndCallbackData> &data) = 0;
|
|
|
|
/**
|
|
* @brief status of the track update notification for streams.
|
|
* @param streamIDs ids of the streams.
|
|
* @param data callback data. see 'TrackStatusUpdateCallbackData' for details
|
|
* @note pure virtual method
|
|
*/
|
|
virtual void trackStatusUpdate(const fsdk::Span<tsdk::StreamId> &streamIDs,
|
|
const fsdk::Span<tsdk::TrackStatusUpdateCallbackData> &data) = 0;
|
|
|
|
/**
|
|
* @brief ReIdentification of the old non-active tracks notification for streams.
|
|
* The callback serves to connect two matched tracks: first one is from the current tracks and second one is from the old non-active tracks.
|
|
* See human tracking algorithm section in docs for details.
|
|
* @param streamIDs ids of the streams.
|
|
* @param data callback data. see 'TrackReIdentificateCallbackData' for details
|
|
* @note the callback's called only for human tracking in the current version of the Track Engine
|
|
* @note after 'trackReIdentificate' 'trackEnd' may be called for the current track id to indicate, that this id doesn't exist anymore
|
|
*/
|
|
virtual void trackReIdentificate(const fsdk::Span<tsdk::StreamId> &streamIDs,
|
|
const fsdk::Span<tsdk::TrackReIdentificateCallbackData> &data) = 0;
|
|
|
|
virtual ~IBatchBestShotObserver() = default;
|
|
};
|
|
|
|
/** @brief Ready track observer interface
|
|
*/
|
|
struct TRACK_ENGINE_API IBatchVisualObserver {
|
|
/**
|
|
* @brief Ready track notification
|
|
* @param streamIDs ids of the streams.
|
|
* @param data callback data. see 'VisualCallbackData' for details
|
|
* Do not remove it under no circumstances.
|
|
* @note pure virtual method
|
|
*/
|
|
virtual void visual(const fsdk::Span<tsdk::StreamId> &streamIDs,
|
|
const fsdk::Span<tsdk::VisualCallbackData> &data) = 0;
|
|
|
|
virtual ~IBatchVisualObserver() = default;
|
|
|
|
};
|
|
|
|
/** @brief Debug information observer interface
|
|
*/
|
|
struct TRACK_ENGINE_API IBatchDebugObserver {
|
|
|
|
/**
|
|
* @brief Debug callback for the foreground subtractor
|
|
* @param streamIDs ids of the streams.
|
|
* @param data callback data. see 'DebugForegroundSubtractionCallbackData' for details
|
|
*/
|
|
virtual void debugForegroundSubtraction(const fsdk::Span<tsdk::StreamId> &streamIDs,
|
|
const fsdk::Span<tsdk::DebugForegroundSubtractionCallbackData> &data) = 0;
|
|
|
|
/**
|
|
* @brief Debug callback for the detection
|
|
* @param streamIDs ids of the streams.
|
|
* @param data callback data. see 'DebugDetectionCallbackData' for details
|
|
*/
|
|
virtual void debugDetection(const fsdk::Span<tsdk::StreamId> &streamIDs,
|
|
const fsdk::Span<tsdk::DebugDetectionCallbackData> &data) = 0;
|
|
|
|
virtual ~IBatchDebugObserver() = default;
|
|
};
|
|
|
|
/**
|
|
* @brief BestShot observer interface
|
|
*/
|
|
struct IBestShotObserver {
|
|
/**
|
|
* @brief Ready portrait notification
|
|
* @param ReadyFace portrait, @see ReadyFace
|
|
* @param data any additional frame data from source. Absolutely the same data you pass into pushFrame().
|
|
* Do not remove it under no circumstances.
|
|
* @note pure virtual method
|
|
*/
|
|
TRACK_ENGINE_API virtual void bestShot(const tsdk::DetectionDescr& descr, const tsdk::AdditionalFrameData* data) = 0;
|
|
|
|
/**
|
|
* @brief End of the track notification.
|
|
* @param trackId id of the track which was finished.
|
|
* @note pure virtual method
|
|
*/
|
|
TRACK_ENGINE_API virtual void trackEnd(const tsdk::TrackId& trackId) = 0;
|
|
|
|
/**
|
|
* @brief status of the track update notification.
|
|
* @param trackId id of the track with status updated.
|
|
* @param status track status.
|
|
*/
|
|
TRACK_ENGINE_API virtual void trackStatusUpdate(tsdk::FrameId frameId, tsdk::TrackId trackId, tsdk::TrackStatus status) {
|
|
};
|
|
|
|
/**
|
|
* @brief ReIdentification of the old non-active tracks notification for streams.
|
|
* The callback serves to connect two matched tracks: first one is from the current tracks and second one is from the old non-active tracks.
|
|
* See human tracking algorithm section in docs for details.
|
|
* @param frameId id of frame
|
|
* @param trackId id of track, that was matched to one of the old non-active tracks
|
|
* @param reidTrackId id of the non-active track, that successfully mathed to track with id = 'trackId'
|
|
* @note the callback's called only for human tracking in the current version of the Track Engine
|
|
* @note after 'trackReIdentificate' 'trackEnd' may be called for the current track id to indicate, that this id doesn't exist anymore
|
|
*/
|
|
TRACK_ENGINE_API virtual void trackReIdentificate(tsdk::FrameId frameId, tsdk::TrackId trackId, tsdk::TrackId reidTrackId) {
|
|
}
|
|
|
|
TRACK_ENGINE_API virtual ~IBestShotObserver() = default;
|
|
};
|
|
|
|
/**
|
|
* @brief Ready track observer interface
|
|
*/
|
|
struct IVisualObserver {
|
|
/**
|
|
* @brief Ready track notification
|
|
* @param frameId id of the frame
|
|
* @param fsdk::image this is either original image (if 'pushFrame' used) or RGB image got from custom frame convert (is 'pushCustomFrame' used)
|
|
* @param tsdk::TrackInfo* pointer to array of track information
|
|
* @param int nTrack size of array of track
|
|
* @param data any additional frame data from source. Absolutely the same data you pass into pushFrame().
|
|
* Do not remove it under no circumstances.
|
|
* @note pure virtual method
|
|
*/
|
|
TRACK_ENGINE_API virtual void visual(
|
|
const tsdk::FrameId &frameId,
|
|
const fsdk::Image &image,
|
|
const tsdk::TrackInfo * trackInfo,
|
|
const int nTrack,
|
|
const tsdk::AdditionalFrameData* data) = 0;
|
|
|
|
TRACK_ENGINE_API virtual ~IVisualObserver() = default;
|
|
|
|
};
|
|
|
|
/**
|
|
* @brief Debug information observer interface
|
|
*/
|
|
struct IDebugObserver {
|
|
/**
|
|
* @brief Debug callback for the foreground subtractor
|
|
* @param frameId id of the frame
|
|
* @param firstMask first mask of the frg subtractor
|
|
* @param secondMask second mask of the frg subtractor
|
|
* @param regions detected regions
|
|
* @param nRegions count of the regions
|
|
*/
|
|
TRACK_ENGINE_API virtual void debugForegroundSubtraction(
|
|
const tsdk::FrameId& frameId,
|
|
const fsdk::Image& firstMask,
|
|
const fsdk::Image& secondMask,
|
|
fsdk::Rect * regions,
|
|
int nRegions
|
|
) {
|
|
};
|
|
|
|
/**
|
|
* @brief Debug callback for the detection
|
|
* @param descr debug information about detection.
|
|
*/
|
|
TRACK_ENGINE_API virtual void debugDetection(
|
|
const tsdk::DetectionDebugInfo& descr) {
|
|
};
|
|
|
|
TRACK_ENGINE_API virtual ~IDebugObserver() = default;
|
|
};
|
|
|
|
/** @brief Best shot predicate
|
|
* @note Logic for checking if current shot could be the best shot candidate
|
|
*/
|
|
struct TRACK_ENGINE_API IBestShotPredicate {
|
|
/**
|
|
* @brief Check if current shot is the best shot candidate
|
|
* @param descr detection descriptor, @see tsdk::DetectionDescr
|
|
* @param data any additional frame data from source. Absolutely the same data you pass into pushFrame().
|
|
* Do not remove it under no circumstances.
|
|
* @return true if current shot could be the best shot candidate, false otherwise
|
|
* @note pure virtual method
|
|
*/
|
|
virtual bool checkBestShot(const tsdk::DetectionDescr& descr, const tsdk::AdditionalFrameData *data) = 0;
|
|
|
|
virtual ~IBestShotPredicate() = default;
|
|
};
|
|
|
|
/** @brief Visual predicate
|
|
* @note Logic for checking if original or converted RGB image is needed in visual callback data (useful, when client uses 'pushCustomFrame')
|
|
*/
|
|
struct TRACK_ENGINE_API IVisualPredicate {
|
|
virtual bool needRGBImage(const tsdk::FrameId frameId, const tsdk::AdditionalFrameData*) = 0;
|
|
|
|
virtual ~IVisualPredicate() = default;
|
|
};
|
|
}
|