64 lines
2.0 KiB
C++
64 lines
2.0 KiB
C++
// Copyright (C) 2018-2024 Intel Corporation
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <opencv2/core/core.hpp>
|
|
|
|
#include "cnn.hpp"
|
|
#include "detector.hpp"
|
|
|
|
enum class RegistrationStatus {
|
|
SUCCESS,
|
|
FAILURE_LOW_QUALITY,
|
|
FAILURE_NOT_DETECTED,
|
|
};
|
|
|
|
struct GalleryObject {
|
|
std::vector<cv::Mat> embeddings;
|
|
std::string label;
|
|
int id;
|
|
|
|
GalleryObject(const std::vector<cv::Mat>& embeddings,
|
|
const std::string& label, int id) :
|
|
embeddings(embeddings), label(label), id(id) {}
|
|
};
|
|
|
|
class EmbeddingsGallery {
|
|
public:
|
|
static const char unknown_label[];
|
|
static const int unknown_id;
|
|
EmbeddingsGallery(const std::string& ids_list, double threshold, int min_size_fr,
|
|
bool crop_gallery, const detection::DetectorConfig& detector_config,
|
|
VectorCNN& landmarks_det,
|
|
VectorCNN& image_reid,
|
|
bool use_greedy_matcher=false);
|
|
size_t size() const;
|
|
std::vector<int> GetIDsByEmbeddings(const std::vector<cv::Mat>& embeddings) const;
|
|
std::string GetLabelByID(int id) const;
|
|
std::vector<std::string> GetIDToLabelMap() const;
|
|
bool LabelExists(const std::string& label) const;
|
|
|
|
private:
|
|
RegistrationStatus RegisterIdentity(const std::string& identity_label,
|
|
const cv::Mat& image,
|
|
int min_size_fr,
|
|
bool crop_gallery,
|
|
detection::FaceDetection& detector,
|
|
VectorCNN& landmarks_det,
|
|
VectorCNN& image_reid,
|
|
cv::Mat& embedding);
|
|
std::vector<int> idx_to_id;
|
|
double reid_threshold;
|
|
std::vector<GalleryObject> identities;
|
|
bool use_greedy_matcher;
|
|
};
|
|
|
|
void AlignFaces(std::vector<cv::Mat>* face_images,
|
|
std::vector<cv::Mat>* landmarks_vec);
|