#ifndef CENTERNETDETECTION_H #define CENTERNETDETECTION_H #include "kernels.h" #include #include "opencv2/opencv.hpp" #include #include #include // std::iota #include // std::sort #include "DetectionNN.h" #include "sorting.h" namespace tk { namespace dnn { class CenternetDetection : public DetectionNN { private: std::vector classesNames; tk::dnn::dataDim_t dim; tk::dnn::dataDim_t dim2; tk::dnn::dataDim_t dim_hm; tk::dnn::dataDim_t dim_wh; tk::dnn::dataDim_t dim_reg; float *topk_scores; int *topk_inds_; float *topk_ys_; float *topk_xs_; int *ids_d, *ids_, *ids_2, *ids_2d; float *scores, *scores_d; int *clses, *clses_d; int *topk_inds_d; float *topk_ys_d; float *topk_xs_d; int *inttopk_xs_d, *inttopk_ys_d; float *bbx0, *bby0, *bbx1, *bby1; float *bbx0_d, *bby0_d, *bbx1_d, *bby1_d; float *target_coords; #ifdef OPENCV_CUDA float *mean_d; float *stddev_d; #else cv::Vec mean; cv::Vec stddev; dnnType *input; #endif float *d_ptrs; cv::Mat src; cv::Mat dst; cv::Mat dst2; cv::Mat trans, trans2; //processing float toll = 0.000001; int K = 100; int width = 128;//56; // TODO // pointer used in the kernels float *src_out; int *ids_out; struct threshold op; public: CenternetDetection() {}; ~CenternetDetection() {}; bool init(const std::string& tensor_path, const int n_classes=80); void preprocess(cv::Mat &frame); void update(cv::Mat &frame); void postprocess(dnnType **rt_out, const int n_out); cv::Mat draw(cv::Mat &frame); }; } // namespace dnn } // namespace tk #endif /*CENTERNETDETECTION_H*/