From 0854b1ffc6116b94b0b03a73c8c9fea6ad04e0b5 Mon Sep 17 00:00:00 2001 From: Matteo Bernardini Date: Wed, 1 Jan 2020 23:02:37 +0100 Subject: libraries/frei0r: Updated for version 1.7.0. Apply upstream patches that (hopefully) fix opencv support Signed-off-by: Matteo Bernardini --- libraries/frei0r/frei0r.SlackBuild | 17 ++- libraries/frei0r/frei0r.info | 6 +- libraries/frei0r/patch_imgproc.diff | 10 -- libraries/frei0r/patches/01.b27f03c.patch | 27 +++++ libraries/frei0r/patches/02.35ed870.patch | 167 ++++++++++++++++++++++++++++++ 5 files changed, 204 insertions(+), 23 deletions(-) delete mode 100644 libraries/frei0r/patch_imgproc.diff create mode 100644 libraries/frei0r/patches/01.b27f03c.patch create mode 100644 libraries/frei0r/patches/02.35ed870.patch diff --git a/libraries/frei0r/frei0r.SlackBuild b/libraries/frei0r/frei0r.SlackBuild index 0814b29a70..51193323e5 100644 --- a/libraries/frei0r/frei0r.SlackBuild +++ b/libraries/frei0r/frei0r.SlackBuild @@ -4,7 +4,7 @@ # Copyright 2009, Jonathan Larsen (agentc0re), SLC, UT # Contact Info: agentc0re 'AT' learnix 'DOT' net -# Copyright 2012-2018 Matteo Bernardini , Pisa, Italy +# Copyright 2012-2020 Matteo Bernardini , Pisa, Italy # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -39,9 +39,11 @@ # *Updated for 1.6.0 # Mar 14th, 2018 # *Updated for 1.6.1 +# Jan 1st, 2020 +# *Updated for 1.7.0 PRGNAM=frei0r -VERSION=${VERSION:-1.6.1} +VERSION=${VERSION:-1.7.0} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} @@ -87,14 +89,8 @@ 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 {} \; -# Needed by opencv >= 3.4.2 -patch -p0 < $CWD/patch_imgproc.diff - -# Fix installation paths -sed -i \ - -e "s|lib/|lib$LIBDIRSUFFIX/|" \ - -e "s|lib\"|lib$LIBDIRSUFFIX\"|" \ - CMakeLists.txt || exit 1 +# Apply upstream patches +for i in $CWD/patches/* ; do patch -p1 < $i ; done mkdir -p build cd build @@ -102,6 +98,7 @@ cd build -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib$LIBDIRSUFFIX \ -DCMAKE_BUILD_TYPE=Release .. make make install DESTDIR=$PKG diff --git a/libraries/frei0r/frei0r.info b/libraries/frei0r/frei0r.info index 47dbd52a5f..f50f66034b 100644 --- a/libraries/frei0r/frei0r.info +++ b/libraries/frei0r/frei0r.info @@ -1,8 +1,8 @@ PRGNAM="frei0r" -VERSION="1.6.1" +VERSION="1.7.0" HOMEPAGE="https://frei0r.dyne.org" -DOWNLOAD="http://ponce.cc/slackware/sources/repo/frei0r-plugins-1.6.1.tar.gz" -MD5SUM="bb85573340029e5d0ae1c21d0685461d" +DOWNLOAD="https://files.dyne.org/frei0r/releases/frei0r-plugins-1.7.0.tar.gz" +MD5SUM="78a7c7511cbda93013147563dc7a3618" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" diff --git a/libraries/frei0r/patch_imgproc.diff b/libraries/frei0r/patch_imgproc.diff deleted file mode 100644 index 55449f84a8..0000000000 --- a/libraries/frei0r/patch_imgproc.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- src/filter/facebl0r/facebl0r.cpp.orig 2018-07-14 20:49:01.564511495 +1000 -+++ src/filter/facebl0r/facebl0r.cpp 2018-07-14 18:47:44.430685507 +1000 -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - - - #include diff --git a/libraries/frei0r/patches/01.b27f03c.patch b/libraries/frei0r/patches/01.b27f03c.patch new file mode 100644 index 0000000000..49b8e017b6 --- /dev/null +++ b/libraries/frei0r/patches/01.b27f03c.patch @@ -0,0 +1,27 @@ +From b27f03c8d51c34cd5f79e0399bb0024ca94ea813 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= +Date: Tue, 10 Dec 2019 15:01:52 +0100 +Subject: [PATCH] facedetect: include imgproc/imgproc_c.h when using OpenCV-4+ + +imgproc_c.h defines the constants CV_BGR2GRAY, CV_FILLED & CV_AA. + +it also includes "core/core_c.h", which then provides + `cvGetTickCount()` and `cvGetTickFrequency()` +--- + src/filter/facedetect/facedetect.cpp | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/filter/facedetect/facedetect.cpp b/src/filter/facedetect/facedetect.cpp +index 1906962..4e7d476 100644 +--- a/src/filter/facedetect/facedetect.cpp ++++ b/src/filter/facedetect/facedetect.cpp +@@ -21,6 +21,9 @@ + #include + #include + #include ++#if CV_MAJOR_VERSION >= 4 ++# include ++#endif + #include "frei0r.hpp" + #include "frei0r_math.h" + diff --git a/libraries/frei0r/patches/02.35ed870.patch b/libraries/frei0r/patches/02.35ed870.patch new file mode 100644 index 0000000000..d2f9c629bb --- /dev/null +++ b/libraries/frei0r/patches/02.35ed870.patch @@ -0,0 +1,167 @@ +From 35ed870a3b4e7977119272d3232aaa947bea22ac Mon Sep 17 00:00:00 2001 +From: kwizart +Date: Mon, 30 Dec 2019 14:44:51 +0100 +Subject: [PATCH] Update facebl0r to c++ api + +Signed-off-by: kwizart +--- + src/filter/facebl0r/facebl0r.cpp | 56 ++++++++++++++++++-------------- + 1 file changed, 32 insertions(+), 24 deletions(-) + +diff --git a/src/filter/facebl0r/facebl0r.cpp b/src/filter/facebl0r/facebl0r.cpp +index 17446cc..ba146d0 100644 +--- a/src/filter/facebl0r/facebl0r.cpp ++++ b/src/filter/facebl0r/facebl0r.cpp +@@ -18,7 +18,11 @@ + #include + #include + #include +-#include ++#include ++#include ++#include ++#include ++#include + #include "frei0r.hpp" + #include "frei0r_math.h" + +@@ -30,7 +34,7 @@ typedef struct { + + CvHistogram* hist; //histogram of hue in original face image + +- CvRect prev_rect; //location of face in previous frame ++ cv::Rect prev_rect; //location of face in previous frame + CvBox2D curr_box; //current face location estimate + } TrackedObj; + +@@ -53,7 +57,7 @@ class FaceBl0r: public frei0r::filter { + void update_hue_image (const IplImage* image, TrackedObj* imgs); + + //trackface +- CvRect* detect_face (IplImage*, CvHaarClassifierCascade*, CvMemStorage*); ++ CvRect* detect_face (IplImage*, cv::CascadeClassifier&, CvMemStorage*); + + + TrackedObj* tracked_obj; +@@ -63,7 +67,7 @@ class FaceBl0r: public frei0r::filter { + //used by capture_video_frame, so we don't have to keep creating. + IplImage* image; + +- CvHaarClassifierCascade* cascade; ++ cv::CascadeClassifier cascade; + CvMemStorage* storage; + + // plugin parameters +@@ -96,7 +100,7 @@ FaceBl0r::FaceBl0r(int wdt, int hgt) { + tracked_obj = 0; + face_found = 0; + +- cascade = 0; ++ //cascade = 0; + storage = 0; + + classifier = "/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"; +@@ -124,7 +128,7 @@ FaceBl0r::~FaceBl0r() { + if(tracked_obj) + destroy_tracked_object(tracked_obj); + +- if(cascade) cvReleaseHaarClassifierCascade(&cascade); ++ //if(cascade) cvReleaseHaarClassifierCascade(&cascade); + if(storage) cvReleaseMemStorage(&storage); + + } +@@ -133,7 +137,7 @@ void FaceBl0r::update(double time, + uint32_t* out, + const uint32_t* in) { + +- if (!cascade) { ++ if (cascade.empty()) { + cvSetNumThreads(cvRound(threads * 100)); + if (classifier.length() > 0) { + if (classifier == old_classifier) { +@@ -142,8 +146,7 @@ void FaceBl0r::update(double time, + return; + } else old_classifier = classifier; + +- cascade = (CvHaarClassifierCascade*) cvLoad(classifier.c_str(), 0, 0, 0 ); +- if (!cascade) { ++ if (!cascade.load(classifier.c_str())) { + fprintf(stderr, "ERROR in filter facebl0r, classifier cascade not found:\n"); + fprintf(stderr, " %s\n", classifier.c_str()); + memcpy(out, in, size * 4); +@@ -234,30 +237,33 @@ void FaceBl0r::update(double time, + + /* Given an image and a classider, detect and return region. */ + CvRect* FaceBl0r::detect_face (IplImage* image, +- CvHaarClassifierCascade* cascade, ++ cv::CascadeClassifier &cascade, + CvMemStorage* storage) { + + CvRect* rect = 0; ++ std::vector faces; ++ cv::Mat gray_mat; + +- if (cascade && storage) { ++ if (!cascade.empty() && storage) { + //use an equalized gray image for better recognition + IplImage* gray = cvCreateImage(cvSize(image->width, image->height), 8, 1); + cvCvtColor(image, gray, CV_BGR2GRAY); + cvEqualizeHist(gray, gray); + cvClearMemStorage(storage); ++ gray_mat = cv::cvarrToMat(&gray); + + //get a sequence of faces in image + int min = cvRound(smallest * 1000); +- CvSeq *faces = cvHaarDetectObjects(gray, cascade, storage, ++ cascade.detectMultiScale(gray_mat, faces, + search_scale * 10.0, + cvRound(neighbors * 100), +- CV_HAAR_FIND_BIGGEST_OBJECT|//since we track only the first, get the biggest +- CV_HAAR_DO_CANNY_PRUNING, //skip regions unlikely to contain a face +- cvSize(min, min)); ++ cv::CASCADE_FIND_BIGGEST_OBJECT|//since we track only the first, get the biggest ++ cv::CASCADE_DO_CANNY_PRUNING, //skip regions unlikely to contain a face ++ cvSize(min,min)); + + //if one or more faces are detected, return the first one +- if(faces && faces->total) +- rect = (CvRect*) cvGetSeqElem(faces, 0); ++ if(faces.size() > 0) ++ rect = (CvRect*) &faces.front(); + + cvReleaseImage(&gray); + } +@@ -321,7 +327,7 @@ void FaceBl0r::destroy_tracked_object (TrackedObj* obj) { + + /* Given an image and tracked object, return box position. */ + CvBox2D FaceBl0r::camshift_track_face (IplImage* image, TrackedObj* obj) { +- CvConnectedComp components; ++ //CvConnectedComp components; + + //create a new hue image + update_hue_image(image, obj); +@@ -330,16 +336,18 @@ CvBox2D FaceBl0r::camshift_track_face (IplImage* image, TrackedObj* obj) { + cvCalcBackProject(&obj->hue, obj->prob, obj->hist); + cvAnd(obj->prob, obj->mask, obj->prob, 0); + ++ cv::Mat obj_prob_mat = cv::cvarrToMat(&obj->prob); ++ + //use CamShift to find the center of the new face probability +- cvCamShift(obj->prob, obj->prev_rect, +- cvTermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1), +- &components, &obj->curr_box); ++ cv::RotatedRect rot_rect = cv::CamShift(obj_prob_mat, obj->prev_rect, ++ cvTermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1)); ++ // &components, &obj->curr_box); + + //update face location and angle +- obj->prev_rect = components.rect; +- obj->curr_box.angle = -obj->curr_box.angle; ++ //obj->prev_rect = components.rect; ++ //obj->curr_box.angle = -obj->curr_box.angle; + +- return obj->curr_box; ++ return rot_rect; + } + + void FaceBl0r::update_hue_image (const IplImage* image, TrackedObj* obj) { -- cgit v1.2.3