Fix mixed UTF16 issue (LabVIEW) and fix ANSFR for Intel
This commit is contained in:
@@ -372,6 +372,7 @@ namespace ANSCENTER {
|
||||
|
||||
bool ANSFacialRecognition::LoadEngine() {
|
||||
try {
|
||||
ANS_DBG("ANSFR", "LoadEngine: starting");
|
||||
// Unload existing engine (handles its own locking)
|
||||
UnloadEngine();
|
||||
|
||||
@@ -379,17 +380,23 @@ namespace ANSCENTER {
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(_configMutex);
|
||||
|
||||
ANS_DBG("ANSFR", "LoadEngine: InitializeDetector...");
|
||||
if (!InitializeDetector()) {
|
||||
LogThreadSafe("ANSFacialRecognition::LoadEngine",
|
||||
"Failed to initialize detector");
|
||||
ANS_DBG("ANSFR", "LoadEngine: InitializeDetector FAILED");
|
||||
return false;
|
||||
}
|
||||
ANS_DBG("ANSFR", "LoadEngine: InitializeDetector OK");
|
||||
|
||||
ANS_DBG("ANSFR", "LoadEngine: InitializeRecognizer...");
|
||||
if (!InitializeRecognizer()) {
|
||||
LogThreadSafe("ANSFacialRecognition::LoadEngine",
|
||||
"Failed to initialize recognizer");
|
||||
ANS_DBG("ANSFR", "LoadEngine: InitializeRecognizer FAILED");
|
||||
return false;
|
||||
}
|
||||
ANS_DBG("ANSFR", "LoadEngine: InitializeRecognizer OK");
|
||||
|
||||
_recognizerModelFolder = _recognizer->GetModelFolder();
|
||||
}
|
||||
@@ -402,7 +409,9 @@ namespace ANSCENTER {
|
||||
}
|
||||
|
||||
// Configure device
|
||||
ANS_DBG("ANSFR", "LoadEngine: getting OpenVINO device...");
|
||||
std::string deviceName = GetOpenVINODevice();
|
||||
ANS_DBG("ANSFR", "LoadEngine: OpenVINO device=%s", deviceName.c_str());
|
||||
|
||||
if (deviceName == "NPU") {
|
||||
// Configure NPU with GPU fallback
|
||||
@@ -795,6 +804,7 @@ namespace ANSCENTER {
|
||||
}
|
||||
bool ANSFacialRecognition::InitializeRecognizer() {
|
||||
try {
|
||||
ANS_DBG("ANSFR", "InitializeRecognizer: starting, modelPath=%s", _recognizerFilePath.c_str());
|
||||
// Create recognizer instance
|
||||
_recognizer = std::make_unique<ANSFaceRecognizer>();
|
||||
_recognizer->SetMaxSlotsPerGpu(m_maxSlotsPerGpu);
|
||||
@@ -810,6 +820,9 @@ namespace ANSCENTER {
|
||||
recognizerConfig.modelConfThreshold = 0.48f;
|
||||
recognizerConfig.unknownPersonThreshold = _config._knownPersonThreshold;
|
||||
|
||||
ANS_DBG("ANSFR", "InitializeRecognizer: knownPersonThreshold=%.3f NMS=%.3f bbox=%.3f",
|
||||
_config._knownPersonThreshold, _config._detThresholdNMS, _config._detThresholdBbox);
|
||||
|
||||
// LOCK DURING INITIALIZATION
|
||||
std::string labelMap;
|
||||
bool initSuccess;
|
||||
@@ -817,6 +830,7 @@ namespace ANSCENTER {
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(_recognitionMutex);
|
||||
|
||||
ANS_DBG("ANSFR", "InitializeRecognizer: calling _recognizer->Initialize...");
|
||||
initSuccess = _recognizer->Initialize(
|
||||
_licenseKey,
|
||||
recognizerConfig,
|
||||
@@ -829,12 +843,15 @@ namespace ANSCENTER {
|
||||
if (!initSuccess) {
|
||||
LogThreadSafe("ANSFacialRecognition::InitializeRecognizer",
|
||||
"Failed to initialize recognizer - check file path: " + _recognizerFilePath);
|
||||
ANS_DBG("ANSFR", "InitializeRecognizer: FAILED - path=%s", _recognizerFilePath.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
ANS_DBG("ANSFR", "InitializeRecognizer: SUCCESS");
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception& e) {
|
||||
ANS_DBG("ANSFR", "InitializeRecognizer EXCEPTION: %s", e.what());
|
||||
LogThreadSafe("ANSFacialRecognition::InitializeRecognizer",
|
||||
"Failed to initialize: " + std::string(e.what()));
|
||||
return false;
|
||||
@@ -2674,13 +2691,19 @@ namespace ANSCENTER {
|
||||
std::string ANSFacialRecognition::GetOpenVINODevice() {
|
||||
ov::Core core;
|
||||
std::vector<std::string> available_devices = core.get_available_devices();
|
||||
ANS_DBG("ANSFR", "GetOpenVINODevice: %zu devices available", available_devices.size());
|
||||
for (const auto& d : available_devices) {
|
||||
ANS_DBG("ANSFR", " OpenVINO device: %s", d.c_str());
|
||||
}
|
||||
// Prioritize devices: NPU > GPU > CPU
|
||||
std::vector<std::string> priority_devices = { "NPU","GPU","CPU" };
|
||||
for (const auto& device : priority_devices) {
|
||||
if (std::find(available_devices.begin(), available_devices.end(), device) != available_devices.end()) {
|
||||
ANS_DBG("ANSFR", "GetOpenVINODevice: selected %s", device.c_str());
|
||||
return device; // Return the first available device based on priority
|
||||
}
|
||||
}
|
||||
ANS_DBG("ANSFR", "GetOpenVINODevice: fallback to CPU");
|
||||
return "CPU";
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user