diff --git a/SerialPrograms/Source/ML/DataLabeling/ML_SegmentAnythingModel.cpp b/SerialPrograms/Source/ML/DataLabeling/ML_SegmentAnythingModel.cpp index 13cf30ba9..702182667 100644 --- a/SerialPrograms/Source/ML/DataLabeling/ML_SegmentAnythingModel.cpp +++ b/SerialPrograms/Source/ML/DataLabeling/ML_SegmentAnythingModel.cpp @@ -25,7 +25,8 @@ namespace ML{ SAMEmbedderSession::SAMEmbedderSession(const std::string& model_path, bool use_gpu) - : m_session_options{create_session_options(ML_MODEL_CACHE_PATH() + "SAMEmbedder/", use_gpu)} + : m_env{create_ORT_env()} + , m_session_options{create_session_options(ML_MODEL_CACHE_PATH() + "SAMEmbedder/", use_gpu)} , session{create_session(m_env, m_session_options, model_path, ML_MODEL_CACHE_PATH() + "SAMEmbedder/")} , memory_info{Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemTypeCPU)} , input_names{session.GetInputNames()} @@ -65,7 +66,8 @@ void SAMEmbedderSession::run(cv::Mat& input_image, std::vector& model_out SAMSession::SAMSession(const std::string& model_path, bool use_gpu) - : m_session_options{create_session_options(ML_MODEL_CACHE_PATH() + "SAM/", use_gpu)} + : m_env{create_ORT_env()} + , m_session_options{create_session_options(ML_MODEL_CACHE_PATH() + "SAM/", use_gpu)} , session{create_session(m_env, m_session_options, model_path, ML_MODEL_CACHE_PATH() + "SAM/")} , memory_info{Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemTypeCPU)} , input_names{session.GetInputNames()} diff --git a/SerialPrograms/Source/ML/Models/ML_ONNXRuntimeHelpers.cpp b/SerialPrograms/Source/ML/Models/ML_ONNXRuntimeHelpers.cpp index 32ab505e6..8cdffd4a5 100644 --- a/SerialPrograms/Source/ML/Models/ML_ONNXRuntimeHelpers.cpp +++ b/SerialPrograms/Source/ML/Models/ML_ONNXRuntimeHelpers.cpp @@ -16,6 +16,7 @@ #include #include #include "3rdParty/ONNX/OnnxToolsPA.h" +#include "Common/Cpp/Exceptions.h" #include "Common/Compiler.h" #include "ML_ONNXRuntimeHelpers.h" @@ -194,5 +195,13 @@ void print_model_input_output_info(const Ort::Session& session){ } } +Ort::Env create_ORT_env(){ + if (Ort::Global::api_ == nullptr){ + throw InternalProgramError(nullptr, PA_CURRENT_FUNCTION, "Onnx API returned a null pointer."); + } + + return Ort::Env(); +} + } } diff --git a/SerialPrograms/Source/ML/Models/ML_ONNXRuntimeHelpers.h b/SerialPrograms/Source/ML/Models/ML_ONNXRuntimeHelpers.h index 22181257d..952f942db 100644 --- a/SerialPrograms/Source/ML/Models/ML_ONNXRuntimeHelpers.h +++ b/SerialPrograms/Source/ML/Models/ML_ONNXRuntimeHelpers.h @@ -54,6 +54,8 @@ std::string to_string(std::vector& vec){ // Print model input and output types and shapes to cout. Useful for debugging. void print_model_input_output_info(const Ort::Session& session); +Ort::Env create_ORT_env(); + } } diff --git a/SerialPrograms/Source/ML/Models/ML_YOLOv5Model.cpp b/SerialPrograms/Source/ML/Models/ML_YOLOv5Model.cpp index 392970442..7f4164ce4 100644 --- a/SerialPrograms/Source/ML/Models/ML_YOLOv5Model.cpp +++ b/SerialPrograms/Source/ML/Models/ML_YOLOv5Model.cpp @@ -60,6 +60,7 @@ std::tuple resize_image_with_border( YOLOv5Session::YOLOv5Session(const std::string& model_path, std::vector label_names, bool use_gpu) : m_label_names(std::move(label_names)) +, m_env{create_ORT_env()} , m_session_options(create_session_options(ML_MODEL_CACHE_PATH() + "YOLOv5", use_gpu)) , m_session{create_session(m_env, m_session_options, model_path, ML_MODEL_CACHE_PATH() + "YOLOv5")} , m_memory_info{Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemTypeCPU)}