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 parameters 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 #include "facialrecognition_wrapper_p.h"
0019 
0020 namespace Digikam
0021 {
0022 
0023 void FacialRecognitionWrapper::Private::applyParameters()
0024 {
0025     int k           = 5;
0026     float threshold = 0.6F;
0027 
0028     if      (parameters.contains(QLatin1String("k-nearest")))
0029     {
0030         k = parameters.value(QLatin1String("k-nearest")).toInt();
0031     }
0032     else if (parameters.contains(QLatin1String("threshold")))
0033     {
0034         threshold = parameters.value(QLatin1String("threshold")).toFloat();
0035     }
0036     else if (parameters.contains(QLatin1String("accuracy")))
0037     {
0038         threshold = parameters.value(QLatin1String("accuracy")).toFloat();
0039     }
0040 
0041     threshold = 1 - threshold;
0042 
0043     qCDebug(DIGIKAM_FACESENGINE_LOG) << "recognition threshold" << threshold;
0044 
0045     recognizer->setNbNeighBors(k);
0046     recognizer->setThreshold(threshold);
0047 }
0048 
0049 void FacialRecognitionWrapper::setParameter(const QString& parameter, const QVariant& value)
0050 {
0051     if (!d || !d->dbAvailable)
0052     {
0053         return;
0054     }
0055 
0056     QMutexLocker lock(&d->mutex);
0057 
0058     d->parameters.insert(parameter, value);
0059     d->applyParameters();
0060 }
0061 
0062 void FacialRecognitionWrapper::setParameters(const QVariantMap& parameters)
0063 {
0064     if (!d || !d->dbAvailable)
0065     {
0066         return;
0067     }
0068 
0069     QMutexLocker lock(&d->mutex);
0070 
0071     for (QVariantMap::const_iterator it  = parameters.begin() ;
0072                                      it != parameters.end() ;
0073                                      ++it)
0074     {
0075         d->parameters.insert(it.key(), it.value());
0076     }
0077 
0078     d->applyParameters();
0079 }
0080 
0081 QVariantMap FacialRecognitionWrapper::parameters() const
0082 {
0083     if (!d || !d->dbAvailable)
0084     {
0085         return QVariantMap();
0086     }
0087 
0088     QMutexLocker lock(&d->mutex);
0089 
0090     return d->parameters;
0091 }
0092 
0093 } // namespace Digikam