From 22e3b97b1ccad996e3ecfe36111c7913945b3249 Mon Sep 17 00:00:00 2001 From: Willy Sudiarto Raharjo Date: Sat, 29 Aug 2015 07:03:01 +0700 Subject: graphics/digikam: Patched against opencv 3.0.0. Signed-off-by: Willy Sudiarto Raharjo --- graphics/digikam/digikam.SlackBuild | 7 +- graphics/digikam/libkface.patch | 258 ++++++++++++++++++++++++++++++++++++ graphics/digikam/opencv.patch | 121 +++++++++++++++++ 3 files changed, 385 insertions(+), 1 deletion(-) create mode 100644 graphics/digikam/libkface.patch create mode 100644 graphics/digikam/opencv.patch diff --git a/graphics/digikam/digikam.SlackBuild b/graphics/digikam/digikam.SlackBuild index f8f0bfed55..7a0f9a7e5d 100644 --- a/graphics/digikam/digikam.SlackBuild +++ b/graphics/digikam/digikam.SlackBuild @@ -25,7 +25,7 @@ PRGNAM=digikam VERSION=${VERSION:-4.12.0} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} TAG=${TAG:-_SBo} if [ -z "$ARCH" ]; then @@ -66,6 +66,10 @@ find -L . \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; +patch -p1 < $CWD/opencv.patch +cd extra/libkface +patch -p1 < $CWD/libkface.patch +cd ../.. mkdir -p build cd build cmake \ @@ -81,6 +85,7 @@ cd build -DDIGIKAMSC_COMPILE_LIBKVKONTAKTE=ON \ -DDIGIKAMSC_COMPILE_LIBKFACE=ON \ -DDIGIKAMSC_COMPILE_DOC=OFF \ + -DCMAKE_CXX_FLAGS:STRING="$(/usr/bin/Magick++-config --libs)" \ -DCMAKE_BUILD_TYPE=Release .. make make install DESTDIR=$PKG diff --git a/graphics/digikam/libkface.patch b/graphics/digikam/libkface.patch new file mode 100644 index 0000000000..e943bc5d2e --- /dev/null +++ b/graphics/digikam/libkface.patch @@ -0,0 +1,258 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4e83c8b..e399a25 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -30,7 +30,7 @@ add_definitions(-DKDE_DEFAULT_DEBUG_AREA=${LIBKFACE_AREA_CODE_GENERAL}) + 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) ++DETECT_OPENCV(2.4.9 core highgui objdetect face legacy imgproc) + + include_directories(${OpenCV_INCLUDE_DIRS}) + +diff --git a/cmake/modules/modules_opencv/FindOpenCV.cmake b/cmake/modules/modules_opencv/FindOpenCV.cmake +index 7580b32..6d3da76 100644 +--- a/cmake/modules/modules_opencv/FindOpenCV.cmake ++++ b/cmake/modules/modules_opencv/FindOpenCV.cmake +@@ -173,7 +173,6 @@ find_library(OpenCV_ML_LIBRARY + find_library(OpenCV_TRS_LIBRARY + NAMES trs + PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) +- + # + # Logic selecting required libs and headers + # +diff --git a/libkface/detection/opencvfacedetector.cpp b/libkface/detection/opencvfacedetector.cpp +index 7c420ae..28edeea 100644 +--- a/libkface/detection/opencvfacedetector.cpp ++++ b/libkface/detection/opencvfacedetector.cpp +@@ -138,11 +138,12 @@ public: + { + // 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; + } +- ++*/ + return cv::Size(0, 0); + } + +diff --git a/libkface/libopencv.h.cmake.in b/libkface/libopencv.h.cmake.in +index 0a1a958..e70fc0c 100644 +--- a/libkface/libopencv.h.cmake.in ++++ b/libkface/libopencv.h.cmake.in +@@ -51,13 +51,11 @@ + #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) ) + +-#include +-#include +-#include ++#include ++#include + + // for old-style code + #include +-#include + #include + #include + +diff --git a/libkface/recognition-opencv-lbph/facerec_borrowed.cpp b/libkface/recognition-opencv-lbph/facerec_borrowed.cpp +index 935a3d0..11aee02 100644 +--- a/libkface/recognition-opencv-lbph/facerec_borrowed.cpp ++++ b/libkface/recognition-opencv-lbph/facerec_borrowed.cpp +@@ -531,14 +531,5 @@ Ptr LBPHFaceRecognizer::create(int radius, int neighbors, in + 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 + + } // namespace KFaceIface +diff --git a/libkface/recognition-opencv-lbph/facerec_borrowed.h b/libkface/recognition-opencv-lbph/facerec_borrowed.h +index dd1ab16..22b14ac 100644 +--- a/libkface/recognition-opencv-lbph/facerec_borrowed.h ++++ b/libkface/recognition-opencv-lbph/facerec_borrowed.h +@@ -45,7 +45,7 @@ + namespace KFaceIface + { + +-class LBPHFaceRecognizer : public cv::FaceRecognizer ++class LBPHFaceRecognizer : public cv::face::FaceRecognizer + { + public: + +@@ -99,8 +99,8 @@ public: + + ~LBPHFaceRecognizer() {} + +- using cv::FaceRecognizer::save; +- using cv::FaceRecognizer::load; ++ using cv::face::FaceRecognizer::save; ++ using cv::face::FaceRecognizer::load; + + static cv::Ptr create(int radius=1, int neighbors=8, int grid_x=8, int grid_y=8, double threshold = DBL_MAX, PredictionStatistics statistics = NearestNeighbor); + +@@ -139,13 +139,31 @@ public: + /** + * Getter functions. + */ +- int neighbors() const { return m_neighbors; } +- int radius() const { return m_radius; } +- int grid_x() const { return m_grid_x; } +- int grid_y() const { return m_grid_y; } ++ 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 _histograms) { m_histograms = _histograms; } ++ std::vector 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; } + +- // NOTE: Implementation done through CV_INIT_ALGORITHM macro from OpenCV. +- cv::AlgorithmInfo* info() const; + + private: + +diff --git a/libkface/recognition-opencv-lbph/lbphfacemodel.cpp b/libkface/recognition-opencv-lbph/lbphfacemodel.cpp +index af8c6a5..75c5863 100644 +--- a/libkface/recognition-opencv-lbph/lbphfacemodel.cpp ++++ b/libkface/recognition-opencv-lbph/lbphfacemodel.cpp +@@ -61,7 +61,7 @@ LBPHFaceModel::LBPHFaceModel() + : cv::Ptr(LBPHFaceRecognizer::create()), + databaseId(0) + { +- ptr()->set("threshold", 100.0); ++ ptr()->setThreshold(100.0); + } + + LBPHFaceModel::~LBPHFaceModel() +@@ -70,7 +70,7 @@ LBPHFaceModel::~LBPHFaceModel() + + LBPHFaceRecognizer* LBPHFaceModel::ptr() + { +- LBPHFaceRecognizer* const ptr = cv::Ptr::operator KFaceIface::LBPHFaceRecognizer*(); ++ LBPHFaceRecognizer* const ptr = get(); + + if (!ptr) + kWarning() << "LBPHFaceRecognizer pointer is null"; +@@ -80,7 +80,7 @@ LBPHFaceRecognizer* LBPHFaceModel::ptr() + + const LBPHFaceRecognizer* LBPHFaceModel::ptr() const + { +- const LBPHFaceRecognizer* const ptr = cv::Ptr::operator const KFaceIface::LBPHFaceRecognizer*(); ++ const LBPHFaceRecognizer* const ptr = get(); + + if (!ptr) + kWarning() << "LBPHFaceRecognizer pointer is null"; +@@ -90,47 +90,47 @@ const LBPHFaceRecognizer* LBPHFaceModel::ptr() const + + int LBPHFaceModel::radius() const + { +- return ptr()->get("radius"); ++ return ptr()->getRadius(); + } + + void LBPHFaceModel::setRadius(int radius) + { +- ptr()->set("radius", radius); ++ ptr()->setRadius(radius); + } + + int LBPHFaceModel::neighbors() const + { +- return ptr()->get("neighbors"); ++ return ptr()->getNeighbors(); + } + + void LBPHFaceModel::setNeighbors(int neighbors) + { +- ptr()->set("neighbors", neighbors); ++ ptr()->setNeighbors(neighbors); + } + + int LBPHFaceModel::gridX() const + { +- return ptr()->get("grid_x"); ++ return ptr()->getGrid_x(); + } + + void LBPHFaceModel::setGridX(int grid_x) + { +- ptr()->set("grid_x", grid_x); ++ ptr()->setGrid_x(grid_x); + } + + int LBPHFaceModel::gridY() const + { +- return ptr()->get("grid_y"); ++ return ptr()->getGrid_y(); + } + + void LBPHFaceModel::setGridY(int grid_y) + { +- ptr()->set("grid_y", grid_y); ++ ptr()->setGrid_y(grid_y); + } + + OpenCVMatData LBPHFaceModel::histogramData(int index) const + { +- return OpenCVMatData(ptr()->get >("histograms").at(index)); ++ return OpenCVMatData(ptr()->getHistograms().at(index)); + } + + QList LBPHFaceModel::histogramMetadata() const +@@ -168,12 +168,12 @@ void LBPHFaceModel::setHistograms(const QList& histograms, const + m_histogramMetadata << metadata; + } + +- std::vector currentHistograms = ptr()->get >("histograms"); +- cv::Mat currentLabels = ptr()->get("labels"); ++ std::vector currentHistograms = ptr()->getHistograms(); ++ cv::Mat currentLabels = ptr()->getLabels(); + currentHistograms.insert(currentHistograms.end(), newHistograms.begin(), newHistograms.end()); + currentLabels.push_back(newLabels); +- ptr()->set("histograms", currentHistograms); +- ptr()->set("labels", currentLabels); ++ ptr()->setHistograms(currentHistograms); ++ ptr()->setLabels(currentLabels); + + /* + //Most cumbersome and inefficient way through a file storage which we were forced to use if we used standard OpenCV +@@ -215,7 +215,7 @@ void LBPHFaceModel::update(const std::vector& images, const std::vector + + // Update local information + // We assume new labels are simply appended +- cv::Mat currentLabels = ptr()->get("labels"); ++ cv::Mat currentLabels = ptr()->getLabels(); + + for (int i = m_histogramMetadata.size() ; i < currentLabels.rows ; i++) + { diff --git a/graphics/digikam/opencv.patch b/graphics/digikam/opencv.patch new file mode 100644 index 0000000000..029f5cdc4d --- /dev/null +++ b/graphics/digikam/opencv.patch @@ -0,0 +1,121 @@ +diff -up digikam-4.12.0/core/app/utils/libopencv.h.opencv3 digikam-4.12.0/core/app/utils/libopencv.h +--- digikam-4.12.0/core/app/utils/libopencv.h.opencv3 2015-08-18 15:32:24.635326685 +0200 ++++ digikam-4.12.0/core/app/utils/libopencv.h 2015-08-18 16:51:00.716761209 +0200 +@@ -46,17 +46,19 @@ + + #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) ) + +-#if OPENCV_TEST_VERSION(2,3,0) ++#if OPENCV_TEST_VERSION(2,5,0) + # include + # include + # include ++# include + #else + # include + # include + # include + # include ++# include + #endif + + // Restore warnings +diff -up digikam-4.12.0/core/libs/database/imgqsort/imgqsort.cpp.opencv3 digikam-4.12.0/core/libs/database/imgqsort/imgqsort.cpp +--- digikam-4.12.0/core/libs/database/imgqsort/imgqsort.cpp.opencv3 2015-08-18 17:17:24.003431310 +0200 ++++ digikam-4.12.0/core/libs/database/imgqsort/imgqsort.cpp 2015-08-18 17:25:14.761703338 +0200 +@@ -284,8 +284,8 @@ void ImgQSort::readImage() const + mixer.startFilterDirectly(); + + d->image.putImageData(mixer.getTargetImage().bits()); +- d->src = cvCreateMat(d->image.numPixels(), 3, CV_8UC3); // Create a matrix containing the pixel values of original image +- d->src_gray = cvCreateMat(d->image.numPixels(), 1, CV_8UC1); // Create a matrix containing the pixel values of grayscaled image ++ d->src = Mat(d->image.numPixels(), 3, CV_8UC3); // Create a matrix containing the pixel values of original image ++ d->src_gray = Mat(d->image.numPixels(), 1, CV_8UC1); // Create a matrix containing the pixel values of grayscaled image + + if (d->imq.detectNoise) + { +@@ -660,7 +660,7 @@ int ImgQSort::compressiondetector() cons + int countblocks = 0; + int number_of_blocks = 0; + int sum = 0; +- vector average_bottom, average_middle, average_top; ++ std::vector average_bottom, average_middle, average_top; + + // Go through 8 blocks at a time horizontally + // iterating through columns. +@@ -797,7 +797,7 @@ int ImgQSort::compressiondetector() cons + int ImgQSort::exposureamount() const + { + /// Separate the image in 3 places ( B, G and R ) +- vector bgr_planes; ++ std::vector bgr_planes; + split(d->src, bgr_planes); + + /// Establish the number of bins +diff -up digikam-4.12.0/core/libs/database/imgqsort/imgqsort.h.opencv3 digikam-4.12.0/core/libs/database/imgqsort/imgqsort.h +--- digikam-4.12.0/core/libs/database/imgqsort/imgqsort.h.opencv3 2015-08-18 17:17:54.923383497 +0200 ++++ digikam-4.12.0/core/libs/database/imgqsort/imgqsort.h 2015-08-18 17:27:54.225449446 +0200 +@@ -25,6 +25,10 @@ + #ifndef IMGQSORT_H + #define IMGQSORT_H + ++// Global includes ++ ++#include ++ + // Local includes + + #include "dimg.h" +diff -up digikam-4.12.0/extra/kipi-plugins/removeredeyes/detection/locators/haarclassifier/haarclassifierlocator.cpp.opencv3 digikam-4.12.0/extra/kipi-plugins/removeredeyes/detection/locators/haarclassifier/haarclassifierlocator.cpp +--- digikam-4.12.0/extra/kipi-plugins/removeredeyes/detection/locators/haarclassifier/haarclassifierlocator.cpp.opencv3 2015-08-18 16:06:08.240514617 +0200 ++++ digikam-4.12.0/extra/kipi-plugins/removeredeyes/detection/locators/haarclassifier/haarclassifierlocator.cpp 2015-08-18 16:19:07.774476511 +0200 +@@ -89,6 +89,13 @@ const QString HaarClassifierLocator::Pri + const QString HaarClassifierLocator::Private::configClassifierEntry("Classifier"); + + // -------------------------------------------------------- ++#if !(OPENCV_TEST_VERSION(2,5,0)) ++static void cvFillImage( CvArr* mat, double color) ++{ ++ cvSet( mat, cvColorToScalar(color, cvGetElemType(mat)), 0); ++} ++#endif ++ + + int HaarClassifierLocator::findPossibleEyes(double csf, int ngf, const char* classifierFile) + { +diff -up digikam-4.12.0/extra/kipi-plugins/removeredeyes/plugin/libopencv.h.opencv3 digikam-4.12.0/extra/kipi-plugins/removeredeyes/plugin/libopencv.h +--- digikam-4.12.0/extra/kipi-plugins/removeredeyes/plugin/libopencv.h.opencv3 2015-08-18 13:43:10.380772123 +0200 ++++ digikam-4.12.0/extra/kipi-plugins/removeredeyes/plugin/libopencv.h 2015-08-18 14:18:27.999977347 +0200 +@@ -53,12 +53,13 @@ + + #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) ) + +-#if OPENCV_TEST_VERSION(2,3,0) ++#include ++ ++#if OPENCV_TEST_VERSION(2,5,0) + #include + #include +-#include + #include + #include + #else +diff -up digikam-4.12.0/extra/kipi-plugins/removeredeyes/test/CMakeLists.txt.opencv3 digikam-4.12.0/extra/kipi-plugins/removeredeyes/test/CMakeLists.txt +--- digikam-4.12.0/extra/kipi-plugins/removeredeyes/test/CMakeLists.txt.opencv3 2015-08-18 15:08:31.973733608 +0200 ++++ digikam-4.12.0/extra/kipi-plugins/removeredeyes/test/CMakeLists.txt 2015-08-18 15:22:40.113991709 +0200 +@@ -4,7 +4,7 @@ + # Redistribution and use is allowed according to the terms of the BSD license. + # For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +-if(NOT WIN32) ++if(NOT WIN32 AND (${OpenCV_VERSION} VERSION_LESS 3.0.0)) + + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../plugin + ${CMAKE_CURRENT_SOURCE_DIR}/../libcvblobs + -- cgit v1.2.3