12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #pragma once
- #define RET_OK nullptr
- #ifdef _WIN32
- #include <Windows.h>
- #include <direct.h>
- #include <io.h>
- #endif
- #include <string>
- #include <vector>
- #include <cstdio>
- #include <opencv2/opencv.hpp>
- #include "onnxruntime_cxx_api.h"
- #ifdef USE_CUDA
- #include <cuda_fp16.h>
- #endif
- enum MODEL_TYPE
- {
- //FLOAT32 MODEL
- YOLO_DETECT_V8 = 1,
- YOLO_POSE = 2,
- YOLO_CLS = 3,
- //FLOAT16 MODEL
- YOLO_DETECT_V8_HALF = 4,
- YOLO_POSE_V8_HALF = 5,
- YOLO_CLS_HALF = 6
- };
- typedef struct _DL_INIT_PARAM
- {
- std::string modelPath;
- MODEL_TYPE modelType = YOLO_DETECT_V8;
- std::vector<int> imgSize = { 640, 640 };
- float rectConfidenceThreshold = 0.6;
- float iouThreshold = 0.5;
- int keyPointsNum = 2;//Note:kpt number for pose
- bool cudaEnable = false;
- int logSeverityLevel = 3;
- int intraOpNumThreads = 1;
- } DL_INIT_PARAM;
- typedef struct _DL_RESULT
- {
- int classId;
- float confidence;
- cv::Rect box;
- std::vector<cv::Point2f> keyPoints;
- } DL_RESULT;
- class YOLO_V8
- {
- public:
- YOLO_V8();
- ~YOLO_V8();
- public:
- char* CreateSession(DL_INIT_PARAM& iParams);
- char* RunSession(cv::Mat& iImg, std::vector<DL_RESULT>& oResult);
- char* WarmUpSession();
- template<typename N>
- char* TensorProcess(clock_t& starttime_1, cv::Mat& iImg, N& blob, std::vector<int64_t>& inputNodeDims,
- std::vector<DL_RESULT>& oResult);
- char* PreProcess(cv::Mat& iImg, std::vector<int> iImgSize, cv::Mat& oImg);
- std::vector<std::string> classes{};
- private:
- Ort::Env env;
- Ort::Session* session;
- bool cudaEnable;
- Ort::RunOptions options;
- std::vector<const char*> inputNodeNames;
- std::vector<const char*> outputNodeNames;
- MODEL_TYPE modelType;
- std::vector<int> imgSize;
- float rectConfidenceThreshold;
- float iouThreshold;
- float resizeScales;//letterbox scale
- };
|