#pragma once // Cpp native #include #include #include #include // OpenCV / DNN / Inference #include #include #include struct Detection { int class_id{0}; std::string className{}; float confidence{0.0}; cv::Scalar color{}; cv::Rect box{}; }; class Inference { public: Inference(const std::string &onnxModelPath, const cv::Size &modelInputShape = {640, 640}, const std::string &classesTxtFile = "", const bool &runWithCuda = false); std::vector runInference(const cv::Mat &input); private: void loadClassesFromFile(); void loadOnnxNetwork(); cv::Mat formatToSquare(const cv::Mat &source); std::string modelPath{}; std::string classesPath{}; bool cudaEnabled{}; std::vector classes{"car", "wheel"}; cv::Size2f modelShape{}; float modelConfidenceThreshold {0.25}; float modelScoreThreshold {0.45}; float modelNMSThreshold {0.50}; bool letterBoxForSquare = true; cv::dnn::Net net; };