aboutsummaryrefslogtreecommitdiff
path: root/libraries/frei0r
diff options
context:
space:
mode:
authorMatteo Bernardini <ponce@slackbuilds.org>2020-01-01 23:02:37 +0100
committerRobby Workman <rworkman@slackbuilds.org>2020-01-03 02:13:47 -0600
commit0854b1ffc6116b94b0b03a73c8c9fea6ad04e0b5 (patch)
treef194c2c7b04f2d112452e3e6d785d12027046ea7 /libraries/frei0r
parentc7fe5806ba4445e70cce8636031864e3c61afbef (diff)
libraries/frei0r: Updated for version 1.7.0.
Apply upstream patches that (hopefully) fix opencv support Signed-off-by: Matteo Bernardini <ponce@slackbuilds.org>
Diffstat (limited to 'libraries/frei0r')
-rw-r--r--libraries/frei0r/frei0r.SlackBuild17
-rw-r--r--libraries/frei0r/frei0r.info6
-rw-r--r--libraries/frei0r/patch_imgproc.diff10
-rw-r--r--libraries/frei0r/patches/01.b27f03c.patch27
-rw-r--r--libraries/frei0r/patches/02.35ed870.patch167
5 files changed, 204 insertions, 23 deletions
diff --git a/libraries/frei0r/frei0r.SlackBuild b/libraries/frei0r/frei0r.SlackBuild
index 0814b29a70ab5..51193323e5380 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 <ponce@slackbuilds.org>, Pisa, Italy
+# Copyright 2012-2020 Matteo Bernardini <ponce@slackbuilds.org>, 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 47dbd52a5f3a7..f50f66034b92e 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 55449f84a8e26..0000000000000
--- 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 <stdlib.h>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
-+#include <opencv2/imgproc.hpp>
-
-
- #include <frei0r.hpp>
diff --git a/libraries/frei0r/patches/01.b27f03c.patch b/libraries/frei0r/patches/01.b27f03c.patch
new file mode 100644
index 0000000000000..49b8e017b6a33
--- /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?= <zmoelnig@iem.at>
+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 <stdio.h>
+ #include <string.h>
+ #include <opencv2/opencv.hpp>
++#if CV_MAJOR_VERSION >= 4
++# include <opencv2/imgproc/imgproc_c.h>
++#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 0000000000000..d2f9c629bb601
--- /dev/null
+++ b/libraries/frei0r/patches/02.35ed870.patch
@@ -0,0 +1,167 @@
+From 35ed870a3b4e7977119272d3232aaa947bea22ac Mon Sep 17 00:00:00 2001
+From: kwizart <kwizart@gmail.com>
+Date: Mon, 30 Dec 2019 14:44:51 +0100
+Subject: [PATCH] Update facebl0r to c++ api
+
+Signed-off-by: kwizart <kwizart@gmail.com>
+---
+ 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 <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
+-#include <opencv2/opencv.hpp>
++#include <opencv2/core.hpp>
++#include <opencv2/imgproc/imgproc_c.h>
++#include <opencv2/imgproc.hpp>
++#include <opencv2/objdetect.hpp>
++#include <opencv2/video/tracking.hpp>
+ #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<cv::Rect> 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) {