Refactor project structure
This commit is contained in:
53
modules/ANSFR/FaceDatabase.h
Normal file
53
modules/ANSFR/FaceDatabase.h
Normal file
@@ -0,0 +1,53 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user