digiKam
Loading...
Searching...
No Matches
facedb.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam
4 *
5 * Date : 02-02-2012
6 * Description : Face database interface to train identities.
7 *
8 * SPDX-FileCopyrightText: 2012-2013 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
9 * SPDX-FileCopyrightText: 2010-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2020 by Nghia Duong <minhnghiaduong997 at gmail dot com>
11 * SPDX-FileCopyrightText: 2024 by Michael Miller <michael underscore miller at msn dot com>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// C++ includes
20
21#include <vector>
22
23// Qt includes
24
25#include <QFile>
26#include <QString>
27#include <QStandardPaths>
28
29// Local includes
30
31#include "digikam_config.h"
32#include "digikam_opencv.h"
33#include "identity.h"
34#include "facedbbackend.h"
35#include "facescansettings.h"
36
37namespace Digikam
38{
39
40class KDTreeBase;
41
42class FaceDb
43{
44public:
45
47 ~FaceDb();
48
49 BdEngineBackend::QueryState setSetting(const QString& keyword, const QString& value);
50 QString setting(const QString& keyword) const;
51
55 bool integrityCheck();
56
60 void vacuum();
61
62public:
63
64 // --- Identity management (facedb_identity.cpp)
65
66 int addIdentity() const;
67 int getNumberOfIdentities() const;
68
69 void updateIdentity(const Identity& p);
70 void deleteIdentity(int id);
71 void deleteIdentity(const QString& uuid);
72 void clearIdentities();
73
74 QList<Identity> identities() const;
75 QList<int> identityIds() const;
76
77public:
78
79 // --- OpenCV DNN
80
87 int insertFaceVector(const cv::Mat& faceEmbedding,
88 const int label,
89 const QString& context) const;
90
96 bool removeFaceVector(const QString& hash) const;
97
103 bool removeFaceVector(const int id) const;
104
110
115 cv::Ptr<cv::ml::TrainData> trainData() const;
116
124 bool insertToTreeDb(const int nodeID,
125 const cv::Mat& faceEmbedding) const;
126
138 QMap<double, QVector<int> > getClosestNeighborsTreeDb(const cv::Mat& position,
139 float sqRange,
140 float cosThreshold,
141 int maxNbNeighbors) const;
142
146 void clearTreeDb() const;
147
151 void clearDNNTraining();
152 void clearDNNTraining(const QList<int>& identities);
153
154private:
155
156 void updateRangeTreeDb(int nodeId,
157 cv::Mat& minRange,
158 cv::Mat& maxRange,
159 const cv::Mat& position) const;
160 int findParentTreeDb(const cv::Mat& nodePos,
161 bool& leftChild,
162 int& parentSplitAxis) const;
163
164 class DataNode;
165
176 double getClosestNeighborsTreeDb(const DataNode& subTree,
177 QMap<double, QVector<int> >& neighborList,
178 const cv::Mat& position,
179 float sqRange,
180 float cosThreshold,
181 int maxNbNeighbors) const;
182
183private:
184
185 // Disable
186 FaceDb(const FaceDb&) = delete;
187 FaceDb& operator=(const FaceDb&) = delete;
188
189private:
190
191 class Private;
192 Private* const d = nullptr;
193};
194
195} // namespace Digikam
Definition dbenginebackend.h:154
Definition facedbbackend.h:30
Definition facedb_p.h:35
Definition facedb.h:43
void vacuum()
Definition facedb.cpp:134
bool insertToTreeDb(const int nodeID, const cv::Mat &faceEmbedding) const
insertToTreeDb: insert a new node to spatial database.
Definition facedb_dnn_spatial.cpp:50
KDTreeBase * reconstructTree(FaceScanSettings::FaceRecognitionModel recModel)
reconstructTree: reconstruct KD-Tree from data in the database.
Definition facedb_dnn.cpp:79
QMap< double, QVector< int > > getClosestNeighborsTreeDb(const cv::Mat &position, float sqRange, float cosThreshold, int maxNbNeighbors) const
getClosestNeighborsTreeDb: return a list of closest neighbor, limited by maxNbNeighbors and sqRange.
Definition facedb_dnn_spatial.cpp:106
void deleteIdentity(int id)
Definition facedb_identity.cpp:45
void updateIdentity(const Identity &p)
Definition facedb_identity.cpp:30
int getNumberOfIdentities() const
Definition facedb_identity.cpp:124
BdEngineBackend::QueryState setSetting(const QString &keyword, const QString &value)
Definition facedb.cpp:34
void clearIdentities()
Definition facedb_identity.cpp:72
void clearTreeDb() const
clearTreeDb: clear the KD-Tree from data in the database.
Definition facedb_dnn_spatial.cpp:146
int insertFaceVector(const cv::Mat &faceEmbedding, const int label, const QString &context) const
insertFaceVector: insert a new face embedding to database.
Definition facedb_dnn.cpp:28
QString setting(const QString &keyword) const
Definition facedb.cpp:43
bool removeFaceVector(const QString &hash) const
removeFaceVector: remove a face embedding from the database.
Definition facedb_dnn.cpp:68
~FaceDb()
Definition facedb.cpp:29
cv::Ptr< cv::ml::TrainData > trainData() const
trainData: extract train data from database.
Definition facedb_dnn.cpp:126
int addIdentity() const
Definition facedb_identity.cpp:21
bool integrityCheck()
Definition facedb.cpp:66
QList< Identity > identities() const
Definition facedb_identity.cpp:77
QList< int > identityIds() const
Definition facedb_identity.cpp:108
void clearDNNTraining()
clearDNNTraining: clear all trained data in the database.
Definition facedb_dnn.cpp:141
FaceRecognitionModel
Definition facescansettings.h:89
Definition identity.h:31
Definition kd_treebase.h:44
qulonglong value
Definition itemviewutilities.cpp:585
Definition datefolderview.cpp:34