digiKam
Loading...
Searching...
No Matches
dnnfaceextractorbase.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam
4 *
5 * Date : 2019-06-01
6 * Description : Face recognition using deep learning.
7 * The internal DNN library interface.
8 *
9 * SPDX-FileCopyrightText: 2019 by Thanh Trung Dinh <dinhthanhtrung1996 at gmail dot com>
10 * SPDX-FileCopyrightText: 2020-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 * SPDX-FileCopyrightText: 2020 by Nghia Duong <minhnghiaduong997 at gmail dot com>
12 * SPDX-FileCopyrightText: 2024 by Michael Miller <michael underscore miller at msn dot com>
13 *
14 * SPDX-License-Identifier: GPL-2.0-or-later
15 *
16 * ============================================================ */
17
18#pragma once
19
20// C++ includes
21
22#include <vector>
23
24// Qt include
25
26#include <QJsonArray>
27
28// Local includes
29
30#include "digikam_opencv.h"
31#include "digikam_export.h"
32#include "dnnmodelbase.h"
33
34namespace Digikam
35{
36
37class DIGIKAM_GUI_EXPORT DNNFaceExtractorBase
38{
39
40public:
41
43 virtual ~DNNFaceExtractorBase();
44
45public:
46
50 virtual bool loadModels() = 0;
51 virtual cv::Mat alignFace(const cv::Mat& inputImage) const = 0;
52 virtual cv::Mat getFaceEmbedding(const cv::Mat& faceImage) = 0;
53
57 static double cosineDistance(const std::vector<float>& v1, const std::vector<float>& v2);
58 static double L2squareDistance(const std::vector<float>& v1, const std::vector<float>& v2);
59 static double L2squareNormDistance(const std::vector<float>& v1, const std::vector<float>& v2);
60
64 static cv::Mat vectortomat(const std::vector<float>& vector);
65 static QJsonArray encodeVector(const std::vector<float>& vector);
66 static std::vector<float> decodeVector(const QJsonArray& json);
67
68private:
69
72 DNNFaceExtractorBase& operator=(const DNNFaceExtractorBase&) = delete;
73};
74
75} // namespace Digikam
Definition dnnfaceextractorbase.h:38
virtual cv::Mat getFaceEmbedding(const cv::Mat &faceImage)=0
virtual cv::Mat alignFace(const cv::Mat &inputImage) const =0
Definition datefolderview.cpp:34