• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • graphics API Reference
  • KDE Home
  • Contact Us
 

digikam

  • extragear
  • graphics
  • digikam
  • core
  • libs
  • facesengine
  • recognition
recognitiondatabase_p.h
Go to the documentation of this file.
1 /* ============================================================
2  *
3  * This file is a part of digiKam
4  *
5  * Date : 2010-06-16
6  * Description : The recognition database wrapper
7  *
8  * Copyright (C) 2010 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
9  * Copyright (C) 2010 by Aditya Bhatt <adityabhatt1991 at gmail dot com>
10  * Copyright (C) 2010-2019 by Gilles Caulier <caulier dot gilles at gmail dot com>
11  * Copyright (C) 2019 by Thanh Trung Dinh <dinhthanhtrung1996 at gmail dot com>
12  *
13  * This program is free software; you can redistribute it
14  * and/or modify it under the terms of the GNU General
15  * Public License as published by the Free Software Foundation;
16  * either version 2, or (at your option)
17  * any later version.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22  * GNU General Public License for more details.
23  *
24  * ============================================================ */
25 
26 #ifndef DIGIKAM_FACESENGINE_RECOGNITION_DATABASE_P_H
27 #define DIGIKAM_FACESENGINE_RECOGNITION_DATABASE_P_H
28 
29 #include "recognitiondatabase.h"
30 
31 // Qt includes
32 
33 #include <QMutex>
34 #include <QMutexLocker>
35 #include <QUuid>
36 #include <QDir>
37 #include <QStandardPaths>
38 
39 // Local includes
40 
41 #include "digikam_config.h"
42 #include "digikam_debug.h"
43 #include "opencvfisherfacerecognizer.h"
44 #include "opencveigenfacerecognizer.h"
45 #include "opencvlbphfacerecognizer.h"
46 #include "opencvdnnfacerecognizer.h"
47 #include "recognitiontrainingprovider.h"
48 #include "coredbaccess.h"
49 #include "dbengineparameters.h"
50 #include "facedbaccess.h"
51 #include "facedboperationgroup.h"
52 #include "facedb.h"
53 #include "funnelreal.h"
54 #include "dataproviders.h"
55 
56 namespace Digikam
57 {
58 
59 class Q_DECL_HIDDEN RecognitionDatabase::Private
60 {
61 public:
62 
63  bool dbAvailable;
64  mutable QMutex mutex;
65  QVariantMap parameters;
66  QHash<int, Identity> identityCache;
67  RecognitionDatabase::RecognizeAlgorithm recognizeAlgorithm;
68 
69 public:
70 
71  explicit Private();
72  ~Private();
73 
74 public:
75 
76  template <class T>
77  T* getObjectOrCreate(T* &ptr) const
78  {
79  QMutexLocker lock(&mutex);
80 
81  if (!ptr)
82  {
83  qCDebug(DIGIKAM_FACESENGINE_LOG) << "create recognizer";
84  ptr = new T();
85  }
86 
87  return ptr;
88  }
89 
90 public:
91 
92  OpenCVLBPHFaceRecognizer* lbph() { return getObjectOrCreate(opencvlbph); }
93  OpenCVLBPHFaceRecognizer* lbphConst() const { return opencvlbph; }
94 
95  OpenCVEIGENFaceRecognizer* eigen() { return getObjectOrCreate(opencveigen); }
96  OpenCVEIGENFaceRecognizer* eigenConst() const { return opencveigen; }
97 
98  OpenCVFISHERFaceRecognizer* fisher() { return getObjectOrCreate(opencvfisher); }
99  OpenCVFISHERFaceRecognizer* fisherConst() const { return opencvfisher; }
100 
101  OpenCVDNNFaceRecognizer* dnn() { return getObjectOrCreate(opencvdnn); }
102  OpenCVDNNFaceRecognizer* dnnConst() const { return opencvdnn; }
103  void createDNNDebug() { opencvdnn = new OpenCVDNNFaceRecognizer(true); }
104 
105  FunnelReal* aligner() { return getObjectOrCreate(funnel); }
106  FunnelReal* alignerConst() const { return funnel; }
107 
108 public:
109 
110  cv::Mat preprocessingChain(const QImage& image);
111  cv::Mat preprocessingChainRGB(const QImage& image);
112 
113 public:
114 
115  // --- Backend parameters (recognitiondatabase_backend.cpp) --------------------------
116 
117  void applyParameters();
118 
119 public:
120 
121  // --- Faces Training management (recognitiondatabase_training.cpp) ----------------------------------
122 
123  void train(OpenCVLBPHFaceRecognizer* const r,
124  const QList<Identity>& identitiesToBeTrained,
125  TrainingDataProvider* const data,
126  const QString& trainingContext);
127 
128  void train(OpenCVEIGENFaceRecognizer* const r,
129  const QList<Identity>& identitiesToBeTrained,
130  TrainingDataProvider* const data,
131  const QString& trainingContext);
132 
133  void train(OpenCVFISHERFaceRecognizer* const r,
134  const QList<Identity>& identitiesToBeTrained,
135  TrainingDataProvider* const data,
136  const QString& trainingContext);
137 
138  void train(OpenCVDNNFaceRecognizer* const r,
139  const QList<Identity>& identitiesToBeTrained,
140  TrainingDataProvider* const data,
141  const QString& trainingContext);
142 
143 public:
144 
145  // --- Recognition management (recognitiondatabase_recognize.cpp) ------------------------------------
146 
147  void clear(OpenCVLBPHFaceRecognizer* const,
148  const QList<int>& idsToClear,
149  const QString& trainingContext);
150 
151  void clear(OpenCVEIGENFaceRecognizer* const,
152  const QList<int>& idsToClear,
153  const QString& trainingContext);
154 
155  void clear(OpenCVFISHERFaceRecognizer* const,
156  const QList<int>& idsToClear,
157  const QString& trainingContext);
158 
159  void clear(OpenCVDNNFaceRecognizer* const,
160  const QList<int>& idsToClear,
161  const QString& trainingContext);
162 
163 public:
164 
165  // --- Identity management (recognitiondatabase_identity.cpp) -----------------------------------------
166 
167  bool identityContains(const Identity& identity,
168  const QString& attribute,
169  const QString& value) const;
170 
171  Identity findByAttribute(const QString& attribute,
172  const QString& value) const;
173 
174  Identity findByAttributes(const QString& attribute,
175  const QMap<QString, QString>& valueMap) const;
176 
177 private:
178 
179  OpenCVFISHERFaceRecognizer* opencvfisher;
180  OpenCVEIGENFaceRecognizer* opencveigen;
181  OpenCVLBPHFaceRecognizer* opencvlbph;
182  OpenCVDNNFaceRecognizer* opencvdnn;
183 
184  FunnelReal* funnel;
185 };
186 
187 // --- Static Training methods (recognitiondatabase_training.cpp) ----------------------------------------
188 
189 void trainIdentityBatchLBPH(OpenCVLBPHFaceRecognizer* const r,
190  const QList<Identity>& identitiesToBeTrained,
191  TrainingDataProvider* const data,
192  const QString& trainingContext,
193  RecognitionDatabase::Private* const d);
194 
195 void trainIdentityBatchEIGEN(OpenCVEIGENFaceRecognizer* const r,
196  const QList<Identity>& identitiesToBeTrained,
197  TrainingDataProvider* const data,
198  const QString& trainingContext,
199  RecognitionDatabase::Private* const d);
200 
201 void trainIdentityBatchFISHER(OpenCVFISHERFaceRecognizer* const r,
202  const QList<Identity>& identitiesToBeTrained,
203  TrainingDataProvider* const data,
204  const QString& trainingContext,
205  RecognitionDatabase::Private* const d);
206 
207 void trainIdentityBatchDNN(OpenCVDNNFaceRecognizer* const r,
208  const QList<Identity>& identitiesToBeTrained,
209  TrainingDataProvider* const data,
210  const QString& trainingContext,
211  RecognitionDatabase::Private* const d);
212 
213 
214 } // namespace Digikam
215 
216 #endif // DIGIKAM_FACESENGINE_RECOGNITION_DATABASE_P_H
QMutex
Digikam::RecognitionDatabase::mutex
QMutex mutex
Definition: recognitiondatabase_p.h:64
Digikam::RecognitionDatabase::dnn
OpenCVDNNFaceRecognizer * dnn()
Definition: recognitiondatabase_p.h:101
Digikam::trainIdentityBatchLBPH
void trainIdentityBatchLBPH(OpenCVLBPHFaceRecognizer *const r, const QList< Identity > &identitiesToBeTrained, TrainingDataProvider *const data, const QString &trainingContext, RecognitionDatabase::Private *const d)
Training where the train method takes one identity and one image.
Definition: recognitiondatabase_training.cpp:223
opencvlbphfacerecognizer.h
Digikam::RecognitionDatabase::eigen
OpenCVEIGENFaceRecognizer * eigen()
Definition: recognitiondatabase_p.h:95
Digikam::trainIdentityBatchFISHER
void trainIdentityBatchFISHER(OpenCVFISHERFaceRecognizer *const r, const QList< Identity > &identitiesToBeTrained, TrainingDataProvider *const data, const QString &trainingContext, RecognitionDatabase::Private *const d)
Definition: recognitiondatabase_training.cpp:327
Digikam::RecognitionDatabase::Private
Private()
Digikam::RecognitionDatabase::getObjectOrCreate
T * getObjectOrCreate(T *&ptr) const
Definition: recognitiondatabase_p.h:77
QMap< QString, QString >
Digikam::trainIdentityBatchDNN
void trainIdentityBatchDNN(OpenCVDNNFaceRecognizer *const r, const QList< Identity > &identitiesToBeTrained, TrainingDataProvider *const data, const QString &trainingContext, RecognitionDatabase::Private *const d)
Definition: recognitiondatabase_training.cpp:378
Digikam::RecognitionDatabase::dnnConst
OpenCVDNNFaceRecognizer * dnnConst() const
Definition: recognitiondatabase_p.h:102
Digikam::RecognitionDatabase::lbph
OpenCVLBPHFaceRecognizer * lbph()
Definition: recognitiondatabase_p.h:92
recognitiondatabase.h
Digikam::RecognitionDatabase::dbAvailable
bool dbAvailable
Definition: recognitiondatabase_p.h:63
value
qulonglong value
Definition: itemviewutilities.cpp:530
coredbaccess.h
dataproviders.h
Digikam::TrainingDataProvider
A TrainingDataProvider provides a call-back interface for the training process to retrieve the necess...
Definition: dataproviders.h:104
QHash< int, Identity >
Digikam::RecognitionDatabase::RecognizeAlgorithm
RecognizeAlgorithm
Definition: recognitiondatabase.h:82
T
#define T
Definition: wf_filtering.cpp:23
funnelreal.h
recognitiontrainingprovider.h
image
#define image
Definition: var_defines.h:38
Digikam::RecognitionDatabase::identityCache
QHash< int, Identity > identityCache
Definition: recognitiondatabase_p.h:66
QString
QList< Identity >
facedbaccess.h
Digikam::RecognitionDatabase::parameters
QVariantMap parameters
Definition: recognitiondatabase_p.h:65
dbengineparameters.h
Digikam::RecognitionDatabase::fisher
OpenCVFISHERFaceRecognizer * fisher()
Definition: recognitiondatabase_p.h:98
QImage
opencveigenfacerecognizer.h
Digikam::Matrix::identity
static const MetaEngineRotation identity(1, 0, 0, 1)
Digikam::RecognitionDatabase::lbphConst
OpenCVLBPHFaceRecognizer * lbphConst() const
Definition: recognitiondatabase_p.h:93
QMutexLocker
facedboperationgroup.h
digikam_debug.h
Digikam::RecognitionDatabase::aligner
FunnelReal * aligner()
Definition: recognitiondatabase_p.h:105
opencvdnnfacerecognizer.h
facedb.h
Digikam::RecognitionDatabase::recognizeAlgorithm
RecognitionDatabase::RecognizeAlgorithm recognizeAlgorithm
Definition: recognitiondatabase_p.h:67
Digikam::RecognitionDatabase::alignerConst
FunnelReal * alignerConst() const
Definition: recognitiondatabase_p.h:106
opencvfisherfacerecognizer.h
Digikam::trainIdentityBatchEIGEN
void trainIdentityBatchEIGEN(OpenCVEIGENFaceRecognizer *const r, const QList< Identity > &identitiesToBeTrained, TrainingDataProvider *const data, const QString &trainingContext, RecognitionDatabase::Private *const d)
Definition: recognitiondatabase_training.cpp:274
Digikam::RecognitionDatabase::createDNNDebug
void createDNNDebug()
Definition: recognitiondatabase_p.h:103
Digikam::RecognitionDatabase::eigenConst
OpenCVEIGENFaceRecognizer * eigenConst() const
Definition: recognitiondatabase_p.h:96
Digikam::RecognitionDatabase::fisherConst
OpenCVFISHERFaceRecognizer * fisherConst() const
Definition: recognitiondatabase_p.h:99
This file is part of the KDE documentation.
Documentation copyright © 1996-2019 The KDE developers.
Generated on Wed Dec 11 2019 07:34:34 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

digikam

Skip menu "digikam"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages
-->

graphics API Reference

Skip menu "graphics API Reference"
  • digikam
  • KDiagram
  •     KChart
  •     KGantt
  • KPhotoAlbum
  •   AndroidRemoteControl
  • Krita
  •   libs
  •     KritaBasicFlakes
  •     brush
  •     KritaUndo2
  •     KritaFlake
  •     image
  •     KritaPlugin
  •     Krita
  •     KritaOdf
  •     KritaPigment
  •     KritaStore
  •     ui
  •     KritaWidgets
  •     KritaWidgetUtils
  •   plugins
  •     Assitants
  •     Extensions
  •     Filters
  •         KritaText
  •         KritaTextLayout
  •     Generators
  •     Formats
  •             src
  •     PaintOps
  •       libpaintop
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal