53 lines
2.2 KiB
C++
53 lines
2.2 KiB
C++
#ifndef FACEDATABASE_H
|
|
#define FACEDATABASE_H
|
|
#pragma once
|
|
#include <iostream>
|
|
#include <map>
|
|
//#include "ARCFaceRT.h"
|
|
#include "sqlite3.h"
|
|
#include <vector>
|
|
#include "ANSFRCommon.h"
|
|
|
|
namespace ANSCENTER {
|
|
// Structured embedding record for double-buffer reload
|
|
struct FaceEmbeddingRecord {
|
|
int faceId; // FACE.ID (unique per face)
|
|
std::string userId; // FACE.USER (= USER.ID, as string)
|
|
std::vector<float> embedding;
|
|
};
|
|
|
|
class FaceDatabase {
|
|
public:
|
|
FaceDatabase();
|
|
~FaceDatabase();
|
|
bool Destroy();
|
|
bool Initialize(std::string path, int embeddingDim, std::string dataFolder);
|
|
int InsertUser(std::string code, std::string userName);
|
|
int UpdateUser(int UserId, std::string newUserCode, std::string newUserName);
|
|
int InsertFace(int userId, std::string imgPath, float embedding[]);
|
|
int DeleteFace(int id);
|
|
int DeleteUser(int UserId);
|
|
int GetFaceIdsByUser(int userId, std::vector<int>& faceIds);
|
|
int GetUserId(std::string code);
|
|
int GetUser(int userId, std::string& code, std::string& userName);
|
|
int GetUsers(std::vector<int>& ids, std::vector<std::string>& codes, std::vector<std::string>& userNames);
|
|
// Fix #12: Batch query — returns users with their face IDs in a single query
|
|
int GetUsersWithFaceIds(std::vector<int>& ids, std::vector<std::string>& codes,
|
|
std::vector<std::string>& userNames, std::vector<std::vector<int>>& faceIdsByUser);
|
|
int GetFaceById(int faceId, int& userId, std::string& imagePath);
|
|
std::map<std::string, std::string> GetUserDict();
|
|
int GetEmbeddings(ANSFRBase& recognizer);
|
|
int GetEmbeddings(std::unique_ptr<ANSFRBase>& recognizer);
|
|
// Returns all face embedding records (FACE.ID + USER.ID + embedding) for double-buffer reload
|
|
int GetAllEmbeddingRecords(std::vector<FaceEmbeddingRecord>& records);
|
|
private:
|
|
sqlite3* m_db;
|
|
int m_embedding_dim;
|
|
std::string _dataFolder;
|
|
std::mutex _mutex;
|
|
// Fix #10: Logger for database operations
|
|
ANSCENTER::SPDLogger& _logger = ANSCENTER::SPDLogger::GetInstance("FaceDB");
|
|
int GetNumEmbeddings();
|
|
};
|
|
}
|
|
#endif |