OrangePi3588Media/include/face/face_recog_debug.h

70 lines
2.4 KiB
C++

#pragma once
#include <algorithm>
#include <cmath>
#include <cstdint>
#include <iomanip>
#include <sstream>
#include <string>
#include "face/face_result.h"
#include "utils/simple_json.h"
namespace rk3588 {
struct FaceRecogDebugConfig {
bool enabled = false;
bool log_matches = false;
int min_log_interval_ms = 2000;
};
inline FaceRecogDebugConfig ParseFaceRecogDebugConfig(
const SimpleJson& cfg, const FaceRecogDebugConfig& base = {}) {
FaceRecogDebugConfig out = base;
const SimpleJson* debug = cfg.Find("debug");
if (!debug || !debug->IsObject()) return out;
out.enabled = debug->ValueOr<bool>("enabled", out.enabled);
out.log_matches = debug->ValueOr<bool>("log_matches", out.log_matches);
out.min_log_interval_ms = std::max(0, debug->ValueOr<int>("min_log_interval_ms", out.min_log_interval_ms));
return out;
}
inline std::string BuildFaceRecogDebugSummaryLine(
const std::string& node_id, uint64_t frame_id, const FaceRecogItem& item) {
const float sim_margin = item.best_sim - item.second_sim;
const std::string candidate = item.candidate_name.empty() ? "n/a" : item.candidate_name;
const std::string status = FaceRecogStateName(item.state);
std::ostringstream oss;
oss << "[ai_face_recog] match"
<< " id=" << node_id
<< " frame=" << frame_id
<< " status=" << status
<< " person_track_id=" << item.person_track_id
<< " candidate=" << candidate
<< " candidate_id=" << item.candidate_person_id
<< " best_sim=" << std::fixed << std::setprecision(2) << item.best_sim
<< " second_sim=" << std::fixed << std::setprecision(2) << item.second_sim
<< " sim_margin=" << std::fixed << std::setprecision(2) << sim_margin
<< " bbox=(" << static_cast<int>(std::lround(item.bbox.x))
<< "," << static_cast<int>(std::lround(item.bbox.y))
<< "," << static_cast<int>(std::lround(item.bbox.w))
<< "," << static_cast<int>(std::lround(item.bbox.h))
<< ")";
return oss.str();
}
inline std::string BuildFaceRecogDebugFrameLine(
const std::string& node_id, uint64_t frame_id, size_t faces_in, size_t recog_items) {
std::ostringstream oss;
oss << "[ai_face_recog] frame"
<< " id=" << node_id
<< " frame=" << frame_id
<< " faces_in=" << faces_in
<< " recog_items=" << recog_items;
return oss.str();
}
} // namespace rk3588