kde-apps/libkface: Version bump to 15.08.2-r1
authorAndreas Sturmlechner <andreas.sturmlechner@gmail.com>
Fri, 16 Oct 2015 20:23:44 +0000 (22:23 +0200)
committerMichael Palimaka <kensington@gentoo.org>
Thu, 22 Oct 2015 13:18:10 +0000 (00:18 +1100)
Fixes build with >=media-libs/opencv-3.0.0 by backporting opencv3 patches from
git master which unfortunately didn't make it into Applications/15.08 branch.
See also https://bugs.gentoo.org/show_bug.cgi?id=554490

Package-Manager: portage-2.2.20.1

kde-apps/libkface/Manifest
kde-apps/libkface/files/libkface-15.08.2-opencv3.patch [new file with mode: 0644]
kde-apps/libkface/libkface-15.08.2-r1.ebuild [new file with mode: 0644]

index f4e8528bc1a82e454e8c03021267865320de8725..1ee772c3db09f477b7ba89de3629a7651f4292ca 100644 (file)
@@ -1,2 +1,3 @@
 DIST digikam-4.12.0.tar.bz2 69527960 SHA256 15043afb04733e059460165bc3cdf58dc42a67d7a349fbe12c2ebbe1946e3420 SHA512 a5ebe481ef9803475cd2d4d198b0d093753ecb71367662f0e83a151ab34a2ff071139b28c1d9600279463fed96745b025db86d24b059b0794bc4a2b50338df85 WHIRLPOOL cf29c3555ce41a298c9760287996d8edee76ff8a6ec42b503f55059e40b35f91cf56afb054f641e800f6e630d851491c2f77e0bd67020feefe8d6adf36a643f5
 DIST digikam-4.4.0.tar.bz2 68871203 SHA256 5c68a2d200f5b502706128ea64839319aad333fb79548f49ecc92594e280d4e9 SHA512 4992fad1e574fc44eac53f3ac8d4ab78ccbf8e04beb54a211a9afc20af1efb6f8bacedea07e403f490e7f70a74ed5ac02d4f9b939dfaf25f64a4a9bda0a7d94a WHIRLPOOL 7a05ab9926227232a1cf52bf68da45b849b982e840b171f702610acce85a1ce8e59967a02e845a0ef19c316daee835861573aca40dc7b28422cf7d6d56119e2c
+DIST libkface-15.08.2.tar.xz 8986240 SHA256 b10e6bee0207f5ffc739f3768ebfdc0d9f82232b33aea4d5dcffde6dcf79ceca SHA512 d0037f34556debb6cea4662afbc512f724a6328df913425621d29ab9cffdaac6f50327af0dec857f818bf43c474896ca5589d02dac4a01a6a36a911c7a805a80 WHIRLPOOL f4a16ba01dd1065203275c730df9de466bf3c40e1091c4f7f43f5ed64bef1bdbd5548fb6c725c25a6eab0d9a8998931d63c803521cb3a38816ea37a3647f71c5
diff --git a/kde-apps/libkface/files/libkface-15.08.2-opencv3.patch b/kde-apps/libkface/files/libkface-15.08.2-opencv3.patch
new file mode 100644 (file)
index 0000000..e3c73fa
--- /dev/null
@@ -0,0 +1,438 @@
+This is a combination of the following upstream commits to support opencv3, in order:
+
+a53bcebbfc4e6c42ee73adddc41f8c2f8f8f39c8 apply patch #94414 to support OpenCV3
+b95b5ae012fecdd0a85b094728d00a69bc4b4a7c bump version about OpenCV3 support
+d61c07bf6213774fa06380c466e7dc5438c03745 add rules if not right OpenCV version is found
+bd69e872ea43447a11282988b1f20bdf4d4f50a7 polish
+dc62c0e0ea55d189d918501cce4d92f4198a1a0c use same OpenCV logic than digiKam and kipi-plugins
+
+--- a/CMakeLists.txt   2015-03-21 14:57:53.000000000 +0100
++++ b/CMakeLists.txt   2015-10-16 21:47:13.382898572 +0200
+@@ -9,6 +9,8 @@
+ message(STATUS "----------------------------------------------------------------------------------")
+ message(STATUS "Starting CMake configuration for: libkface")
++option(ENABLE_OPENCV3 "Build libkface with OpenCV3 instead OpenCV2 (default=OFF)" OFF)
++
+ find_package(Qt4 4.6.0 REQUIRED)
+ find_package(KDE4 REQUIRED)
+@@ -29,7 +31,26 @@
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
+ include(MacroOpenCV)
+-DETECT_OPENCV(2.4.9 core highgui objdetect contrib legacy imgproc)
++
++if(ENABLE_OPENCV3)
++
++    DETECT_OPENCV(3.0.0 core face highgui objdetect imgproc)
++
++    if(${OpenCV_FOUND} AND ${OpenCV_VERSION} VERSION_LESS 3.0.0)
++        message(STATUS "ENABLE_OPENCV3 option is enabled and OpenCV < 3.0.0 have been found. Disabled ENABLE_OPENCV3")
++        set(OpenCV_FOUND FALSE)
++    endif()
++
++else()
++
++    DETECT_OPENCV(2.4.9 core highgui objdetect contrib legacy imgproc)
++
++    if(${OpenCV_FOUND} AND ${OpenCV_VERSION} VERSION_GREATER 2.4.99)
++        message(STATUS "ENABLE_OPENCV3 option is disabled and OpenCV >= 3.0.0 have been found. Enabled ENABLE_OPENCV3")
++        set(OpenCV_FOUND FALSE)
++    endif()
++
++endif()
+ include_directories(${OpenCV_INCLUDE_DIRS})
+@@ -48,11 +69,12 @@
+     # 3.3.0 => 2.0.0     (Added a "simple" training method using image data directly for a single image)
+     # 3.4.0 => 2.0.0     (Added a "simple" training method using image data directly for an image list)
+     # 3.5.0 => 3.0.0     (Added d private internal container to reduce binary uncompatibility with Identity class)
++    # 3.5.1 => 3.0.0     (Added OpenCV3 support)
+     # Library API version
+     set(KFACE_LIB_MAJOR_VERSION "3")
+     set(KFACE_LIB_MINOR_VERSION "5")
+-    set(KFACE_LIB_PATCH_VERSION "0")
++    set(KFACE_LIB_PATCH_VERSION "1")
+     # Suffix to add at end of version string. Usual values are:
+     # "-git"   : alpha code unstable from git. Do not use in production
+--- a/README   2015-03-21 14:57:53.000000000 +0100
++++ b/README   2015-10-16 21:47:13.376898647 +0200
+@@ -21,6 +21,11 @@
+ libkde     >= 4.4.x                    http://www.kde.org
+ libopencv  >= 2.4.9                    http://opencv.willowgarage.com/wiki    (with opencv 'haarcascades' data files)
++CMake compilation options to custom libkface:
++
++Use CMake "-DENABLE_OPENCV3=on"        flag to compile libkface source code using OpenCV3 instead OpenCV2 (disabled by default).
++                                       OpenCV3 support needs extra contrib modules package, especially 'face' and 'legacy' components.
++
+ -- INSTALL ------------------------------------------------------------
+ In order to compile, especially when QT3/Qt4 are installed at the same time,
+--- a/libkface/CMakeLists.txt  2015-03-21 14:57:53.000000000 +0100
++++ b/libkface/CMakeLists.txt  2015-10-16 21:47:13.376898647 +0200
+@@ -1,5 +1,5 @@
+ #
+-# Copyright (c) 2010-2014, Gilles Caulier, <caulier dot gilles at gmail dot com>
++# Copyright (c) 2010-2015, Gilles Caulier, <caulier dot gilles at gmail dot com>
+ #
+ # Redistribution and use is allowed according to the terms of the BSD license.
+ # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+--- a/libkface/detection/opencvfacedetector.cpp        2015-03-21 14:57:53.000000000 +0100
++++ b/libkface/detection/opencvfacedetector.cpp        2015-10-16 21:47:13.382898572 +0200
+@@ -18,7 +18,7 @@
+  *         <a href="alexjironkin at gmail dot com">alexjironkin at gmail dot com</a>
+  * @author Copyright (C) 2010 by Aditya Bhatt
+  *         <a href="adityabhatt at gmail dot com">adityabhatt at gmail dot com</a>
+- * @author Copyright (C) 2010-2014 by Gilles Caulier
++ * @author Copyright (C) 2010-2015 by Gilles Caulier
+  *         <a href="mailto:caulier dot gilles at gmail dot com">caulier dot gilles at gmail dot com</a>
+  * @author Copyright (C) 2010-2013 by Marcel Wiesweg
+  *         <a href="mailto:marcel dot wiesweg at gmx dot de">marcel dot wiesweg at gmx dot de</a>
+@@ -136,13 +136,14 @@
+     cv::Size getOriginalWindowSize() const
+     {
++#if OPENCV_VERSION <= OPENCV_MAKE_VERSION(2,4,99)
+         // This is a HACK which may break any time. Work around the fact that getOriginalWindowSize()
+         // always returns (0,0) and we need these values.
+         if (oldCascade)
+         {
+             return oldCascade->orig_window_size;
+         }
+-
++#endif
+         return cv::Size(0, 0);
+     }
+--- a/libkface/libopencv.h.cmake.in    2015-03-21 14:57:53.000000000 +0100
++++ b/libkface/libopencv.h.cmake.in    2015-10-16 21:47:13.382898572 +0200
+@@ -7,7 +7,7 @@
+  * @date   2010-06-16
+  * @brief  Wrapper for OpenCV header files
+  *
+- * @author Copyright (C) 2012-2014 by Gilles Caulier
++ * @author Copyright (C) 2012-2015 by Gilles Caulier
+  *         <a href="mailto:caulier dot gilles at gmail dot com">caulier dot gilles at gmail dot com</a>
+  *
+  * This program is free software; you can redistribute it
+@@ -31,16 +31,16 @@
+ // Pragma directives to reduce warnings from OpenCV header files.
+ #if not defined(__APPLE__) && defined(__GNUC__)
+-#pragma GCC diagnostic push
+-#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
+-#pragma GCC diagnostic ignored "-Woverloaded-virtual"
++#   pragma GCC diagnostic push
++#   pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
++#   pragma GCC diagnostic ignored "-Woverloaded-virtual"
+ #endif
+ #if defined(__APPLE__) && defined(__clang__)
+-#pragma clang diagnostic push
+-#pragma clang diagnostic ignored "-Wnon-virtual-dtor"
+-#pragma clang diagnostic ignored "-Woverloaded-virtual"
+-#pragma clang diagnostic ignored "-Wcast-align"
++#   pragma clang diagnostic push
++#   pragma clang diagnostic ignored "-Wnon-virtual-dtor"
++#   pragma clang diagnostic ignored "-Woverloaded-virtual"
++#   pragma clang diagnostic ignored "-Wcast-align"
+ #endif
+ // OpenCV includes
+@@ -49,25 +49,32 @@
+ #define OPENCV_MAKE_VERSION(major,minor,patch) (((major) << 16) | ((minor) << 8) | (patch))
+ #define OPENCV_VERSION                         OPENCV_MAKE_VERSION(CV_MAJOR_VERSION,CV_MINOR_VERSION,CV_SUBMINOR_VERSION)
+-#define OPENCV_TEST_VERSION(major,minor,patch) ( OPENCV_VERSION >= OPENCV_MAKE_VERSION(major,minor,patch) )
++#define OPENCV_TEST_VERSION(major,minor,patch) ( OPENCV_VERSION < OPENCV_MAKE_VERSION(major,minor,patch) )
+-#include <opencv2/core/core.hpp>
+-#include <opencv2/core/internal.hpp>
+-#include <opencv2/contrib/contrib.hpp>
++#if OPENCV_TEST_VERSION(3,0,0)
++#   include <opencv2/core/core.hpp>
++#   include <opencv2/core/internal.hpp>
++#   include <opencv2/contrib/contrib.hpp>
++#else
++#   include <opencv2/face.hpp>
++#   include <opencv2/core.hpp>
++#endif
+ // for old-style code
++#if OPENCV_VERSION <= OPENCV_MAKE_VERSION(2,4,99)
++#   include <opencv2/legacy/compat.hpp>
++#endif
+ #include <opencv2/opencv.hpp>
+-#include <opencv2/legacy/compat.hpp>
+ #include <opencv2/highgui/highgui_c.h>
+ #include <opencv/cvaux.h>
+ // Restore warnings
+ #if not defined(__APPLE__) && defined(__GNUC__)
+-#pragma GCC diagnostic pop
++#   pragma GCC diagnostic pop
+ #endif
+ #if defined(__APPLE__) && defined(__clang__)
+-#pragma clang diagnostic pop
++#   pragma clang diagnostic pop
+ #endif
+ #endif // LIB_OPEN_CV_H
+--- a/libkface/recognition-opencv-lbph/facerec_borrowed.h      2015-03-21 14:57:53.000000000 +0100
++++ b/libkface/recognition-opencv-lbph/facerec_borrowed.h      2015-10-16 21:47:13.382898572 +0200
+@@ -45,7 +45,11 @@
+ namespace KFaceIface
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+ class LBPHFaceRecognizer : public cv::FaceRecognizer
++#else
++class LBPHFaceRecognizer : public cv::face::FaceRecognizer
++#endif
+ {
+ public:
+@@ -99,8 +103,13 @@
+     ~LBPHFaceRecognizer() {}
++#if OPENCV_TEST_VERSION(3,0,0)
+     using cv::FaceRecognizer::save;
+     using cv::FaceRecognizer::load;
++#else
++    using cv::face::FaceRecognizer::save;
++    using cv::face::FaceRecognizer::load;
++#endif
+     static cv::Ptr<LBPHFaceRecognizer> create(int radius=1, int neighbors=8, int grid_x=8, int grid_y=8, double threshold = DBL_MAX, PredictionStatistics statistics = NearestNeighbor);
+@@ -139,6 +148,8 @@
+     /**
+      * Getter functions.
+      */
++#if OPENCV_TEST_VERSION(3,0,0)
++
+     int neighbors() const { return m_neighbors; }
+     int radius()    const { return m_radius;    }
+     int grid_x()    const { return m_grid_x;    }
+@@ -147,6 +158,34 @@
+     // NOTE: Implementation done through CV_INIT_ALGORITHM macro from OpenCV.
+     cv::AlgorithmInfo* info() const;
++#else
++
++    int getNeighbors() const                             { return m_neighbors;            }
++    void setNeighbors(int _neighbors)                    { m_neighbors = _neighbors;      }
++
++    int getRadius()    const                             { return m_radius;               }
++    void setRadius(int radius)                           { m_radius = radius;             }
++
++    int getGrid_x()    const                             { return m_grid_x;               }
++    void setGrid_x(int _grid_x)                          { m_grid_x = _grid_x;            }
++
++    int getGrid_y()    const                             { return m_grid_y;               }
++    void setGrid_y(int _grid_y)                          { m_grid_y = _grid_y;            }
++
++    double getThreshold() const                          { return m_threshold;            }
++    void setThreshold(double _threshold)                 { m_threshold = _threshold;      }
++
++    void setHistograms(std::vector<cv::Mat> _histograms) { m_histograms = _histograms;    }
++    std::vector<cv::Mat> getHistograms() const           { return m_histograms;           }
++
++    void setLabels(cv::Mat _labels)                      { m_labels = _labels;            }
++    cv::Mat getLabels() const                            { return m_labels;               }
++
++    void setStatistic(int _statistic)                    { m_statisticsMode = _statistic; }
++    int getStatistic() const                             { return m_statisticsMode;       }
++
++#endif
++
+ private:
+     /** Computes a LBPH model with images in src and
+--- a/libkface/recognition-opencv-lbph/lbphfacemodel.cpp       2015-03-21 14:57:53.000000000 +0100
++++ b/libkface/recognition-opencv-lbph/lbphfacemodel.cpp       2015-10-16 21:47:13.383898559 +0200
+@@ -61,7 +61,11 @@
+     : cv::Ptr<LBPHFaceRecognizer>(LBPHFaceRecognizer::create()),
+       databaseId(0)
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     ptr()->set("threshold", 100.0);
++#else
++    ptr()->setThreshold(100.0);
++#endif
+ }
+ LBPHFaceModel::~LBPHFaceModel()
+@@ -80,9 +84,13 @@
+ const LBPHFaceRecognizer* LBPHFaceModel::ptr() const
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     const LBPHFaceRecognizer* const ptr = cv::Ptr<LBPHFaceRecognizer>::operator const KFaceIface::LBPHFaceRecognizer*();
++#else
++    const LBPHFaceRecognizer* const ptr = cv::Ptr<LBPHFaceRecognizer>::operator KFaceIface::LBPHFaceRecognizer*();
++#endif
+-    if (!ptr) 
++    if (!ptr)
+         kWarning() << "LBPHFaceRecognizer pointer is null";
+     return ptr;
+@@ -90,47 +98,83 @@
+ int LBPHFaceModel::radius() const
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     return ptr()->get<int>("radius");
++#else
++    return ptr()->getRadius();
++#endif
+ }
+ void LBPHFaceModel::setRadius(int radius)
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     ptr()->set("radius", radius);
++#else
++    ptr()->setRadius(radius);
++#endif
+ }
+ int LBPHFaceModel::neighbors() const
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     return ptr()->get<int>("neighbors");
++#else
++    return ptr()->getNeighbors();
++#endif
+ }
+ void LBPHFaceModel::setNeighbors(int neighbors)
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     ptr()->set("neighbors", neighbors);
++#else
++    ptr()->setNeighbors(neighbors);
++#endif
+ }
+ int LBPHFaceModel::gridX() const
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     return ptr()->get<int>("grid_x");
++#else
++    return ptr()->getGrid_x();
++#endif
+ }
+ void LBPHFaceModel::setGridX(int grid_x)
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     ptr()->set("grid_x", grid_x);
++#else
++    ptr()->setGrid_x(grid_x);
++#endif
+ }
+ int LBPHFaceModel::gridY() const
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     return ptr()->get<int>("grid_y");
++#else
++    return ptr()->getGrid_y();
++#endif
+ }
+ void LBPHFaceModel::setGridY(int grid_y)
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     ptr()->set("grid_y", grid_y);
++#else
++    ptr()->setGrid_y(grid_y);
++#endif
+ }
+ OpenCVMatData LBPHFaceModel::histogramData(int index) const
+ {
++#if OPENCV_TEST_VERSION(3,0,0)
+     return OpenCVMatData(ptr()->get<std::vector<cv::Mat> >("histograms").at(index));
++#else
++    return OpenCVMatData(ptr()->getHistograms().at(index));
++#endif
+ }
+ QList<LBPHistogramMetadata> LBPHFaceModel::histogramMetadata() const
+@@ -168,12 +212,24 @@
+         m_histogramMetadata << metadata;
+     }
++#if OPENCV_TEST_VERSION(3,0,0)
+     std::vector<cv::Mat> currentHistograms = ptr()->get<std::vector<cv::Mat> >("histograms");
+     cv::Mat currentLabels                  = ptr()->get<cv::Mat>("labels");
++#else
++    std::vector<cv::Mat> currentHistograms = ptr()->getHistograms();
++    cv::Mat currentLabels                  = ptr()->getLabels();
++#endif
++
+     currentHistograms.insert(currentHistograms.end(), newHistograms.begin(), newHistograms.end());
+     currentLabels.push_back(newLabels);
++
++#if OPENCV_TEST_VERSION(3,0,0)
+     ptr()->set("histograms", currentHistograms);
+-    ptr()->set("labels", currentLabels);
++    ptr()->set("labels",     currentLabels);
++#else
++    ptr()->setHistograms(currentHistograms);
++    ptr()->setLabels(currentLabels);
++#endif
+ /*
+     //Most cumbersome and inefficient way through a file storage which we were forced to use if we used standard OpenCV
+@@ -215,7 +271,11 @@
+     // Update local information
+     // We assume new labels are simply appended
++#if OPENCV_TEST_VERSION(3,0,0)
+     cv::Mat currentLabels = ptr()->get<cv::Mat>("labels");
++#else
++    cv::Mat currentLabels = ptr()->getLabels();
++#endif
+     for (int i = m_histogramMetadata.size() ; i < currentLabels.rows ; i++)
+     {
+--- a/libkface/recognition-opencv-lbph/facerec_borrowed.cpp
++++ b/libkface/recognition-opencv-lbph/facerec_borrowed.cpp
+@@ -531,15 +531,17 @@
+     return ptr;
+ }
+-CV_INIT_ALGORITHM(LBPHFaceRecognizer, "FaceRecognizer.LBPH-KFaceIface",
+-                  obj.info()->addParam(obj, "radius",     obj.m_radius);
+-                  obj.info()->addParam(obj, "neighbors",  obj.m_neighbors);
+-                  obj.info()->addParam(obj, "grid_x",     obj.m_grid_x);
+-                  obj.info()->addParam(obj, "grid_y",     obj.m_grid_y);
+-                  obj.info()->addParam(obj, "threshold",  obj.m_threshold);
+-                  obj.info()->addParam(obj, "histograms", obj.m_histograms);         // modification: Make Read/Write
+-                  obj.info()->addParam(obj, "labels",     obj.m_labels);             // modification: Make Read/Write
+-                  obj.info()->addParam(obj, "statistic",  obj.m_statisticsMode));    // modification: Add parameter
++#if OPENCV_VERSION <= OPENCV_MAKE_VERSION(2,4,11)
++    CV_INIT_ALGORITHM(LBPHFaceRecognizer, "FaceRecognizer.LBPH-KFaceIface",
++                      obj.info()->addParam(obj, "radius",     obj.m_radius);
++                      obj.info()->addParam(obj, "neighbors",  obj.m_neighbors);
++                      obj.info()->addParam(obj, "grid_x",     obj.m_grid_x);
++                      obj.info()->addParam(obj, "grid_y",     obj.m_grid_y);
++                      obj.info()->addParam(obj, "threshold",  obj.m_threshold);
++                      obj.info()->addParam(obj, "histograms", obj.m_histograms);         // modification: Make Read/Write
++                      obj.info()->addParam(obj, "labels",     obj.m_labels);             // modification: Make Read/Write
++                      obj.info()->addParam(obj, "statistic",  obj.m_statisticsMode));    // modification: Add parameter
++#endif
+ } // namespace KFaceIface
diff --git a/kde-apps/libkface/libkface-15.08.2-r1.ebuild b/kde-apps/libkface/libkface-15.08.2-r1.ebuild
new file mode 100644 (file)
index 0000000..c7dc14d
--- /dev/null
@@ -0,0 +1,28 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit kde4-base
+
+DESCRIPTION="Qt/C++ wrapper around LibFace to perform face recognition and detection"
+HOMEPAGE="https://projects.kde.org/projects/kde/kdegraphics/libs/libkface"
+
+LICENSE="GPL-2"
+SLOT="4/3"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+
+DEPEND=">=media-libs/opencv-3.0.0[contrib]"
+RDEPEND="${DEPEND}"
+
+PATCHES=( "${FILESDIR}/${PN}-15.08.2-opencv3.patch" )
+
+src_configure() {
+       local mycmakeargs=(
+               -DENABLE_OPENCV3=ON
+       )
+
+       kde4-base_src_configure
+}