仓库结构: edge/ 设备端(原根目录设备端代码整体移入) control/ 管理端(清理后) docs/ 文档(PRD 移入 design/) README.md 根导航(新增) 清理: - control/.brainstorm 临时草稿删除 - control 根级重复文档(API表/PRD_04)并入 docs/design/ - control/plan.md -> docs/implementation/control-plan.md - control/safesightd-linux-arm64 二进制取消版本控制(.gitignore) - edge/transform 模型转换产物归入 models/,onnx/pt 大源文件取消跟踪(.gitignore) - Readme.md(PRD) -> docs/design/PRD_Product_v1.2.md(避开 README 大小写冲突) 更新: - 根 README.md 导航、docs/README.md 文档索引 - deployment.md/检查表路径加 edge/ 前缀 - .gitignore 重写(edge/control 分区规则)
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
|