File indexing completed on 2025-03-09 03:54:59
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2019-07-09 0007 * Description : Preprocessor for face recognition 0008 * 0009 * SPDX-FileCopyrightText: 2019 by Thanh Trung Dinh <dinhthanhtrung1996 at gmail dot com> 0010 * SPDX-FileCopyrightText: 2019-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #include "recognitionpreprocessor.h" 0017 0018 // Local includes 0019 0020 #include "openfacepreprocessor.h" 0021 #include "digikam_debug.h" 0022 0023 namespace Digikam 0024 { 0025 0026 class RecognitionPreprocessor::Private 0027 { 0028 0029 public: 0030 0031 explicit Private(); 0032 ~Private(); 0033 0034 void init(PreprocessorSelection mode); 0035 cv::Mat preprocess(const cv::Mat& image) const; 0036 0037 private: 0038 0039 int preprocessingMode; 0040 0041 OpenfacePreprocessor* ofpreprocessor; 0042 }; 0043 0044 // ------------------------------------------------------------------------------- 0045 0046 RecognitionPreprocessor::Private::Private() 0047 : preprocessingMode(-1), 0048 ofpreprocessor (nullptr) 0049 { 0050 } 0051 0052 RecognitionPreprocessor::Private::~Private() 0053 { 0054 delete ofpreprocessor; 0055 } 0056 0057 void RecognitionPreprocessor::Private::init(PreprocessorSelection mode) 0058 { 0059 preprocessingMode = mode; 0060 0061 switch (mode) 0062 { 0063 case OPENFACE: 0064 { 0065 ofpreprocessor = new OpenfacePreprocessor; 0066 ofpreprocessor->loadModels(); 0067 break; 0068 } 0069 0070 default: 0071 { 0072 qCDebug(DIGIKAM_FACEDB_LOG) << "Error unknown preprocessingMode " << preprocessingMode; 0073 preprocessingMode = -1; 0074 } 0075 } 0076 } 0077 0078 cv::Mat RecognitionPreprocessor::Private::preprocess(const cv::Mat& image) const 0079 { 0080 switch (preprocessingMode) 0081 { 0082 case OPENFACE: 0083 { 0084 qCDebug(DIGIKAM_FACEDB_LOG) << "Align face for OpenFace neural network model"; 0085 0086 return ofpreprocessor->process(image); 0087 } 0088 0089 default: 0090 { 0091 qCDebug(DIGIKAM_FACEDB_LOG) << "Error unknown preprocessingMode " << preprocessingMode; 0092 0093 return image; 0094 } 0095 } 0096 } 0097 0098 // ------------------------------------------------------------------------------------------------------ 0099 0100 RecognitionPreprocessor::RecognitionPreprocessor() 0101 : FacePreprocessor(), 0102 d (new Private) 0103 { 0104 } 0105 0106 RecognitionPreprocessor::~RecognitionPreprocessor() 0107 { 0108 delete d; 0109 } 0110 0111 void RecognitionPreprocessor::init(PreprocessorSelection mode) 0112 { 0113 d->init(mode); 0114 } 0115 0116 cv::Mat RecognitionPreprocessor::preprocess(const cv::Mat& image) const 0117 { 0118 return d->preprocess(image); 0119 } 0120 0121 } // namespace Digikam