1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #pragma once
- // Cpp native
- #include <fstream>
- #include <vector>
- #include <string>
- #include <random>
- // OpenCV / DNN / Inference
- #include <opencv2/imgproc.hpp>
- #include <opencv2/opencv.hpp>
- #include <opencv2/dnn.hpp>
- 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<Detection> 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<std::string> 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;
- };
|