digiKam
Loading...
Searching...
No Matches
facepipeline_p.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2010-09-03
7 * Description : Integrated, multithread face detection / recognition
8 *
9 * SPDX-FileCopyrightText: 2010-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2012-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18#include "facepipeline.h"
19
20// Qt includes
21
22#include <QExplicitlySharedDataPointer>
23#include <QMetaMethod>
24#include <QMutex>
25#include <QSharedData>
26#include <QWaitCondition>
27
28// Local includes
29
30#include "digikam_debug.h"
31#include "facedetector.h"
32#include "faceutils.h"
33#include "previewloadthread.h"
34#include "scanstatefilter.h"
35#include "thumbnailloadthread.h"
36#include "workerobject.h"
37
38namespace Digikam
39{
40
41class Q_DECL_HIDDEN FacePipeline::Private : public QObject
42{
43 Q_OBJECT
44
45public:
46
47 explicit Private(FacePipeline* const qq);
48
49 void processBatch(const QList<ItemInfo>& infos);
50 void sendFromFilter(const QList<FacePipelineExtendedPackage::Ptr>& packages);
51 void skipFromFilter(const QList<ItemInfo>& infosForSkipping);
52 void send(const FacePipelineExtendedPackage::Ptr& package);
53 bool senderFlowControl(const FacePipelineExtendedPackage::Ptr& package);
54 void receiverFlowControl();
55 FacePipelineExtendedPackage::Ptr buildPackage(const ItemInfo& info);
56 FacePipelineExtendedPackage::Ptr buildPackage(const ItemInfo& info,
58 const DImg& image);
59 FacePipelineExtendedPackage::Ptr buildPackage(const ItemInfo& info,
61 const DImg& image);
62 FacePipelineExtendedPackage::Ptr filterOrBuildPackage(const ItemInfo& info);
63
64 bool hasFinished() const;
65 void checkFinished();
66 void start();
67 void stop();
68 void wait();
69 void applyPriority();
70
71 ThumbnailLoadThread* createThumbnailLoadThread();
72
73public:
74
75 ScanStateFilter* databaseFilter = nullptr;
76 FacePreviewLoader* previewThread = nullptr;
77 DetectionWorker* detectionWorker = nullptr;
78 ParallelPipes* parallelDetectors = nullptr;
79 RecognitionWorker* recognitionWorker = nullptr;
80 DatabaseWriter* databaseWriter = nullptr;
81 TrainerWorker* trainerWorker = nullptr;
82 DetectionBenchmarker* detectionBenchmarker = nullptr;
83 RecognitionBenchmarker* recognitionBenchmarker = nullptr;
84
85 QList<QObject*> pipeline;
86 QThread::Priority priority = QThread::LowPriority;
87
88 QList<ThumbnailLoadThread*> thumbnailLoadThreads;
89 bool started = false;
90 bool waiting = false;
91 int infosForFiltering = 0;
92 int packagesOnTheRoad = 0;
93 int maxPackagesOnTheRoad = 30;
94 int totalPackagesAdded = 0;
95
96 QList<FacePipelineExtendedPackage::Ptr> delayedPackages;
97
98public Q_SLOTS:
99
100 void finishProcess(FacePipelineExtendedPackage::Ptr package);
101
102Q_SIGNALS:
103
104 friend class FacePipeline;
106
107 void accuracyAndModel(int detectAccuracy, FaceScanSettings::FaceDetectionModel detectModel, FaceScanSettings::FaceDetectionSize detectSize, int recognizeAccuracy, FaceScanSettings::FaceRecognitionModel recognizeModel);
108
109private:
110
111 FacePipeline* const q = nullptr;
112};
113
114} // namespace Digikam
Definition dimg.h:52
Definition databasewriter.h:27
Definition detectionbenchmarker.h:26
Definition detectionworker.h:27
QExplicitlySharedDataPointer< FacePipelineExtendedPackage > Ptr
Definition facepipelinepackage.h:163
Definition facepipelinepackage.h:93
Definition facepipelinepackage.h:50
Definition facepipeline_p.h:42
QList< QObject * > pipeline
Definition facepipeline_p.h:85
QList< ThumbnailLoadThread * > thumbnailLoadThreads
Definition facepipeline_p.h:88
void startProcess(const FacePipelineExtendedPackage::Ptr &package)
void accuracyAndModel(int detectAccuracy, FaceScanSettings::FaceDetectionModel detectModel, FaceScanSettings::FaceDetectionSize detectSize, int recognizeAccuracy, FaceScanSettings::FaceRecognitionModel recognizeModel)
QList< FacePipelineExtendedPackage::Ptr > delayedPackages
Definition facepipeline_p.h:96
Definition facepipeline.h:28
Definition facepreviewloader.h:25
FaceDetectionSize
Definition facescansettings.h:76
FaceRecognitionModel
Definition facescansettings.h:89
FaceDetectionModel
Definition facescansettings.h:65
Definition iteminfo.h:68
Definition parallelpipes.h:25
Definition recognitionbenchmarker.h:26
Definition recognitionworker.h:28
Definition scanstatefilter.h:25
Definition thumbnailloadthread.h:36
Definition trainerworker.h:27
Definition datefolderview.cpp:34