add dll version and its usage
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
#include "pch.h"
|
||||
#include "OCRToolBox.h"
|
||||
#include "OCRConfig.h"
|
||||
|
||||
bool uns::OCRToolBox::CheckFile(const std::wstring& file)
|
||||
{
|
||||
namespace fs = std::filesystem;
|
||||
try
|
||||
{
|
||||
if (file.empty())
|
||||
return false;
|
||||
if (!fs::exists(file))
|
||||
return false;
|
||||
if (!fs::is_regular_file(file))
|
||||
return false;
|
||||
auto perms = fs::status(file).permissions();
|
||||
return ((perms & fs::perms::owner_read) != fs::perms::none && (perms & fs::perms::owner_write) != fs::perms::none);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void uns::OCRToolBox::InitOrtSessionOptions(Ort::SessionOptions& se_opt)
|
||||
{
|
||||
se_opt.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL);
|
||||
se_opt.EnableCpuMemArena(); // 启用内存池
|
||||
se_opt.EnableMemPattern(); // 启用内存模式优化
|
||||
}
|
||||
|
||||
bool uns::OCRToolBox::AutoSelectEP(const OrtApi* ort, Ort::SessionOptions& se_opt, bool& fallback_to_cpu)
|
||||
{
|
||||
fallback_to_cpu = false;
|
||||
if (G_OCRConfig.GetGPUUsage() == easyocr::GPUUsage::CPUOnly)
|
||||
return true;
|
||||
try
|
||||
{
|
||||
OrtStatusPtr status = OrtSessionOptionsAppendExecutionProvider_CUDA(se_opt, 0);
|
||||
if (status)
|
||||
{
|
||||
ort->ReleaseStatus(status);
|
||||
if (G_OCRConfig.GetGPUUsage() == easyocr::GPUUsage::ForceGPU)
|
||||
return false;
|
||||
se_opt = Ort::SessionOptions(); //Reset Session Options (Fallback to CPU)
|
||||
fallback_to_cpu = true;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return true; //GPU Enable Successful
|
||||
}
|
||||
catch (const Ort::Exception&)
|
||||
{
|
||||
se_opt = Ort::SessionOptions(); //Reset Session Options (Fallback to CPU)
|
||||
fallback_to_cpu = true;
|
||||
return true;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void uns::OCRToolBox::GetInputOutputNames(Ort::Session* ort_session, IONames& input_names, IONamesStorage& input_ns, IONames& output_names, IONamesStorage& output_ns)
|
||||
{
|
||||
input_ns.clear();
|
||||
output_ns.clear();
|
||||
input_names.clear();
|
||||
output_names.clear();
|
||||
|
||||
if (ort_session == nullptr)
|
||||
return;
|
||||
|
||||
auto input_name_alloc = ort_session->GetInputNameAllocated(0, Ort::AllocatorWithDefaultOptions());
|
||||
std::string input_name = input_name_alloc.get();
|
||||
input_ns = { input_name };
|
||||
for (auto& name : input_ns)
|
||||
input_names.push_back(name.c_str());
|
||||
|
||||
auto output_name_alloc = ort_session->GetOutputNameAllocated(0, Ort::AllocatorWithDefaultOptions());
|
||||
std::string output_name = output_name_alloc.get();
|
||||
output_ns = { output_name };
|
||||
for (auto& name : output_ns)
|
||||
output_names.push_back(name.c_str());
|
||||
}
|
||||
Reference in New Issue
Block a user