223 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#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;
 | 
						|
	};
 | 
						|
}
 |