File indexing completed on 2025-03-09 03:55:01

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam
0004  *
0005  * Date        : 2010-06-16
0006  * Description : The private implementation of recognition wrapper
0007  *
0008  * SPDX-FileCopyrightText:      2010 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
0009  * SPDX-FileCopyrightText:      2010 by Aditya Bhatt <adityabhatt1991 at gmail dot com>
0010  * SPDX-FileCopyrightText: 2010-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  * SPDX-FileCopyrightText:      2019 by Thanh Trung Dinh <dinhthanhtrung1996 at gmail dot com>
0012  * SPDX-FileCopyrightText:      2020 by Nghia Duong <minhnghiaduong997 at gmail dot com>
0013  *
0014  * SPDX-License-Identifier: GPL-2.0-or-later
0015  *
0016  * ============================================================ */
0017 
0018 #ifndef FACIAL_RECOGNITION_WRAPPER_P_H
0019 #define FACIAL_RECOGNITION_WRAPPER_P_H
0020 
0021 #include "facialrecognition_wrapper.h"
0022 
0023 // Qt includes
0024 
0025 #include <QMutexLocker>
0026 #include <QUuid>
0027 #include <QDir>
0028 #include <QStandardPaths>
0029 #include <QRecursiveMutex>
0030 
0031 // Local includes
0032 
0033 #include "digikam_config.h"
0034 #include "digikam_debug.h"
0035 #include "opencvdnnfacerecognizer.h"
0036 #include "recognitiontrainingprovider.h"
0037 #include "coredbaccess.h"
0038 #include "dbengineparameters.h"
0039 #include "facedbaccess.h"
0040 #include "facedboperationgroup.h"
0041 #include "facedb.h"
0042 #include "identity.h"
0043 
0044 namespace Digikam
0045 {
0046 
0047 class Q_DECL_HIDDEN FacialRecognitionWrapper::Private
0048 {
0049 public:
0050 
0051     explicit Private();
0052     ~Private();
0053 
0054 public:
0055 
0056     // --- Backend parameters (facesengine_interface_setup.cpp) --------------------------
0057 
0058     void applyParameters();
0059 
0060 public:
0061 
0062     // --- Faces Training management (facesengine_interface_training.cpp) ----------------------------------
0063 
0064     void trainIdentityBatch(const QList<Identity>& identitiesToBeTrained,
0065                             TrainingDataProvider* const data,
0066                             const QString& trainingContext);
0067 
0068     void clear(const QList<int>& idsToClear, const QString& trainingContext);
0069 
0070     // --- Identity management (facesengine_interface_identity.cpp) -----------------------------------------
0071 
0072     static bool identityContains(const Identity& identity,
0073                                  const QString& attribute,
0074                                  const QString& value);
0075 
0076     Identity findByAttribute(const QString& attribute,
0077                              const QString& value)                    const;
0078 
0079     Identity findByAttributes(const QString& attribute,
0080                               const QMultiMap<QString, QString>& valueMap) const;
0081 
0082 public:
0083 
0084     bool                        dbAvailable;
0085     int                         ref;
0086     mutable QRecursiveMutex     mutex;
0087     QVariantMap                 parameters;
0088     QHash<int, Identity>        identityCache;
0089     OpenCVDNNFaceRecognizer*    recognizer;
0090 };
0091 
0092 } // namespace Digikam
0093 
0094 #endif // FACIAL_RECOGNITION_WRAPPER_P_H