You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

222 lines
8.1 KiB

#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;
};
}