Improve ANSCV
This commit is contained in:
@@ -28,8 +28,11 @@ bool RTOCRRecognizer::Initialize(const std::string& onnxPath, const std::string&
|
||||
ANSCENTER::Options options;
|
||||
options.deviceIndex = gpuId;
|
||||
options.precision = ANSCENTER::Precision::FP16;
|
||||
options.maxBatchSize = 1;
|
||||
options.optBatchSize = 1;
|
||||
// maxBatch=4 matches FaceRecognizer / ALPR configuration — allows the
|
||||
// recognizer to process up to 4 detected text lines in one call,
|
||||
// amortizing per-invocation overhead while keeping TRT workspace small.
|
||||
options.maxBatchSize = 4;
|
||||
options.optBatchSize = 4;
|
||||
|
||||
// Fixed height, dynamic width for recognition
|
||||
options.minInputHeight = imgH_;
|
||||
|
||||
@@ -185,11 +185,22 @@ extern "C" ANSOCR_API int CreateANSOCRHandleEx(ANSCENTER::ANSOCRBase** Handle,
|
||||
ANSCENTER::ANSLibsLoader::Initialize();
|
||||
ANSCENTER::EngineType engineType = ANSCENTER::ANSLicenseHelper::CheckHardwareInformation();
|
||||
{
|
||||
// Describe the backend the engine-selector below will actually choose
|
||||
// for this (hardware, engineMode) combination. Previous versions of
|
||||
// this log claimed "TensorRT OCR enabled" based on hardware alone,
|
||||
// which was misleading because engineMode=0 (auto) unconditionally
|
||||
// picked ONNX — users saw the log and assumed TRT was running.
|
||||
const bool isNvidia = (engineType == ANSCENTER::EngineType::NVIDIA_GPU);
|
||||
const bool willUseTRT =
|
||||
isNvidia && (engineMode == 0 /* auto → TRT on NVIDIA */ ||
|
||||
engineMode == 1 /* GPU → TRT on NVIDIA */);
|
||||
const char* vendorTag =
|
||||
engineType == ANSCENTER::EngineType::NVIDIA_GPU ? "NVIDIA_GPU (TensorRT OCR enabled)" :
|
||||
engineType == ANSCENTER::EngineType::AMD_GPU ? "AMD_GPU (ONNX Runtime / DirectML, TensorRT OCR DISABLED)" :
|
||||
engineType == ANSCENTER::EngineType::OPENVINO_GPU ? "OPENVINO_GPU (ONNX Runtime / OpenVINO, TensorRT OCR DISABLED)" :
|
||||
"CPU (ONNX Runtime, TensorRT OCR DISABLED)";
|
||||
engineType == ANSCENTER::EngineType::NVIDIA_GPU
|
||||
? (willUseTRT ? "NVIDIA_GPU (TensorRT OCR active)"
|
||||
: "NVIDIA_GPU (TensorRT available, but engineMode forces ONNX)")
|
||||
: engineType == ANSCENTER::EngineType::AMD_GPU ? "AMD_GPU (ONNX Runtime / DirectML, TensorRT OCR unavailable)"
|
||||
: engineType == ANSCENTER::EngineType::OPENVINO_GPU ? "OPENVINO_GPU (ONNX Runtime / OpenVINO, TensorRT OCR unavailable)"
|
||||
: "CPU (ONNX Runtime, TensorRT OCR unavailable)";
|
||||
char buf[192];
|
||||
snprintf(buf, sizeof(buf),
|
||||
"[ANSOCR] CreateANSOCRHandleEx: detected engineType=%d [%s], engineMode=%d\n",
|
||||
@@ -230,10 +241,23 @@ extern "C" ANSOCR_API int CreateANSOCRHandleEx(ANSCENTER::ANSOCRBase** Handle,
|
||||
// select, including DirectML for AMD).
|
||||
const bool isNvidia = (engineType == ANSCENTER::EngineType::NVIDIA_GPU);
|
||||
switch (engineMode) {
|
||||
case 0:// Auto-detect, always use ONNX for better compatibility, especially on AMD GPUs and high-res images
|
||||
(*Handle) = new ANSCENTER::ANSONNXOCR();
|
||||
case 0: // Auto-detect — prefer TensorRT on NVIDIA, ONNX elsewhere.
|
||||
// Previous policy was "always ONNX" for cross-platform safety,
|
||||
// but on NVIDIA that defeated the point: each ANSONNXOCR handle
|
||||
// allocates its own cls/dec/rec OrtSessions (no dedupe), which
|
||||
// wasted ~300–600 MB VRAM per extra instance and ran ~2× slower
|
||||
// than ANSRTOCR's shared-engine path via EnginePoolManager.
|
||||
if (isNvidia) {
|
||||
limitSideLen = 960;
|
||||
(*Handle) = new ANSCENTER::ANSRTOCR();
|
||||
} else {
|
||||
// AMD / Intel / CPU — ANSRTOCR hard-requires CUDA and would
|
||||
// crash. ANSONNXOCR auto-picks the correct ORT EP
|
||||
// (DirectML on AMD, OpenVINO on Intel, CPU otherwise).
|
||||
(*Handle) = new ANSCENTER::ANSONNXOCR();
|
||||
}
|
||||
break;
|
||||
case 1:// GPU — use TensorRT engine ONLY on NVIDIA hardware.
|
||||
case 1: // GPU — use TensorRT engine ONLY on NVIDIA hardware.
|
||||
if (isNvidia) {
|
||||
limitSideLen = 960;
|
||||
(*Handle) = new ANSCENTER::ANSRTOCR();
|
||||
@@ -244,7 +268,7 @@ extern "C" ANSOCR_API int CreateANSOCRHandleEx(ANSCENTER::ANSOCRBase** Handle,
|
||||
(*Handle) = new ANSCENTER::ANSONNXOCR();
|
||||
}
|
||||
break;
|
||||
case 2:// CPU
|
||||
case 2: // CPU
|
||||
(*Handle) = new ANSCENTER::ANSONNXOCR();
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user