JeVois  1.22
JeVois Smart Embedded Machine Vision Toolkit
Share this page:
Loading...
Searching...
No Matches
jevois::dnn::PostProcessorDetect Class Reference

#include <jevois/DNN/PostProcessorDetect.H>

Post-Processor for neural network pipeline.

This is the last step in a deep neural network processing Pipeline.

Definition at line 31 of file PostProcessorDetect.H.

Inheritance diagram for jevois::dnn::PostProcessorDetect:
Collaboration diagram for jevois::dnn::PostProcessorDetect:

Public Member Functions

virtual ~PostProcessorDetect ()
 Destructor.
 
void freeze (bool doit) override
 Freeze/unfreeze parameters that users should not change while running.
 
void process (std::vector< cv::Mat > const &outs, PreProcessor *preproc) override
 Process outputs and draw/send some results.
 
void report (jevois::StdModule *mod, jevois::RawImage *outimg=nullptr, jevois::OptGUIhelper *helper=nullptr, bool overlay=true, bool idle=false) override
 Report what happened in last process() to console/output video/GUI.
 
std::vector< ObjDetect > const & latestDetections () const
 Get the latest detections, use with caution, not thread-safe.
 
- Public Member Functions inherited from jevois::dnn::PostProcessor
virtual ~PostProcessor ()
 Destructor.
 
- Public Member Functions inherited from jevois::Component
 Component (std::string const &instance)
 Constructor.
 
virtual ~Component ()
 Virtual destructor for safe inheritance.
 
template<class Comp , typename... Args>
std::shared_ptr< Comp > addSubComponent (std::string const &instance, Args &&...args)
 Pseudo-constructor: construct and add another component as a subcomponent of this one.
 
template<class Comp >
void removeSubComponent (std::shared_ptr< Comp > &component)
 Remove a sub-Component from this Component, by shared_ptr.
 
void removeSubComponent (std::string const &instance, bool warnIfNotFound=true)
 Remove a sub-Component from this Component, by instance name.
 
template<class Comp = jevois::Component>
std::shared_ptr< Comp > getSubComponent (std::string const &instance) const
 Get a sub-component by instance name.
 
bool isTopLevel () const
 Returns true if this component is top-level, i.e., its parent is jevois::Manager.
 
bool initialized () const
 Has this component been initialized yet?
 
std::string const & className () const
 The class name of this component.
 
std::string const & instanceName () const
 The instance name of this component.
 
template<typename T >
std::vector< std::string > setParamVal (std::string const &paramdescriptor, T const &val)
 Set a parameter value.
 
template<typename T >
void setParamValUnique (std::string const &paramdescriptor, T const &val)
 Set a parameter value, simple version assuming only one parameter match.
 
template<typename T >
std::vector< std::pair< std::string, T > > getParamVal (std::string const &paramdescriptor) const
 Get parameter(s) value(s) by descriptor.
 
template<typename T >
getParamValUnique (std::string const &paramdescriptor) const
 Get a parameter value, simple version assuming only one parameter match.
 
std::vector< std::string > setParamString (std::string const &paramdescriptor, std::string const &val)
 Set a parameter value, by string.
 
void setParamStringUnique (std::string const &paramdescriptor, std::string const &val)
 Set a parameter value by string, simple version assuming only one parameter match.
 
std::vector< std::pair< std::string, std::string > > getParamString (std::string const &paramdescriptor) const
 Get a parameter value, by string.
 
std::string getParamStringUnique (std::string const &paramdescriptor) const
 Get a parameter value by string, simple version assuming only one parameter match.
 
void freezeParam (std::string const &paramdescriptor, bool doit)
 Freeze/unfreeze a parameter, by name, see ParameterBase::freeze()
 
void freezeAllParams (bool doit)
 Freeze all parameters.
 
std::string descriptor () const
 Get our full descriptor (including all parents) as [Instancename]:[...]:[...].
 
void setParamsFromFile (std::string const &filename)
 Set some parameters from a file.
 
std::istream & setParamsFromStream (std::istream &is, std::string const &absfile)
 Set some parameters from an open stream.
 
virtual void paramInfo (std::shared_ptr< UserInterface > s, std::map< std::string, std::string > &categs, bool skipFrozen, std::string const &cname="", std::string const &pfx="")
 Get machine-oriented descriptions of all parameters.
 
void foreachParam (std::function< void(std::string const &compname, ParameterBase *p)> func, std::string const &cname="")
 Run a function on every param we hold.
 
template<typename T >
std::shared_ptr< DynamicParameter< T > > addDynamicParameter (std::string const &name, std::string const &description, T const &defaultValue, ParameterCategory const &category)
 Add a new parameter after the Component has already been constructed.
 
template<typename T , template< typename > class ValidValuesSpec>
std::shared_ptr< DynamicParameter< T > > addDynamicParameter (std::string const &name, std::string const &description, T const &defaultValue, ValidValuesSpec< T > const &validValuesSpec, ParameterCategory const &category)
 Add a new parameter after the Component has already been constructed.
 
template<typename T >
void setDynamicParameterCallback (std::string const &name, std::function< void(T const &)> cb, bool callnow=true)
 Register a callback with a previously created dynamic parameter.
 
void removeDynamicParameter (std::string const &name, bool throw_if_not_found=true)
 Remove a previously added dynamic parameter.
 
void setPath (std::string const &path)
 Assign a filesystem path to this component.
 
std::filesystem::path absolutePath (std::filesystem::path const &path="")
 If given path is relative (not starting with /), prepend the Component path to it.
 
- Public Member Functions inherited from jevois::ParameterRegistry
virtual ~ParameterRegistry ()
 Virtual destructor for safe inheritance.
 

Protected Member Functions

void onParamChange (postprocessor::detecttype const &param, postprocessor::DetectType const &val) override
 
void onParamChange (postprocessor::classes const &param, std::string const &val) override
 
- Protected Member Functions inherited from jevois::Component
virtual void preInit ()
 Called before all sub-Components are init()ed.
 
virtual void postInit ()
 Called after all sub-Components are init()ed.
 
virtual void preUninit ()
 Called before all sub-Components are uninit()ed.
 
virtual void postUninit ()
 Called after all sub-Components are uninit()ed.
 
- Protected Member Functions inherited from jevois::ParameterRegistry
void addParameter (ParameterBase *const param)
 The Parameter class uses this method to register itself on construction with its owning Component.
 
void removeParameter (ParameterBase *const param)
 The Parameter class uses this method to un-register itself on destruction with its owning Component.
 
void callbackInitCall ()
 For all parameters that have a callback which has never been called, call it with the default param value.
 

Protected Attributes

std::map< int, std::string > itsLabels
 Mapping from object ID to class name.
 
std::vector< ObjDetectitsDetections
 
cv::Size itsImageSize
 
std::shared_ptr< PostProcessorDetectYOLOitsYOLO
 

Related Symbols

(Note that these are not member symbols.)

 JEVOIS_DECLARE_PARAMETER (maxnbox, unsigned int, "Max number of top-scoring boxes to report (for YOLO flavors, " "this is the max for each scale), or 0 for no limit", 500, ParamCateg)
 Parameter.
 
 JEVOIS_DECLARE_PARAMETER (namedonly, bool, "When true, only report (on display and to serial ports) results " "for which we have a class name defined in the class file. This can allow one " "to skip some of the results by simply commenting out their name in the class file " "(make sure your class file then contains class-ID numbers for each named class).", false, ParamCateg)
 Parameter.
 
 JEVOIS_DECLARE_PARAMETER (dthresh, float, "Detection box threshold (in percent confidence) above which " "predictions will be reported. Not all networks use a separate box threshold, " "many only use one threshold confidence threshold (cthresh parameter). The YOLO " "family is an example that uses both box and classification confidences", 15.0F, jevois::Range< float >(0.0F, 100.0F), ParamCateg)
 Parameter.
 
 JEVOIS_DEFINE_ENUM_CLASS (DetectType,(FasterRCNN)(YOLO)(SSD)(TPUSSD)(RAWYOLO)(YOLOv10)(YOLOv10pp)(YOLOX)(YOLOv8)(YOLOv8t)(YOLOv8seg)(YOLOv8segt))
 Enum.
 
 JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK (detecttype, DetectType, "Type of detection output format", DetectType::YOLO, DetectType_Values, ParamCateg)
 Parameter.
 
 JEVOIS_DECLARE_PARAMETER (nms, float, "Non-maximum suppression intersection-over-union threshold in percent", 45.0F, jevois::Range< float >(0.0F, 100.0F), ParamCateg)
 Parameter.
 
 JEVOIS_DECLARE_PARAMETER (nmsperclass, bool, "When true, apply non-maximum suppression (NMS) separately for each " "object class, rather than globally. This will allow overlapping boxes as long as " "they belong to different classes", false, ParamCateg)
 Parameter.
 
 JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK (anchors, std::string, "For YOLO-type detection models with raw outputs, " "list of anchors. Should be formatted as: w1, h1, w2, h2, ... ww1, hh1, ww2, hh2, " "... ... where individual entries for a given YOLO layer are separated by commas, " "and successive YOLO layers (from large to small, e.g., first the anchors for 52x52, " "then for 26x26, then for 13x13) are separated by semicolons. Leave empty " "for other models.", "", ParamCateg)
 Parameter.
 
 JEVOIS_DECLARE_PARAMETER (masksmooth, bool, "When true, extract smoother instance segmentation masks, " "which may be marginally slower.", true, ParamCateg)
 Parameter.
 
 JEVOIS_DECLARE_PARAMETER (alpha, unsigned char, "Alpha channel value for drawn results", 64, ParamCateg)
 Parameter.
 
 JEVOIS_DECLARE_PARAMETER (sigmoid, bool, "Apply sigmoid to raw YOLO outputs, use when the last conv layers " "just before yolo/detection/region layers have linear activation (most " "YOLOv2/v3/v4 models, but not YOLOv5/v7 which have logistic activation on their " "last conv)", true, ParamCateg)
 Parameter.
 

Constructor & Destructor Documentation

◆ ~PostProcessorDetect()

jevois::dnn::PostProcessorDetect::~PostProcessorDetect ( )
virtual

Destructor.

Definition at line 32 of file PostProcessorDetect.C.

Member Function Documentation

◆ freeze()

void jevois::dnn::PostProcessorDetect::freeze ( bool  doit)
overridevirtual

Freeze/unfreeze parameters that users should not change while running.

Implements jevois::dnn::PostProcessor.

Definition at line 36 of file PostProcessorDetect.C.

◆ latestDetections()

std::vector< jevois::ObjDetect > const & jevois::dnn::PostProcessorDetect::latestDetections ( ) const

Get the latest detections, use with caution, not thread-safe.

This returns a reference to our internal vector of detections. That vector will get overwritten every time process() is called. It is ok to use this after you have called process() on a given frame, or, if using a Pipeline, after you have called Pipeline::process(). Do not hold this ref past the end of the current video frame. If you need to keep a persistent copy of the data, make a deep copy of the vector.

Definition at line 862 of file PostProcessorDetect.C.

◆ onParamChange() [1/2]

void jevois::dnn::PostProcessorDetect::onParamChange ( postprocessor::classes const &  param,
std::string const &  val 
)
overrideprotected

◆ onParamChange() [2/2]

void jevois::dnn::PostProcessorDetect::onParamChange ( postprocessor::detecttype const &  param,
postprocessor::DetectType const &  val 
)
overrideprotected

Definition at line 54 of file PostProcessorDetect.C.

◆ process()

void jevois::dnn::PostProcessorDetect::process ( std::vector< cv::Mat > const &  outs,
PreProcessor preproc 
)
overridevirtual

◆ report()

void jevois::dnn::PostProcessorDetect::report ( jevois::StdModule mod,
jevois::RawImage outimg = nullptr,
jevois::OptGUIhelper helper = nullptr,
bool  overlay = true,
bool  idle = false 
)
overridevirtual

Friends And Related Symbol Documentation

◆ JEVOIS_DECLARE_PARAMETER() [1/8]

JEVOIS_DECLARE_PARAMETER ( alpha  ,
unsigned char  ,
"Alpha channel value for drawn results"  ,
64  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER() [2/8]

JEVOIS_DECLARE_PARAMETER ( dthresh  ,
float  ,
"Detection box threshold (in percent confidence) above which " "predictions will be reported. Not all networks use a separate box  threshold,
" "many only use one threshold confidence threshold(cthresh parameter). The YOLO " "family is an example that uses both box and classification confidences"  ,
15.  0F,
jevois::Range< float >  0.0F, 100.0F,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER() [3/8]

JEVOIS_DECLARE_PARAMETER ( masksmooth  ,
bool  ,
"When  true,
extract smoother instance segmentation  masks,
" "which may be marginally slower."  ,
true  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER() [4/8]

JEVOIS_DECLARE_PARAMETER ( maxnbox  ,
unsigned int  ,
"Max number of top-scoring boxes to report   for YOLO flavors, " "this is the max for each scale,
or 0 for no limit"  ,
500  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER() [5/8]

JEVOIS_DECLARE_PARAMETER ( namedonly  ,
bool  ,
"When  true,
only report(on display and to serial ports) results " "for which we have a class name defined in the class file. This can allow one " "to skip some of the results by simply commenting out their name in the class file " "(make sure your class file then contains class-ID numbers for each named class)."  ,
false  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER() [6/8]

JEVOIS_DECLARE_PARAMETER ( nms  ,
float  ,
"Non-maximum suppression intersection-over-union threshold in percent"  ,
45.  0F,
jevois::Range< float >  0.0F, 100.0F,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER() [7/8]

JEVOIS_DECLARE_PARAMETER ( nmsperclass  ,
bool  ,
"When  true,
apply non-maximum suppression(NMS) separately for each " "object  class,
rather than globally. This will allow overlapping boxes as long as " "they belong to different classes"  ,
false  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER() [8/8]

JEVOIS_DECLARE_PARAMETER ( sigmoid  ,
bool  ,
"Apply sigmoid to raw YOLO  outputs,
use when the last conv layers " "just before yolo/detection/region layers have linear activation(most " "YOLOv2/v3/v4 models, but not YOLOv5/v7 which have logistic activation on their " "last conv)"  ,
true  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK() [1/2]

JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK ( anchors  ,
std::string  ,
"For YOLO-type detection models with raw  outputs,
" "list of anchors. Should be formatted as:w1  ,
h1  ,
w2  ,
h2  ,
  ww1,
hh1  ,
ww2  ,
hh2  ,
" "... ... where individual entries for a given YOLO layer are separated by  commas,
" "and successive YOLO layers(from large to small, e.g., first the anchors for 52x52, " "then for 26x26, then for 13x13) are separated by semicolons. Leave empty " "for other models."  ,
""  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK() [2/2]

JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK ( detecttype  ,
DetectType  ,
"Type of detection output format"  ,
DetectType::YOLO  ,
DetectType_Values  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DEFINE_ENUM_CLASS()

JEVOIS_DEFINE_ENUM_CLASS ( DetectType  ,
(FasterRCNN)(YOLO)(SSD)(TPUSSD)(RAWYOLO)(YOLOv10)(YOLOv10pp)(YOLOX)(YOLOv8)(YOLOv8t)(YOLOv8seg)(YOLOv8segt)   
)
related

Enum.

Member Data Documentation

◆ itsDetections

std::vector<ObjDetect> jevois::dnn::PostProcessorDetect::itsDetections
protected

Definition at line 68 of file PostProcessorDetect.H.

◆ itsImageSize

cv::Size jevois::dnn::PostProcessorDetect::itsImageSize
protected

Definition at line 69 of file PostProcessorDetect.H.

◆ itsLabels

std::map<int, std::string> jevois::dnn::PostProcessorDetect::itsLabels
protected

Mapping from object ID to class name.

Definition at line 67 of file PostProcessorDetect.H.

◆ itsYOLO

std::shared_ptr<PostProcessorDetectYOLO> jevois::dnn::PostProcessorDetect::itsYOLO
protected

Definition at line 70 of file PostProcessorDetect.H.


The documentation for this class was generated from the following files: