From 1962f75a47bb40ea4fb9eedfeedfc67e9c2dee33 Mon Sep 17 00:00:00 2001 From: Admin Date: Thu, 16 Jul 2026 22:29:13 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20ONNX=20Runtime=20API=20=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=20-=20=E6=B7=BB=E5=8A=A0=20OrtEnv=20=E7=8E=AF?= =?UTF-8?q?=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/onnx/onnx.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/pkg/onnx/onnx.cpp b/pkg/onnx/onnx.cpp index 692782e..dfc9420 100644 --- a/pkg/onnx/onnx.cpp +++ b/pkg/onnx/onnx.cpp @@ -6,15 +6,27 @@ #include static const OrtApi* g_ort = nullptr; +static OrtEnv* g_env = nullptr; static std::string last_error; // 初始化 ONNX Runtime extern "C" int onnx_init() { + if (g_ort) return 0; // 已初始化 + g_ort = OrtGetApiBase()->GetApi(ORT_API_VERSION); if (!g_ort) { last_error = "Failed to get ONNX Runtime API"; return -1; } + + // 创建环境 + OrtStatus* status = g_ort->CreateEnv(ORT_LOGGING_LEVEL_WARNING, "anticaptcha", &g_env); + if (status) { + last_error = g_ort->GetErrorMessage(status); + g_ort->ReleaseStatus(status); + return -1; + } + return 0; } @@ -34,6 +46,10 @@ extern "C" OnnxSession* onnx_create_session(const char* model_path) { if (!g_ort) { onnx_init(); } + if (!g_env) { + last_error = "ONNX Runtime environment not initialized"; + return nullptr; + } auto* sess = new OnnxSession(); @@ -48,7 +64,7 @@ extern "C" OnnxSession* onnx_create_session(const char* model_path) { // 设置 CPU 线程数 g_ort->SetIntraOpNumThreads(sess->session_options, 4); - g_ort->SetSessionGraphOptimizationLevel(sess->session_options, GraphOptimizationLevel::ORT_ENABLE_EXTENDED); + g_ort->SetSessionGraphOptimizationLevel(sess->session_options, ORT_ENABLE_EXTENDED); // 创建 memory info status = g_ort->CreateCpuMemoryInfo(OrtArenaAllocator, OrtMemTypeDefault, &sess->memory_info); @@ -60,8 +76,8 @@ extern "C" OnnxSession* onnx_create_session(const char* model_path) { return nullptr; } - // 创建 session - status = g_ort->CreateSession(model_path, sess->session_options, &sess->session); + // 创建 session (需要 env) + status = g_ort->CreateSession(g_env, model_path, sess->session_options, &sess->session); if (status) { last_error = g_ort->GetErrorMessage(status); g_ort->ReleaseStatus(status);