/* * SmartCrop - A tool for content aware croping of images
* Copyright (C) 2024 Carl Philipp Klemm
*
* This file is part of SmartCrop.
*
* SmartCrop is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* SmartCrop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with SmartCrop. If not, see .
*/
#pragma once
#include
#include
#include
#include
#include
#include
#include
class FaceRecognizer
{
public:
struct Detection
{
int person;
float confidence;
cv::Rect rect;
};
class LoadException : public std::exception
{
private:
std::string message;
public:
LoadException(const std::string& msg): std::exception(), message(msg) {}
virtual const char* what() const throw() override
{
return message.c_str();
}
};
private:
std::vector referanceFeatures;
std::shared_ptr recognizer;
std::shared_ptr detector;
double threshold = 0.363;
public:
FaceRecognizer(std::filesystem::path recognizerPath = "", const std::filesystem::path& detectorPath = "", const std::vector& referances = std::vector());
cv::Mat detectFaces(const cv::Mat& input);
Detection isMatch(const cv::Mat& input, bool alone = false);
bool addReferances(const std::vector& referances);
void setThreshold(double threashold);
double getThreshold();
void clearReferances();
};