78 lines
1.6 KiB
C++
78 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <array>
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "frame/frame.h"
|
|
|
|
namespace rk3588 {
|
|
|
|
enum class FaceRecogState {
|
|
Uncertain,
|
|
Known,
|
|
};
|
|
|
|
inline const char* FaceRecogStateName(FaceRecogState state) {
|
|
switch (state) {
|
|
case FaceRecogState::Known:
|
|
return "known";
|
|
case FaceRecogState::Uncertain:
|
|
default:
|
|
return "uncertain";
|
|
}
|
|
}
|
|
|
|
inline bool FaceRecogStateIsKnown(FaceRecogState state) {
|
|
return state == FaceRecogState::Known;
|
|
}
|
|
|
|
struct Point2f {
|
|
float x = 0.0f;
|
|
float y = 0.0f;
|
|
};
|
|
|
|
struct FaceDetItem {
|
|
Rect bbox{}; // x,y,w,h in image coordinates
|
|
float score = 0.0f;
|
|
bool has_landmarks = false;
|
|
std::array<Point2f, 5> landmarks{}; // left_eye, right_eye, nose, left_mouth, right_mouth
|
|
int track_id = -1;
|
|
};
|
|
|
|
struct FaceDetResult {
|
|
std::vector<FaceDetItem> faces;
|
|
int img_w = 0;
|
|
int img_h = 0;
|
|
std::string model_name;
|
|
};
|
|
|
|
struct FaceRecogItem {
|
|
Rect bbox{};
|
|
int person_track_id = -1;
|
|
FaceRecogState state = FaceRecogState::Uncertain;
|
|
|
|
int best_person_id = -1;
|
|
std::string best_name;
|
|
float best_sim = 0.0f;
|
|
float second_sim = 0.0f;
|
|
int candidate_person_id = -1;
|
|
std::string candidate_name;
|
|
|
|
bool has_landmarks = false;
|
|
std::array<Point2f, 5> landmarks{};
|
|
|
|
// Optional; filled only when emit_embedding=true.
|
|
std::vector<float> embedding;
|
|
};
|
|
|
|
struct FaceRecogResult {
|
|
std::vector<FaceRecogItem> items;
|
|
int img_w = 0;
|
|
int img_h = 0;
|
|
std::string model_name;
|
|
};
|
|
|
|
} // namespace rk3588
|