Commit 0d7217f4bc144118ac697ab3c13f11a330db1762

Authored by Scott Klum
2 parents 9e9e9d5d 635d2dc2

Merge branch 'master' of https://github.com/biometrics/openbr

Showing 57 changed files with 562 additions and 244 deletions
openbr/core/qtutils.cpp
@@ -290,10 +290,10 @@ QPointF QtUtils::toPoint(const QString &string) @@ -290,10 +290,10 @@ QPointF QtUtils::toPoint(const QString &string)
290 QStringList values = string.split(','); 290 QStringList values = string.split(',');
291 if (values.size() == 2) { 291 if (values.size() == 2) {
292 values[1].chop(1); 292 values[1].chop(1);
293 - QPointF point(values[0].mid(1).toFloat(), values[1].toFloat());  
294 - return point; 293 + return QPointF(values[0].mid(1).toFloat(), values[1].toFloat());
295 } 294 }
296 - else qFatal("Failed to convert %s to QPoint format.", qPrintable(string)); 295 + else qFatal("Failed to convert %s to QPointF format.", qPrintable(string));
  296 + return QPointF();
297 } 297 }
298 298
299 QRectF QtUtils::toRect(const QString &string) 299 QRectF QtUtils::toRect(const QString &string)
@@ -301,10 +301,10 @@ QRectF QtUtils::toRect(const QString &string) @@ -301,10 +301,10 @@ QRectF QtUtils::toRect(const QString &string)
301 QStringList values = string.split(','); 301 QStringList values = string.split(',');
302 if (values.size() == 4) { 302 if (values.size() == 4) {
303 values[3].chop(1); 303 values[3].chop(1);
304 - QRectF rect(values[0].mid(1).toFloat(), values[1].toFloat(), values[2].toFloat(), values[3].toFloat());  
305 - return rect; 304 + return QRectF(values[0].mid(1).toFloat(), values[1].toFloat(), values[2].toFloat(), values[3].toFloat());
306 } 305 }
307 - else qFatal("Failed to convert %s to QRect format.", qPrintable(string)); 306 + else qFatal("Failed to convert %s to QRectF format.", qPrintable(string));
  307 + return QRectF();
308 } 308 }
309 309
310 bool QtUtils::runRScript(const QString &file) 310 bool QtUtils::runRScript(const QString &file)
openbr/frvt2012.cpp
@@ -15,6 +15,7 @@ @@ -15,6 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <openbr/openbr_plugin.h> 17 #include <openbr/openbr_plugin.h>
  18 +#include <openbr/plugins/openbr_internal.h>
18 19
19 #include "frvt2012.h" 20 #include "frvt2012.h"
20 #include "core/distance_sse.h" 21 #include "core/distance_sse.h"
openbr/openbr_plugin.cpp
@@ -25,6 +25,7 @@ @@ -25,6 +25,7 @@
25 #include <algorithm> 25 #include <algorithm>
26 #include <iostream> 26 #include <iostream>
27 #include <openbr/openbr_plugin.h> 27 #include <openbr/openbr_plugin.h>
  28 +#include <openbr/plugins/openbr_internal.h>
28 29
29 #ifndef BR_EMBEDDED 30 #ifndef BR_EMBEDDED
30 #include <QApplication> 31 #include <QApplication>
openbr/openbr_plugin.h
@@ -1085,6 +1085,14 @@ public: @@ -1085,6 +1085,14 @@ public:
1085 return dst; 1085 return dst;
1086 } 1086 }
1087 1087
  1088 + /*!
  1089 + * \brief Perform the minimum amount of work necessary to make a
  1090 + * transform that can be used safely from a different thread than this
  1091 + * transform. For transforms that aren't time-varying, nothing needs to be
  1092 + * done, returning this is sufficient.
  1093 + */
  1094 + virtual Transform * smartCopy() { return this;}
  1095 +
1088 protected: 1096 protected:
1089 Transform(bool independent = true, bool trainable = true); /*!< \brief Construct a transform. */ 1097 Transform(bool independent = true, bool trainable = true); /*!< \brief Construct a transform. */
1090 inline Transform *make(const QString &description) { return make(description, this); } /*!< \brief Make a subtransform. */ 1098 inline Transform *make(const QString &description) { return make(description, this); } /*!< \brief Make a subtransform. */
@@ -1125,133 +1133,6 @@ inline QDataStream &amp;operator&gt;&gt;(QDataStream &amp;stream, Transform &amp;f) @@ -1125,133 +1133,6 @@ inline QDataStream &amp;operator&gt;&gt;(QDataStream &amp;stream, Transform &amp;f)
1125 f.load(stream); 1133 f.load(stream);
1126 return stream; 1134 return stream;
1127 } 1135 }
1128 -  
1129 -/*!  
1130 - * \brief A br::Transform for which the results of project may change due to prior calls to project  
1131 - */  
1132 -class BR_EXPORT TimeVaryingTransform : public Transform  
1133 -{  
1134 - Q_OBJECT  
1135 -  
1136 -public:  
1137 - virtual bool timeVarying() const { return true; }  
1138 -  
1139 - virtual void project(const Template &src, Template &dst) const  
1140 - {  
1141 - qFatal("No const project defined for time-varying transform");  
1142 - (void) dst; (void) src;  
1143 - }  
1144 -  
1145 - virtual void project(const TemplateList &src, TemplateList &dst) const  
1146 - {  
1147 - qFatal("No const project defined for time-varying transform");  
1148 - (void) dst; (void) src;  
1149 - }  
1150 -  
1151 - // Get a compile failure if this isn't here to go along with the other  
1152 - // projectUpdate, no idea why  
1153 - virtual void projectUpdate(const Template & src, Template & dst)  
1154 - {  
1155 - (void) src; (void) dst;  
1156 - qFatal("do something useful");  
1157 - }  
1158 -  
1159 - virtual void projectUpdate(const TemplateList &src, TemplateList &dst)  
1160 - {  
1161 - foreach (const Template & src_part, src) {  
1162 - Template out;  
1163 - projectUpdate(src_part, out);  
1164 - dst.append(out);  
1165 - }  
1166 - }  
1167 -  
1168 -protected:  
1169 - TimeVaryingTransform(bool independent = true, bool trainable = true) : Transform(independent, trainable) {}  
1170 -};  
1171 -  
1172 -/*!  
1173 - * \brief A br::Transform expecting multiple matrices per template.  
1174 - */  
1175 -class BR_EXPORT MetaTransform : public Transform  
1176 -{  
1177 - Q_OBJECT  
1178 -  
1179 -protected:  
1180 - MetaTransform() : Transform(false) {}  
1181 -};  
1182 -  
1183 -/*!  
1184 - * \brief A br::Transform that does not require training data.  
1185 - */  
1186 -class BR_EXPORT UntrainableTransform : public Transform  
1187 -{  
1188 - Q_OBJECT  
1189 -  
1190 -protected:  
1191 - UntrainableTransform(bool independent = true) : Transform(independent, false) {} /*!< \brief Construct an untrainable transform. */  
1192 -  
1193 -private:  
1194 - Transform *clone() const { return const_cast<UntrainableTransform*>(this); }  
1195 - void train(const TemplateList &data) { (void) data; }  
1196 - void store(QDataStream &stream) const { (void) stream; }  
1197 - void load(QDataStream &stream) { (void) stream; }  
1198 -};  
1199 -  
1200 -/*!  
1201 - * \brief A br::MetaTransform that does not require training data.  
1202 - */  
1203 -class BR_EXPORT UntrainableMetaTransform : public UntrainableTransform  
1204 -{  
1205 - Q_OBJECT  
1206 -  
1207 -protected:  
1208 - UntrainableMetaTransform() : UntrainableTransform(false) {}  
1209 -};  
1210 -  
1211 -/*!  
1212 - * \brief A MetaTransform that aggregates some sub-transforms  
1213 - */  
1214 -class BR_EXPORT CompositeTransform : public TimeVaryingTransform  
1215 -{  
1216 - Q_OBJECT  
1217 -  
1218 -public:  
1219 - Q_PROPERTY(QList<br::Transform*> transforms READ get_transforms WRITE set_transforms RESET reset_transforms)  
1220 - BR_PROPERTY(QList<br::Transform*>, transforms, QList<br::Transform*>())  
1221 -  
1222 - virtual void project(const Template &src, Template &dst) const  
1223 - {  
1224 - if (timeVarying()) qFatal("No const project defined for time-varying transform");  
1225 - _project(src, dst);  
1226 - }  
1227 -  
1228 - virtual void project(const TemplateList &src, TemplateList &dst) const  
1229 - {  
1230 - if (timeVarying()) qFatal("No const project defined for time-varying transform");  
1231 - _project(src, dst);  
1232 - }  
1233 -  
1234 - bool timeVarying() const { return isTimeVarying; }  
1235 -  
1236 - void init()  
1237 - {  
1238 - isTimeVarying = false;  
1239 - trainable = false;  
1240 - foreach (const br::Transform *transform, transforms) {  
1241 - isTimeVarying = isTimeVarying || transform->timeVarying();  
1242 - trainable = trainable || transform->trainable;  
1243 - }  
1244 - }  
1245 -  
1246 -protected:  
1247 - bool isTimeVarying;  
1248 -  
1249 - virtual void _project(const Template & src, Template & dst) const = 0;  
1250 - virtual void _project(const TemplateList & src, TemplateList & dst) const = 0;  
1251 -  
1252 - CompositeTransform() : TimeVaryingTransform(false) {}  
1253 -};  
1254 -  
1255 /*! @}*/ 1136 /*! @}*/
1256 1137
1257 /*! 1138 /*!
openbr/plugins/algorithms.cpp
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * limitations under the License. * 14 * limitations under the License. *
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 -#include <openbr/openbr_plugin.h> 17 +#include "openbr_internal.h"
18 18
19 namespace br 19 namespace br
20 { 20 {
@@ -42,7 +42,8 @@ class AlgorithmsInitializer : public Initializer @@ -42,7 +42,8 @@ class AlgorithmsInitializer : public Initializer
42 Globals->abbreviations.insert("OpenBR", "FaceRecognition"); 42 Globals->abbreviations.insert("OpenBR", "FaceRecognition");
43 Globals->abbreviations.insert("GenderEstimation", "GenderClassification"); 43 Globals->abbreviations.insert("GenderEstimation", "GenderClassification");
44 Globals->abbreviations.insert("AgeEstimation", "AgeRegression"); 44 Globals->abbreviations.insert("AgeEstimation", "AgeRegression");
45 - Globals->abbreviations.insert("FaceRecognitionHoG", "{PP5Register+Affine(128,128,0.25,0.35)+Cvt(Gray)}+Gradient+Bin(0,360,9,true)+Merge+Integral+RecursiveIntegralSampler(4,2,8,Center(Hellinger)+LDA(.95)+Normalize(L1)+Div(3)+ProductQuantization(3,L1,true)[fraction=0.2]):RecursiveProductQuantization"); 45 + Globals->abbreviations.insert("FaceRecognition2", "{PP5Register+Affine(128,128,0.25,0.35)+Cvt(Gray)}+(Gradient+Bin(0,360,9,true))/(Blur(1)+Gamma(0.2)+DoG(1,2)+ContrastEq(0.1,10)+LBP(1,2,true)+Bin(0,10,10,true))+Merge+Integral+RecursiveIntegralSampler(4,2,8,Center(Hellinger)+LDA(.95)+Normalize(L1)+Div(3)+ProductQuantization(3,L1,true)[fraction=0.2]):RecursiveProductQuantization");
  46 + Globals->abbreviations.insert("FaceRecognitionHoG", "{PP5Register+Affine(128,128,0.25,0.35)+Cvt(Gray)}+Gradient+Bin(0,360,9)+KernelHash(9,81)+Bin(0,81,81,true)+Merge+Integral+RecursiveIntegralSampler(4,2,8,LDA(.95)+Normalize(L1)+Div(3)+ProductQuantization(3,L1,true)[fraction=0.2]):RecursiveProductQuantization");
46 47
47 // Generic Image Processing 48 // Generic Image Processing
48 Globals->abbreviations.insert("SIFT", "Open+KeyPointDetector(SIFT)+KeyPointDescriptor(SIFT):KeyPointMatcher(BruteForce)"); 49 Globals->abbreviations.insert("SIFT", "Open+KeyPointDetector(SIFT)+KeyPointDescriptor(SIFT):KeyPointMatcher(BruteForce)");
@@ -50,7 +51,6 @@ class AlgorithmsInitializer : public Initializer @@ -50,7 +51,6 @@ class AlgorithmsInitializer : public Initializer
50 Globals->abbreviations.insert("SmallSIFT", "Open+LimitSize(512)+KeyPointDetector(SIFT)+KeyPointDescriptor(SIFT):KeyPointMatcher(BruteForce)"); 51 Globals->abbreviations.insert("SmallSIFT", "Open+LimitSize(512)+KeyPointDetector(SIFT)+KeyPointDescriptor(SIFT):KeyPointMatcher(BruteForce)");
51 Globals->abbreviations.insert("SmallSURF", "Open+LimitSize(512)+KeyPointDetector(SURF)+KeyPointDescriptor(SURF):KeyPointMatcher(BruteForce)"); 52 Globals->abbreviations.insert("SmallSURF", "Open+LimitSize(512)+KeyPointDetector(SURF)+KeyPointDescriptor(SURF):KeyPointMatcher(BruteForce)");
52 Globals->abbreviations.insert("ColorHist", "Open+LimitSize(512)!EnsureChannels(3)+SplitChannels+Hist(256,0,8)+Cat+Normalize(L1):L2"); 53 Globals->abbreviations.insert("ColorHist", "Open+LimitSize(512)!EnsureChannels(3)+SplitChannels+Hist(256,0,8)+Cat+Normalize(L1):L2");
53 - Globals->abbreviations.insert("ImageRetrieval", "Open+Cvt(Gray)+Cascade(FrontalFace)+ASEFEyes+Affine(88,88,0.25,0.35)+Gradient+Bin(0,360,8,true)+Merge+Integral+IntegralSampler+WordWise(RowWisePCA(8)+RowWiseMeanCenter+Binarize,RowWisePCA)+Sentence:SentenceSimilarity");  
54 54
55 // Hash 55 // Hash
56 Globals->abbreviations.insert("FileName", "Name+Identity:Identical"); 56 Globals->abbreviations.insert("FileName", "Name+Identity:Identical");
openbr/plugins/cascade.cpp
@@ -15,8 +15,7 @@ @@ -15,8 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/objdetect/objdetect.hpp> 17 #include <opencv2/objdetect/objdetect.hpp>
18 -#include <openbr/openbr_plugin.h>  
19 - 18 +#include "openbr_internal.h"
20 #include "openbr/core/opencvutils.h" 19 #include "openbr/core/opencvutils.h"
21 #include "openbr/core/resource.h" 20 #include "openbr/core/resource.h"
22 21
openbr/plugins/cluster.cpp
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * limitations under the License. * 14 * limitations under the License. *
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 -#include <openbr/openbr_plugin.h> 17 +#include "openbr_internal.h"
18 #include <opencv2/flann/flann.hpp> 18 #include <opencv2/flann/flann.hpp>
19 19
20 #include "openbr/core/opencvutils.h" 20 #include "openbr/core/opencvutils.h"
openbr/plugins/crop.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 #include "openbr/core/opencvutils.h" 20 #include "openbr/core/opencvutils.h"
21 21
openbr/plugins/ct8.cpp
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 #include <exception> 11 #include <exception>
12 #include <string> 12 #include <string>
13 #include <vector> 13 #include <vector>
14 -#include <openbr/openbr_plugin.h> 14 +#include "openbr_internal.h"
15 15
16 #include "core/resource.h" 16 #include "core/resource.h"
17 17
openbr/plugins/cvt.cpp
@@ -15,8 +15,7 @@ @@ -15,8 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h>  
19 - 18 +#include "openbr_internal.h"
20 #include "openbr/core/opencvutils.h" 19 #include "openbr/core/opencvutils.h"
21 20
22 using namespace cv; 21 using namespace cv;
openbr/plugins/denoising.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/photo/photo.hpp> 17 #include <opencv2/photo/photo.hpp>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 using namespace cv; 20 using namespace cv;
21 21
openbr/plugins/distance.cpp
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 #include <QFutureSynchronizer> 17 #include <QFutureSynchronizer>
18 #include <QtConcurrentRun> 18 #include <QtConcurrentRun>
19 #include <opencv2/imgproc/imgproc.hpp> 19 #include <opencv2/imgproc/imgproc.hpp>
20 -#include <openbr/openbr_plugin.h> 20 +#include "openbr_internal.h"
21 21
22 #include "openbr/core/distance_sse.h" 22 #include "openbr/core/distance_sse.h"
23 #include "openbr/core/qtutils.h" 23 #include "openbr/core/qtutils.h"
openbr/plugins/draw.cpp
@@ -15,8 +15,7 @@ @@ -15,8 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/highgui/highgui.hpp> 17 #include <opencv2/highgui/highgui.hpp>
18 -#include <openbr/openbr_plugin.h>  
19 - 18 +#include "openbr_internal.h"
20 #include "openbr/core/opencvutils.h" 19 #include "openbr/core/opencvutils.h"
21 20
22 using namespace cv; 21 using namespace cv;
openbr/plugins/eigen3.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <Eigen/Dense> 17 #include <Eigen/Dense>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 #include "openbr/core/common.h" 20 #include "openbr/core/common.h"
21 #include "openbr/core/eigenutils.h" 21 #include "openbr/core/eigenutils.h"
openbr/plugins/eyes.cpp
@@ -34,8 +34,7 @@ @@ -34,8 +34,7 @@
34 */ 34 */
35 35
36 #include <opencv2/imgproc/imgproc.hpp> 36 #include <opencv2/imgproc/imgproc.hpp>
37 -#include <openbr/openbr_plugin.h>  
38 - 37 +#include "openbr_internal.h"
39 #include "openbr/core/opencvutils.h" 38 #include "openbr/core/opencvutils.h"
40 39
41 using namespace cv; 40 using namespace cv;
openbr/plugins/fill.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/photo/photo.hpp> 17 #include <opencv2/photo/photo.hpp>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 using namespace cv; 20 using namespace cv;
21 21
openbr/plugins/filter.cpp
@@ -15,8 +15,7 @@ @@ -15,8 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h>  
19 - 18 +#include "openbr_internal.h"
20 #include "openbr/core/tanh_sse.h" 19 #include "openbr/core/tanh_sse.h"
21 20
22 using namespace cv; 21 using namespace cv;
openbr/plugins/format.cpp
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 #include <QtXml> 19 #include <QtXml>
20 #endif // BR_EMBEDDED 20 #endif // BR_EMBEDDED
21 #include <opencv2/highgui/highgui.hpp> 21 #include <opencv2/highgui/highgui.hpp>
22 -#include <openbr/openbr_plugin.h> 22 +#include "openbr_internal.h"
23 23
24 #include "openbr/core/bee.h" 24 #include "openbr/core/bee.h"
25 #include "openbr/core/opencvutils.h" 25 #include "openbr/core/opencvutils.h"
@@ -245,6 +245,31 @@ BR_REGISTER(Format, DefaultFormat) @@ -245,6 +245,31 @@ BR_REGISTER(Format, DefaultFormat)
245 245
246 /*! 246 /*!
247 * \ingroup formats 247 * \ingroup formats
  248 + * \brief Reads a NIST LFFS file.
  249 + * \author Josh Klontz \cite jklontz
  250 + */
  251 +class lffsFormat : public Format
  252 +{
  253 + Q_OBJECT
  254 +
  255 + Template read() const
  256 + {
  257 + QByteArray byteArray;
  258 + QtUtils::readFile(file.name, byteArray);
  259 + return Mat(1, byteArray.size(), CV_8UC1, byteArray.data()).clone();
  260 + }
  261 +
  262 + void write(const Template &t) const
  263 + {
  264 + QByteArray byteArray((const char*)t.m().data, t.m().total()*t.m().elemSize());
  265 + QtUtils::writeFile(file.name, byteArray);
  266 + }
  267 +};
  268 +
  269 +BR_REGISTER(Format, lffsFormat)
  270 +
  271 +/*!
  272 + * \ingroup formats
248 * \brief Reads a NIST BEE similarity matrix. 273 * \brief Reads a NIST BEE similarity matrix.
249 * \author Josh Klontz \cite jklontz 274 * \author Josh Klontz \cite jklontz
250 */ 275 */
openbr/plugins/gallery.cpp
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 #include <QSqlRecord> 24 #include <QSqlRecord>
25 #endif // BR_EMBEDDED 25 #endif // BR_EMBEDDED
26 #include <opencv2/highgui/highgui.hpp> 26 #include <opencv2/highgui/highgui.hpp>
27 -#include <openbr/openbr_plugin.h> 27 +#include "openbr_internal.h"
28 28
29 #include "NaturalStringCompare.h" 29 #include "NaturalStringCompare.h"
30 #include "openbr/core/bee.h" 30 #include "openbr/core/bee.h"
openbr/plugins/gui.cpp
1 #include <QApplication> 1 #include <QApplication>
2 #include <QLabel> 2 #include <QLabel>
3 #include <QElapsedTimer> 3 #include <QElapsedTimer>
  4 +#include <QWaitCondition>
  5 +#include <QMutex>
4 #include <opencv2/imgproc/imgproc.hpp> 6 #include <opencv2/imgproc/imgproc.hpp>
5 -#include <openbr/openbr_plugin.h> 7 +#include "openbr_internal.h"
6 8
7 using namespace cv; 9 using namespace cv;
8 10
@@ -47,20 +49,39 @@ QImage toQImage(const Mat &amp;mat) @@ -47,20 +49,39 @@ QImage toQImage(const Mat &amp;mat)
47 return QImage(mat8uc3.data, mat8uc3.cols, mat8uc3.rows, 3*mat8uc3.cols, QImage::Format_RGB888).copy(); 49 return QImage(mat8uc3.data, mat8uc3.cols, mat8uc3.rows, 3*mat8uc3.cols, QImage::Format_RGB888).copy();
48 } 50 }
49 51
  52 +
50 // Provides slots for manipulating a QLabel, but does not inherit from QWidget. 53 // Provides slots for manipulating a QLabel, but does not inherit from QWidget.
51 // Therefore, it can be moved to the main thread if not created there initially 54 // Therefore, it can be moved to the main thread if not created there initially
52 // since god forbid you create a QWidget subclass in not the main thread. 55 // since god forbid you create a QWidget subclass in not the main thread.
53 class GUIProxy : public QObject 56 class GUIProxy : public QObject
54 { 57 {
55 Q_OBJECT 58 Q_OBJECT
  59 + QMutex lock;
  60 + QWaitCondition wait;
  61 +
56 public: 62 public:
57 - QLabel * window;  
58 63
  64 + bool eventFilter(QObject * obj, QEvent * event)
  65 + {
  66 + if (event->type() == QEvent::KeyPress)
  67 + {
  68 + wait.wakeAll();
  69 + }
  70 + return QObject::eventFilter(obj, event);
  71 + }
  72 +
  73 + QLabel * window;
59 GUIProxy() 74 GUIProxy()
60 { 75 {
61 window = NULL; 76 window = NULL;
62 } 77 }
63 78
  79 + void waitForKey()
  80 + {
  81 + QMutexLocker locker(&lock);
  82 + wait.wait(&lock);
  83 + }
  84 +
64 public slots: 85 public slots:
65 86
66 void showImage(const QPixmap & input) 87 void showImage(const QPixmap & input)
@@ -75,6 +96,13 @@ public slots: @@ -75,6 +96,13 @@ public slots:
75 delete window; 96 delete window;
76 window = new QLabel(); 97 window = new QLabel();
77 window->setVisible(true); 98 window->setVisible(true);
  99 +
  100 + QApplication::instance()->installEventFilter(this);
  101 + Qt::WindowFlags flags = window->windowFlags();
  102 +
  103 + flags = flags & ~Qt::WindowCloseButtonHint;
  104 + window->setWindowFlags(flags);
  105 + window->show();
78 } 106 }
79 }; 107 };
80 108
@@ -89,9 +117,13 @@ class Show2Transform : public TimeVaryingTransform @@ -89,9 +117,13 @@ class Show2Transform : public TimeVaryingTransform
89 { 117 {
90 Q_OBJECT 118 Q_OBJECT
91 public: 119 public:
  120 + Q_PROPERTY(bool waitInput READ get_waitInput WRITE set_waitInput RESET reset_waitInput STORED false)
  121 + BR_PROPERTY(bool, waitInput, false)
  122 +
92 Q_PROPERTY(QStringList keys READ get_keys WRITE set_keys RESET reset_keys STORED false) 123 Q_PROPERTY(QStringList keys READ get_keys WRITE set_keys RESET reset_keys STORED false)
93 BR_PROPERTY(QStringList, keys, QStringList("FrameNumber")) 124 BR_PROPERTY(QStringList, keys, QStringList("FrameNumber"))
94 125
  126 +
95 Show2Transform() : TimeVaryingTransform(false, false) 127 Show2Transform() : TimeVaryingTransform(false, false)
96 { 128 {
97 // Create our GUI proxy 129 // Create our GUI proxy
@@ -146,6 +178,11 @@ public: @@ -146,6 +178,11 @@ public:
146 // by the main thread isn't damaged when we update displayBuffer 178 // by the main thread isn't damaged when we update displayBuffer
147 // later. 179 // later.
148 emit updateImage(displayBuffer.copy(displayBuffer.rect())); 180 emit updateImage(displayBuffer.copy(displayBuffer.rect()));
  181 +
  182 + // Blocking wait for a key-press
  183 + if (this->waitInput)
  184 + gui->waitForKey();
  185 +
149 } 186 }
150 } 187 }
151 } 188 }
openbr/plugins/hash.cpp
@@ -15,10 +15,11 @@ @@ -15,10 +15,11 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <QCryptographicHash> 17 #include <QCryptographicHash>
18 -#include <openbr/openbr_plugin.h>  
19 - 18 +#include "openbr_internal.h"
20 #include "openbr/core/qtutils.h" 19 #include "openbr/core/qtutils.h"
21 20
  21 +using namespace cv;
  22 +
22 namespace br 23 namespace br
23 { 24 {
24 25
@@ -55,6 +56,40 @@ private: @@ -55,6 +56,40 @@ private:
55 56
56 BR_REGISTER(Transform, CryptographicHashTransform) 57 BR_REGISTER(Transform, CryptographicHashTransform)
57 58
  59 +/*!
  60 + * \ingroup transforms
  61 + * \brief Kernel hash
  62 + * \author Josh Klontz \cite jklontz
  63 + */
  64 +class KernelHashTransform : public UntrainableTransform
  65 +{
  66 + Q_OBJECT
  67 + Q_PROPERTY(uchar dimsIn READ get_dimsIn WRITE set_dimsIn RESET reset_dimsIn STORED false)
  68 + Q_PROPERTY(uchar dimsOut READ get_dimsOut WRITE set_dimsOut RESET reset_dimsOut STORED false)
  69 + BR_PROPERTY(uchar, dimsIn, 8)
  70 + BR_PROPERTY(uchar, dimsOut, 7)
  71 +
  72 + void project(const Template &src, Template &dst) const
  73 + {
  74 + if (src.m().type() != CV_8UC1)
  75 + qFatal("Expected 8UC1 input.");
  76 +
  77 + dst = Mat::zeros(src.m().rows, src.m().cols, CV_8UC1);
  78 + const uchar *srcData = src.m().data;
  79 + uchar *dstData = dst.m().data;
  80 + const int step = src.m().cols;
  81 + for (int i=0; i<src.m().rows; i++)
  82 + for (int j=0; j<src.m().cols-1; j++) {
  83 + dstData[i*step+j] = (uint(pow(float(dimsIn),1.f))*srcData[i *step+j]
  84 + /*+ uint(pow(float(dimsIn),2.f))*srcData[(i+1)*step+j]*/
  85 + + uint(pow(float(dimsIn),0.f))*srcData[i *step+(j+1)]
  86 + /*+ uint(pow(float(dimsIn),0.f))*srcData[(i+1)*step+(j+1)]*/) % dimsOut;
  87 + }
  88 + }
  89 +};
  90 +
  91 +BR_REGISTER(Transform, KernelHashTransform)
  92 +
58 } // namespace br 93 } // namespace br
59 94
60 #include "hash.moc" 95 #include "hash.moc"
openbr/plugins/hist.cpp
@@ -15,8 +15,7 @@ @@ -15,8 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h>  
19 - 18 +#include "openbr_internal.h"
20 #include "openbr/core/common.h" 19 #include "openbr/core/common.h"
21 #include "openbr/core/opencvutils.h" 20 #include "openbr/core/opencvutils.h"
22 21
openbr/plugins/integral.cpp
1 #include <opencv2/imgproc/imgproc.hpp> 1 #include <opencv2/imgproc/imgproc.hpp>
2 #include <Eigen/Core> 2 #include <Eigen/Core>
3 -#include <openbr/openbr_plugin.h> 3 +#include "openbr_internal.h"
4 4
5 #include "openbr/core/opencvutils.h" 5 #include "openbr/core/opencvutils.h"
6 6
@@ -285,7 +285,6 @@ private: @@ -285,7 +285,6 @@ private:
285 285
286 void project(const Template &src, Template &dst) const 286 void project(const Template &src, Template &dst) const
287 { 287 {
288 - if (src.m().type() != CV_8UC1) qFatal("Requires CV_8UC1 input.");  
289 Mat dx, dy, magnitude, angle; 288 Mat dx, dy, magnitude, angle;
290 Sobel(src, dx, CV_32F, 1, 0); 289 Sobel(src, dx, CV_32F, 1, 0);
291 Sobel(src, dy, CV_32F, 0, 1); 290 Sobel(src, dy, CV_32F, 0, 1);
openbr/plugins/ipc2013.cpp
1 -#include <openbr/openbr_plugin.h> 1 +#include "openbr_internal.h"
2 #include <pxcaccelerator.h> 2 #include <pxcaccelerator.h>
3 #include <pxcface.h> 3 #include <pxcface.h>
4 #include <pxcimage.h> 4 #include <pxcimage.h>
openbr/plugins/keypoint.cpp
@@ -16,8 +16,7 @@ @@ -16,8 +16,7 @@
16 16
17 #include <opencv2/features2d/features2d.hpp> 17 #include <opencv2/features2d/features2d.hpp>
18 #include <opencv2/nonfree/nonfree.hpp> 18 #include <opencv2/nonfree/nonfree.hpp>
19 -#include <openbr/openbr_plugin.h>  
20 - 19 +#include "openbr_internal.h"
21 #include "openbr/core/opencvutils.h" 20 #include "openbr/core/opencvutils.h"
22 21
23 using namespace cv; 22 using namespace cv;
@@ -109,7 +108,7 @@ BR_REGISTER(Transform, KeyPointDescriptorTransform) @@ -109,7 +108,7 @@ BR_REGISTER(Transform, KeyPointDescriptorTransform)
109 * \brief Wraps OpenCV Key Point Matcher 108 * \brief Wraps OpenCV Key Point Matcher
110 * \author Josh Klontz \cite jklontz 109 * \author Josh Klontz \cite jklontz
111 */ 110 */
112 -class KeyPointMatcherTransform : public Distance 111 +class KeyPointMatcherDistance : public Distance
113 { 112 {
114 Q_OBJECT 113 Q_OBJECT
115 Q_PROPERTY(QString matcher READ get_matcher WRITE set_matcher RESET reset_matcher STORED false) 114 Q_PROPERTY(QString matcher READ get_matcher WRITE set_matcher RESET reset_matcher STORED false)
@@ -148,7 +147,7 @@ class KeyPointMatcherTransform : public Distance @@ -148,7 +147,7 @@ class KeyPointMatcherTransform : public Distance
148 } 147 }
149 }; 148 };
150 149
151 -BR_REGISTER(Distance, KeyPointMatcherTransform) 150 +BR_REGISTER(Distance, KeyPointMatcherDistance)
152 151
153 /*! 152 /*!
154 * \ingroup transforms 153 * \ingroup transforms
openbr/plugins/lbp.cpp
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 #include <limits> 18 #include <limits>
19 -#include <openbr/openbr_plugin.h> 19 +#include "openbr_internal.h"
20 20
21 using namespace cv; 21 using namespace cv;
22 22
openbr/plugins/mask.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 using namespace cv; 20 using namespace cv;
21 21
openbr/plugins/meta.cpp
@@ -16,11 +16,11 @@ @@ -16,11 +16,11 @@
16 16
17 #include <QFutureSynchronizer> 17 #include <QFutureSynchronizer>
18 #include <QtConcurrentRun> 18 #include <QtConcurrentRun>
19 -#include <openbr/openbr_plugin.h>  
20 - 19 +#include "openbr_internal.h"
21 #include "openbr/core/common.h" 20 #include "openbr/core/common.h"
22 #include "openbr/core/opencvutils.h" 21 #include "openbr/core/opencvutils.h"
23 #include "openbr/core/qtutils.h" 22 #include "openbr/core/qtutils.h"
  23 +#include "openbr/core/resource.h"
24 24
25 using namespace cv; 25 using namespace cv;
26 26
@@ -183,7 +183,6 @@ class PipeTransform : public CompositeTransform @@ -183,7 +183,6 @@ class PipeTransform : public CompositeTransform
183 } 183 }
184 } 184 }
185 185
186 -  
187 protected: 186 protected:
188 // Template list project -- process templates in parallel through Transform::project 187 // Template list project -- process templates in parallel through Transform::project
189 // or if parallelism is disabled, handle them sequentially 188 // or if parallelism is disabled, handle them sequentially
@@ -590,6 +589,56 @@ static void _projectList(const Transform *transform, const TemplateList *src, Te @@ -590,6 +589,56 @@ static void _projectList(const Transform *transform, const TemplateList *src, Te
590 } 589 }
591 590
592 591
  592 +class TransformCopier : public ResourceMaker<Transform>
  593 +{
  594 +public:
  595 + Transform * basis;
  596 + TransformCopier(Transform * _basis)
  597 + {
  598 + basis = _basis;
  599 + }
  600 +
  601 + virtual Transform *make() const
  602 + {
  603 + return basis->smartCopy();
  604 + }
  605 +
  606 +};
  607 +
  608 +class TimeInvariantWrapperTransform : public MetaTransform
  609 +{
  610 +public:
  611 + Resource<Transform> transformSource;
  612 +
  613 + TimeInvariantWrapperTransform(Transform * basis) : transformSource(new TransformCopier(basis))
  614 + {
  615 + baseTransform = basis;
  616 + }
  617 +
  618 + virtual void project(const Template &src, Template &dst) const
  619 + {
  620 + Transform * aTransform = transformSource.acquire();
  621 + aTransform->projectUpdate(src,dst);
  622 + transformSource.release(aTransform);
  623 + }
  624 +
  625 +
  626 + void project(const TemplateList &src, TemplateList &dst) const
  627 + {
  628 + Transform * aTransform = transformSource.acquire();
  629 + aTransform->projectUpdate(src,dst);
  630 + transformSource.release(aTransform);
  631 + }
  632 +
  633 + void train(const TemplateList &data)
  634 + {
  635 + baseTransform->train(data);
  636 + }
  637 +
  638 +private:
  639 + Transform * baseTransform;
  640 +};
  641 +
593 class DistributeTemplateTransform : public MetaTransform 642 class DistributeTemplateTransform : public MetaTransform
594 { 643 {
595 Q_OBJECT 644 Q_OBJECT
@@ -598,6 +647,16 @@ class DistributeTemplateTransform : public MetaTransform @@ -598,6 +647,16 @@ class DistributeTemplateTransform : public MetaTransform
598 647
599 public: 648 public:
600 649
  650 + Transform * smartCopy()
  651 + {
  652 + if (!transform->timeVarying())
  653 + return this;
  654 +
  655 + DistributeTemplateTransform * output = new DistributeTemplateTransform;
  656 + output->transform = transform->smartCopy();
  657 + return output;
  658 + }
  659 +
601 void train(const TemplateList &data) 660 void train(const TemplateList &data)
602 { 661 {
603 transform->train(data); 662 transform->train(data);
@@ -620,15 +679,6 @@ public: @@ -620,15 +679,6 @@ public:
620 // Process the single elemnt templates in parallel if parallelism is enabled. 679 // Process the single elemnt templates in parallel if parallelism is enabled.
621 void project(const TemplateList &src, TemplateList &dst) const 680 void project(const TemplateList &src, TemplateList &dst) const
622 { 681 {
623 - // Little ugly, but if we own a timeVaryingTransform and this gets called  
624 - // cast off the const modifier and use projectUpdate. This allows us to  
625 - // act as a single point of entry.  
626 - if (transform->timeVarying())  
627 - {  
628 - DistributeTemplateTransform * non_const = (DistributeTemplateTransform *) this;  
629 - non_const->projectUpdate(src,dst);  
630 - return;  
631 - }  
632 // Pre-allocate output for each template 682 // Pre-allocate output for each template
633 QList<TemplateList> output_buffer; 683 QList<TemplateList> output_buffer;
634 output_buffer.reserve(src.size()); 684 output_buffer.reserve(src.size());
@@ -655,15 +705,16 @@ public: @@ -655,15 +705,16 @@ public:
655 705
656 void projectUpdate(const TemplateList &src, TemplateList &dst) 706 void projectUpdate(const TemplateList &src, TemplateList &dst)
657 { 707 {
658 - if (!transform->timeVarying()) {  
659 - this->project(src, dst);  
660 - return;  
661 - }  
662 - this->transform->projectUpdate(src, dst); 708 + this->project(src, dst);
  709 + return;
663 } 710 }
664 711
  712 + void init()
  713 + {
665 714
666 - private: 715 + if (transform && transform->timeVarying())
  716 + transform = new br::TimeInvariantWrapperTransform(transform);
  717 + }
667 718
668 }; 719 };
669 BR_REGISTER(Transform, DistributeTemplateTransform) 720 BR_REGISTER(Transform, DistributeTemplateTransform)
openbr/plugins/misc.cpp
@@ -15,8 +15,7 @@ @@ -15,8 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/highgui/highgui.hpp> 17 #include <opencv2/highgui/highgui.hpp>
18 -#include <openbr/openbr_plugin.h>  
19 - 18 +#include "openbr_internal.h"
20 #include "openbr/core/opencvutils.h" 19 #include "openbr/core/opencvutils.h"
21 20
22 using namespace cv; 21 using namespace cv;
openbr/plugins/mongoose.cpp
1 -#include <openbr/openbr_plugin.h> 1 +#include "openbr_internal.h"
2 #include <mongoose.h> 2 #include <mongoose.h>
3 3
4 namespace br 4 namespace br
openbr/plugins/nec3.cpp
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 4
5 #include <NeoFacePro.h> 5 #include <NeoFacePro.h>
6 6
7 -#include <openbr/openbr_plugin.h> 7 +#include "openbr_internal.h"
8 #include "core/resource.h" 8 #include "core/resource.h"
9 9
10 using namespace br; 10 using namespace br;
openbr/plugins/neclatent1.cpp
1 -#include <openbr/openbr_plugin.h> 1 +#include "openbr_internal.h"
2 #include <LatentEFS.h> 2 #include <LatentEFS.h>
3 3
4 -// necessary to allocate a large memory though the actual template size  
5 -// may be much smaller 4 +// Necessary to allocate a large memory though the actual template size may be much smaller
6 #define MAX_TEMPLATE_SIZE 400000 5 #define MAX_TEMPLATE_SIZE 400000
7 6
8 namespace br 7 namespace br
@@ -21,6 +20,7 @@ class NECLatent1Initialier : public Initializer @@ -21,6 +20,7 @@ class NECLatent1Initialier : public Initializer
21 { 20 {
22 Globals->abbreviations.insert("NECTenprint1", "Open+Cvt(Gray)+NECLatent1Enroll:NECLatent1Compare"); 21 Globals->abbreviations.insert("NECTenprint1", "Open+Cvt(Gray)+NECLatent1Enroll:NECLatent1Compare");
23 Globals->abbreviations.insert("NECLatent1", "Open+Cvt(Gray)+NECLatent1Enroll(true):NECLatent1Compare"); 22 Globals->abbreviations.insert("NECLatent1", "Open+Cvt(Gray)+NECLatent1Enroll(true):NECLatent1Compare");
  23 + Globals->abbreviations.insert("NECLatentLFFS1", "Open+NECLatent1Enroll(true,ELFT_M):NECLatent1Compare(ELFT_M)");
24 } 24 }
25 }; 25 };
26 26
@@ -41,7 +41,8 @@ class NECLatent1EnrollTransform : public UntrainableTransform @@ -41,7 +41,8 @@ class NECLatent1EnrollTransform : public UntrainableTransform
41 41
42 public: 42 public:
43 enum Algorithm { LFML, 43 enum Algorithm { LFML,
44 - ELFT }; 44 + ELFT,
  45 + ELFT_M };
45 46
46 private: 47 private:
47 BR_PROPERTY(bool, latent, false) 48 BR_PROPERTY(bool, latent, false)
@@ -50,27 +51,35 @@ private: @@ -50,27 +51,35 @@ private:
50 void project(const Template &src, Template &dst) const 51 void project(const Template &src, Template &dst) const
51 { 52 {
52 if (src.m().type() != CV_8UC1) qFatal("Requires 8UC1 data!"); 53 if (src.m().type() != CV_8UC1) qFatal("Requires 8UC1 data!");
53 - unsigned char data[MAX_TEMPLATE_SIZE]; 54 + uchar *data = src.m().data;
  55 + const int rows = src.m().rows;
  56 + const int columns = src.m().cols;
  57 + uchar buff[MAX_TEMPLATE_SIZE];
  58 + uchar* pBuff = NULL;
54 int size = 0; 59 int size = 0;
55 int error; 60 int error;
56 61
57 if (latent) { 62 if (latent) {
58 - if (algorithm == LFML) error = NEC_LFML_ExtractLatent(src.m().data, src.m().rows, src.m().cols, 500, data, &size);  
59 - else error = NEC_ELFT_ExtractLatent(src.m().data, src.m().rows, src.m().cols, 500, 4, data, &size); 63 + if (algorithm == LFML) error = NEC_LFML_ExtractLatent(data, rows, columns, 500, buff, &size);
  64 + else if (algorithm == ELFT) error = NEC_ELFT_ExtractLatent(data, rows, columns, 500, 4, buff, &size);
  65 + else error = NEC_ELFT_M_ExtractLatent(data, columns, 1, &pBuff, &size);
60 } else { 66 } else {
61 - if (algorithm == LFML) error = NEC_LFML_ExtractTenprint(src.m().data, src.m().rows, src.m().cols, 500, data, &size);  
62 - else error = NEC_ELFT_ExtractTenprint(src.m().data, src.m().rows, src.m().cols, 500, 2, data, &size); 67 + if (algorithm == LFML) error = NEC_LFML_ExtractTenprint(data, rows, columns, 500, buff, &size);
  68 + else if (algorithm == ELFT) error = NEC_ELFT_ExtractTenprint(data, rows, columns, 500, 2, buff, &size);
  69 + else qFatal("ELFT_M Tenprint not implemented.");
63 } 70 }
64 71
65 if (!error) { 72 if (!error) {
66 cv::Mat n(1, size, CV_8UC1); 73 cv::Mat n(1, size, CV_8UC1);
67 - memcpy(n.data, data, size); 74 + memcpy(n.data, buff, size);
68 dst.m() = n; 75 dst.m() = n;
69 } else { 76 } else {
70 qWarning("NECLatent1EnrollTransform error %d for file %s.", error, qPrintable(src.file.flat())); 77 qWarning("NECLatent1EnrollTransform error %d for file %s.", error, qPrintable(src.file.flat()));
71 dst.m() = cv::Mat(); 78 dst.m() = cv::Mat();
72 dst.file.set("FTE", true); 79 dst.file.set("FTE", true);
73 } 80 }
  81 +
  82 + if (pBuff != NULL) NEC_ELFT_M_FreeTemplate(&pBuff);
74 } 83 }
75 }; 84 };
76 85
@@ -89,17 +98,21 @@ class NECLatent1CompareDistance : public Distance @@ -89,17 +98,21 @@ class NECLatent1CompareDistance : public Distance
89 98
90 public: 99 public:
91 enum Algorithm { LFML, 100 enum Algorithm { LFML,
92 - ELFT }; 101 + ELFT,
  102 + ELFT_M };
93 103
94 private: 104 private:
95 BR_PROPERTY(Algorithm, algorithm, LFML) 105 BR_PROPERTY(Algorithm, algorithm, LFML)
96 106
97 float compare(const Template &a, const Template &b) const 107 float compare(const Template &a, const Template &b) const
98 { 108 {
  109 + uchar *aData = a.m().data;
  110 + uchar *bData = b.m().data;
99 if (!a.m().data || !b.m().data) return -std::numeric_limits<float>::max(); 111 if (!a.m().data || !b.m().data) return -std::numeric_limits<float>::max();
100 int score; 112 int score;
101 - if (algorithm == LFML) NEC_LFML_Verify(b.m().data, b.m().total(), a.m().data, a.m().total(), &score);  
102 - else NEC_ELFT_Verify(b.m().data, a.m().data, &score, 2); 113 + if (algorithm == LFML) NEC_LFML_Verify(bData, b.m().total(), aData, a.m().total(), &score);
  114 + else if (algorithm == ELFT) NEC_ELFT_Verify(bData, aData, &score, 1);
  115 + else NEC_ELFT_M_Verify(bData, aData, &score, 1);
103 return score; 116 return score;
104 } 117 }
105 }; 118 };
openbr/plugins/normalize.cpp
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 #include <opencv2/imgproc/imgproc.hpp> 19 #include <opencv2/imgproc/imgproc.hpp>
20 #include <opencv2/highgui/highgui.hpp> 20 #include <opencv2/highgui/highgui.hpp>
21 #include <Eigen/Core> 21 #include <Eigen/Core>
22 -#include <openbr/openbr_plugin.h> 22 +#include "openbr_internal.h"
23 23
24 #include "openbr/core/common.h" 24 #include "openbr/core/common.h"
25 #include "openbr/core/opencvutils.h" 25 #include "openbr/core/opencvutils.h"
@@ -58,6 +58,9 @@ class NormalizeTransform : public UntrainableTransform @@ -58,6 +58,9 @@ class NormalizeTransform : public UntrainableTransform
58 Q_ENUMS(NormType) 58 Q_ENUMS(NormType)
59 Q_PROPERTY(NormType normType READ get_normType WRITE set_normType RESET reset_normType STORED false) 59 Q_PROPERTY(NormType normType READ get_normType WRITE set_normType RESET reset_normType STORED false)
60 60
  61 + Q_PROPERTY(bool ByRow READ get_ByRow WRITE set_ByRow RESET reset_ByRow STORED false)
  62 + BR_PROPERTY(bool, ByRow, false)
  63 +
61 public: 64 public:
62 /*!< */ 65 /*!< */
63 enum NormType { Inf = NORM_INF, 66 enum NormType { Inf = NORM_INF,
@@ -69,7 +72,16 @@ private: @@ -69,7 +72,16 @@ private:
69 72
70 void project(const Template &src, Template &dst) const 73 void project(const Template &src, Template &dst) const
71 { 74 {
72 - normalize(src, dst, 1, 0, normType, CV_32F); 75 + if (!ByRow) normalize(src, dst, 1, 0, normType, CV_32F);
  76 + else {
  77 + dst = src;
  78 + for (int i=0; i<dst.m().rows; i++) {
  79 + Mat temp;
  80 + cv::normalize(dst.m().row(i), temp, 1, 0, normType);
  81 + temp.copyTo(dst.m().row(i));
  82 + }
  83 + }
  84 +
73 } 85 }
74 }; 86 };
75 87
openbr/plugins/nt4.cpp
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 #include <NMatcherParams.h> 10 #include <NMatcherParams.h>
11 #include <NTemplate.h> 11 #include <NTemplate.h>
12 #include <NLicensing.h> 12 #include <NLicensing.h>
13 -#include <openbr/openbr_plugin.h> 13 +#include "openbr_internal.h"
14 14
15 //IRIS 15 //IRIS
16 #include <NEExtractor.h> 16 #include <NEExtractor.h>
openbr/plugins/openbr_internal.h 0 โ†’ 100644
  1 +#ifndef __OPENBR_INTERNAL_H
  2 +#define __OPENBR_INTERNAL_H
  3 +
  4 +#include "openbr/openbr_plugin.h"
  5 +
  6 +namespace br
  7 +{
  8 +/*!
  9 + * \brief A br::Transform that does not require training data.
  10 + */
  11 +class BR_EXPORT UntrainableTransform : public Transform
  12 +{
  13 + Q_OBJECT
  14 +
  15 +protected:
  16 + UntrainableTransform(bool independent = true) : Transform(independent, false) {} /*!< \brief Construct an untrainable transform. */
  17 +
  18 +private:
  19 + Transform *clone() const { return const_cast<UntrainableTransform*>(this); }
  20 + void train(const TemplateList &data) { (void) data; }
  21 + void store(QDataStream &stream) const { (void) stream; }
  22 + void load(QDataStream &stream) { (void) stream; }
  23 +};
  24 +
  25 +/*!
  26 + * \brief A br::MetaTransform that does not require training data.
  27 + */
  28 +class BR_EXPORT UntrainableMetaTransform : public UntrainableTransform
  29 +{
  30 + Q_OBJECT
  31 +
  32 +protected:
  33 + UntrainableMetaTransform() : UntrainableTransform(false) {}
  34 +};
  35 +
  36 +/*!
  37 + * \brief A br::Transform for which the results of project may change due to prior calls to project
  38 + */
  39 +class BR_EXPORT TimeVaryingTransform : public Transform
  40 +{
  41 + Q_OBJECT
  42 +
  43 +public:
  44 + virtual bool timeVarying() const { return true; }
  45 +
  46 + virtual void project(const Template &src, Template &dst) const
  47 + {
  48 + qFatal("No const project defined for time-varying transform");
  49 + (void) dst; (void) src;
  50 + }
  51 +
  52 + virtual void project(const TemplateList &src, TemplateList &dst) const
  53 + {
  54 + qFatal("No const project defined for time-varying transform");
  55 + (void) dst; (void) src;
  56 + }
  57 +
  58 + // Get a compile failure if this isn't here to go along with the other
  59 + // projectUpdate, no idea why
  60 + virtual void projectUpdate(const Template & src, Template & dst)
  61 + {
  62 + (void) src; (void) dst;
  63 + qFatal("do something useful");
  64 + }
  65 +
  66 + virtual void projectUpdate(const TemplateList &src, TemplateList &dst)
  67 + {
  68 + foreach (const Template & src_part, src) {
  69 + Template out;
  70 + projectUpdate(src_part, out);
  71 + dst.append(out);
  72 + }
  73 + }
  74 +
  75 + /*!
  76 + *\brief For transforms that don't do any training, this default implementation
  77 + * which creates a new copy of the Transform from its description string is sufficient.
  78 + */
  79 + virtual Transform * smartCopy()
  80 + {
  81 + return this->clone();
  82 + }
  83 +
  84 +
  85 +protected:
  86 + TimeVaryingTransform(bool independent = true, bool trainable = true) : Transform(independent, trainable) {}
  87 +};
  88 +
  89 +/*!
  90 + * \brief A br::Transform expecting multiple matrices per template.
  91 + */
  92 +class BR_EXPORT MetaTransform : public Transform
  93 +{
  94 + Q_OBJECT
  95 +
  96 +protected:
  97 + MetaTransform() : Transform(false) {}
  98 +};
  99 +
  100 +/*!
  101 + * \brief A MetaTransform that aggregates some sub-transforms
  102 + */
  103 +class BR_EXPORT CompositeTransform : public TimeVaryingTransform
  104 +{
  105 + Q_OBJECT
  106 +
  107 +public:
  108 + Q_PROPERTY(QList<br::Transform*> transforms READ get_transforms WRITE set_transforms RESET reset_transforms)
  109 + BR_PROPERTY(QList<br::Transform*>, transforms, QList<br::Transform*>())
  110 +
  111 + virtual void project(const Template &src, Template &dst) const
  112 + {
  113 + if (timeVarying()) qFatal("No const project defined for time-varying transform");
  114 + _project(src, dst);
  115 + }
  116 +
  117 + virtual void project(const TemplateList &src, TemplateList &dst) const
  118 + {
  119 + if (timeVarying()) qFatal("No const project defined for time-varying transform");
  120 + _project(src, dst);
  121 + }
  122 +
  123 + bool timeVarying() const { return isTimeVarying; }
  124 +
  125 + void init()
  126 + {
  127 + isTimeVarying = false;
  128 + trainable = false;
  129 + foreach (const br::Transform *transform, transforms) {
  130 + isTimeVarying = isTimeVarying || transform->timeVarying();
  131 + trainable = trainable || transform->trainable;
  132 + }
  133 + }
  134 +
  135 + /*!
  136 + * \brief Composite transforms need to create a copy of themselves if they
  137 + * have any time-varying children. If this object is flagged as time-varying,
  138 + * it creates a new copy of its own class, and gives that copy the child transforms
  139 + * returned by calling smartCopy on this transforms children
  140 + */
  141 + Transform * smartCopy()
  142 + {
  143 + if (!timeVarying())
  144 + return this;
  145 +
  146 + QString name = metaObject()->className();
  147 + name.replace("Transform","");
  148 + name += "([])";
  149 + name.replace("br::","");
  150 + CompositeTransform * output = dynamic_cast<CompositeTransform *>(Transform::make(name, NULL));
  151 +
  152 + if (output == NULL)
  153 + qFatal("Dynamic cast failed!");
  154 +
  155 + foreach(Transform* t, transforms )
  156 + {
  157 + Transform * maybe_copy = t->smartCopy();
  158 + if (maybe_copy->parent() == NULL)
  159 + maybe_copy->setParent(output);
  160 + output->transforms.append(t->smartCopy());
  161 + }
  162 +
  163 + output->file = this->file;
  164 + output->classes = classes;
  165 + output->instances = instances;
  166 + output->fraction = fraction;
  167 +
  168 + output->init();
  169 +
  170 + return output;
  171 + }
  172 +
  173 +protected:
  174 + bool isTimeVarying;
  175 +
  176 + virtual void _project(const Template & src, Template & dst) const = 0;
  177 + virtual void _project(const TemplateList & src, TemplateList & dst) const = 0;
  178 +
  179 + CompositeTransform() : TimeVaryingTransform(false) {}
  180 +};
  181 +
  182 +}
  183 +
  184 +#endif
openbr/plugins/output.cpp
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
35 #include <iostream> 35 #include <iostream>
36 #include <limits> 36 #include <limits>
37 #include <assert.h> 37 #include <assert.h>
38 -#include <openbr/openbr_plugin.h> 38 +#include "openbr_internal.h"
39 39
40 #include "openbr/core/bee.h" 40 #include "openbr/core/bee.h"
41 #include "openbr/core/common.h" 41 #include "openbr/core/common.h"
openbr/plugins/pbd.cpp
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 2
3 #include <opencv2/highgui/highgui.hpp> 3 #include <opencv2/highgui/highgui.hpp>
4 4
5 -#include <openbr/openbr_plugin.h> 5 +#include "openbr_internal.h"
6 6
7 #include "core/opencvutils.h" 7 #include "core/opencvutils.h"
8 8
openbr/plugins/pixel.cpp
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * limitations under the License. * 14 * limitations under the License. *
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 -#include <openbr/openbr_plugin.h> 17 +#include "openbr_internal.h"
18 18
19 using namespace cv; 19 using namespace cv;
20 20
openbr/plugins/plugins.cmake
1 # Add source to BR_THIRDPARTY_SRC 1 # Add source to BR_THIRDPARTY_SRC
2 # Add libs to BR_THIRDPARTY_LIBS 2 # Add libs to BR_THIRDPARTY_LIBS
3 3
4 -file(GLOB PLUGINS plugins/*.cpp) 4 +file(GLOB PLUGINS plugins/*.cpp plugins/*.h)
5 foreach(PLUGIN ${PLUGINS} ${BR_THIRDPARTY_PLUGINS}) 5 foreach(PLUGIN ${PLUGINS} ${BR_THIRDPARTY_PLUGINS})
6 get_filename_component(PLUGIN_BASENAME ${PLUGIN} NAME_WE) 6 get_filename_component(PLUGIN_BASENAME ${PLUGIN} NAME_WE)
7 get_filename_component(PLUGIN_PATH ${PLUGIN} PATH) 7 get_filename_component(PLUGIN_PATH ${PLUGIN} PATH)
openbr/plugins/pp5.cpp
@@ -11,8 +11,7 @@ @@ -11,8 +11,7 @@
11 #include <pittpatt_raw_image_io.h> 11 #include <pittpatt_raw_image_io.h>
12 #include <pittpatt_sdk.h> 12 #include <pittpatt_sdk.h>
13 #include <pittpatt_license.h> 13 #include <pittpatt_license.h>
14 -#include <openbr/openbr_plugin.h>  
15 - 14 +#include "openbr_internal.h"
16 #include "openbr/core/resource.h" 15 #include "openbr/core/resource.h"
17 16
18 #define TRY(CC) \ 17 #define TRY(CC) \
openbr/plugins/qtnetwork.cpp
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 #include <QTcpSocket> 5 #include <QTcpSocket>
6 #include <opencv2/highgui/highgui.hpp> 6 #include <opencv2/highgui/highgui.hpp>
7 #include <http_parser.h> 7 #include <http_parser.h>
8 -#include <openbr/openbr_plugin.h> 8 +#include "openbr_internal.h"
9 9
10 using namespace cv; 10 using namespace cv;
11 11
openbr/plugins/quality.cpp
1 #include <QFutureSynchronizer> 1 #include <QFutureSynchronizer>
2 #include <QtConcurrent> 2 #include <QtConcurrent>
3 -#include <openbr/openbr_plugin.h> 3 +#include "openbr_internal.h"
4 4
5 #include "openbr/core/common.h" 5 #include "openbr/core/common.h"
6 #include "openbr/core/opencvutils.h" 6 #include "openbr/core/opencvutils.h"
openbr/plugins/quantize.cpp
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 16
17 #include <QFutureSynchronizer> 17 #include <QFutureSynchronizer>
18 #include <QtConcurrentRun> 18 #include <QtConcurrentRun>
19 -#include <openbr/openbr_plugin.h> 19 +#include "openbr_internal.h"
20 20
21 #include "openbr/core/common.h" 21 #include "openbr/core/common.h"
22 #include "openbr/core/opencvutils.h" 22 #include "openbr/core/opencvutils.h"
openbr/plugins/quantize2.cpp
1 #include <QFutureSynchronizer> 1 #include <QFutureSynchronizer>
2 #include <QtConcurrent> 2 #include <QtConcurrent>
3 -#include <openbr/openbr_plugin.h> 3 +#include "openbr_internal.h"
4 4
5 #include "openbr/core/common.h" 5 #include "openbr/core/common.h"
6 #include "openbr/core/opencvutils.h" 6 #include "openbr/core/opencvutils.h"
openbr/plugins/random.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 #include "openbr/core/common.h" 20 #include "openbr/core/common.h"
21 #include "openbr/core/opencvutils.h" 21 #include "openbr/core/opencvutils.h"
openbr/plugins/reduce.cpp
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * limitations under the License. * 14 * limitations under the License. *
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 -#include <openbr/openbr_plugin.h> 17 +#include "openbr_internal.h"
18 18
19 using namespace cv; 19 using namespace cv;
20 20
openbr/plugins/regions.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 using namespace cv; 20 using namespace cv;
21 21
openbr/plugins/register.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 #include "openbr/core/opencvutils.h" 20 #include "openbr/core/opencvutils.h"
21 21
openbr/plugins/sentence.cpp
1 #include <stdint.h> 1 #include <stdint.h>
2 -#include <openbr/openbr_plugin.h> 2 +#include "openbr_internal.h"
3 3
4 using namespace cv; 4 using namespace cv;
5 5
openbr/plugins/stasm.cpp
1 #include <stasm_dll.hpp> 1 #include <stasm_dll.hpp>
2 #include <opencv2/highgui/highgui.hpp> 2 #include <opencv2/highgui/highgui.hpp>
3 -#include <openbr/openbr_plugin.h> 3 +#include "openbr_internal.h"
4 4
5 using namespace cv; 5 using namespace cv;
6 6
openbr/plugins/stream.cpp
@@ -5,14 +5,12 @@ @@ -5,14 +5,12 @@
5 #include <QMap> 5 #include <QMap>
6 #include <opencv/highgui.h> 6 #include <opencv/highgui.h>
7 #include <QtConcurrent> 7 #include <QtConcurrent>
8 -#include <openbr/openbr_plugin.h> 8 +#include "openbr_internal.h"
9 9
10 #include "openbr/core/common.h" 10 #include "openbr/core/common.h"
11 #include "openbr/core/opencvutils.h" 11 #include "openbr/core/opencvutils.h"
12 #include "openbr/core/qtutils.h" 12 #include "openbr/core/qtutils.h"
13 13
14 -#include <iostream>  
15 -  
16 using namespace cv; 14 using namespace cv;
17 15
18 namespace br 16 namespace br
@@ -258,12 +256,16 @@ public: @@ -258,12 +256,16 @@ public:
258 next_idx = 0; 256 next_idx = 0;
259 basis = input; 257 basis = input;
260 video.open(input.file.name.toStdString()); 258 video.open(input.file.name.toStdString());
261 - return video.isOpened(); 259 + video_ok = video.isOpened();
  260 + return video_ok;
262 } 261 }
  262 + bool video_ok;
263 263
264 - bool isOpen() { return video.isOpened(); } 264 + bool isOpen() { return video_ok; }
265 265
266 - void close() { video.release(); } 266 + void close() {
  267 + video.release();
  268 + }
267 269
268 private: 270 private:
269 bool getNext(FrameData & output) 271 bool getNext(FrameData & output)
@@ -279,8 +281,8 @@ private: @@ -279,8 +281,8 @@ private:
279 281
280 bool res = video.read(output.data.last().last()); 282 bool res = video.read(output.data.last().last());
281 if (!res) { 283 if (!res) {
282 - video.release();  
283 - return false; 284 + video_ok = false;
  285 + return video_ok;
284 } 286 }
285 output.data.last().file.set("FrameNumber", output.sequenceNumber); 287 output.data.last().file.set("FrameNumber", output.sequenceNumber);
286 return true; 288 return true;
@@ -299,7 +301,9 @@ public: @@ -299,7 +301,9 @@ public:
299 TemplateDataSource(int maxFrames) : DataSource(maxFrames) 301 TemplateDataSource(int maxFrames) : DataSource(maxFrames)
300 { 302 {
301 current_idx = INT_MAX; 303 current_idx = INT_MAX;
  304 + data_ok = false;
302 } 305 }
  306 + bool data_ok;
303 307
304 bool open(Template &input) 308 bool open(Template &input)
305 { 309 {
@@ -309,10 +313,13 @@ public: @@ -309,10 +313,13 @@ public:
309 final_frame = -1; 313 final_frame = -1;
310 last_issued = -2; 314 last_issued = -2;
311 315
312 - return isOpen(); 316 + data_ok = current_idx < basis.size();
  317 + return data_ok;
313 } 318 }
314 319
315 - bool isOpen() { return current_idx < basis.size() ; } 320 + bool isOpen() {
  321 + return data_ok;
  322 + }
316 323
317 void close() 324 void close()
318 { 325 {
@@ -323,7 +330,8 @@ public: @@ -323,7 +330,8 @@ public:
323 private: 330 private:
324 bool getNext(FrameData & output) 331 bool getNext(FrameData & output)
325 { 332 {
326 - if (!isOpen()) 333 + data_ok = current_idx < basis.size();
  334 + if (!data_ok)
327 return false; 335 return false;
328 336
329 output.data.append(basis[current_idx]); 337 output.data.append(basis[current_idx]);
@@ -332,6 +340,7 @@ private: @@ -332,6 +340,7 @@ private:
332 output.sequenceNumber = next_sequence; 340 output.sequenceNumber = next_sequence;
333 next_sequence++; 341 next_sequence++;
334 342
  343 + output.data.last().file.set("FrameNumber", output.sequenceNumber);
335 return true; 344 return true;
336 } 345 }
337 346
@@ -595,10 +604,6 @@ public: @@ -595,10 +604,6 @@ public:
595 604
596 FrameData * run(FrameData * input, bool & should_continue) 605 FrameData * run(FrameData * input, bool & should_continue)
597 { 606 {
598 - if (input != NULL) {  
599 - dataSource.returnFrame(input);  
600 - }  
601 -  
602 // Is there anything on our input buffer? If so we should start a thread with that. 607 // Is there anything on our input buffer? If so we should start a thread with that.
603 QWriteLocker lock(&statusLock); 608 QWriteLocker lock(&statusLock);
604 input = dataSource.tryGetFrame(); 609 input = dataSource.tryGetFrame();
openbr/plugins/svm.cpp
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 #include <QTemporaryFile> 17 #include <QTemporaryFile>
18 #include <opencv2/core/core.hpp> 18 #include <opencv2/core/core.hpp>
19 #include <opencv2/ml/ml.hpp> 19 #include <opencv2/ml/ml.hpp>
20 -#include <openbr/openbr_plugin.h> 20 +#include "openbr_internal.h"
21 21
22 #include "openbr/core/opencvutils.h" 22 #include "openbr/core/opencvutils.h"
23 23
openbr/plugins/synthetic.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 #include "openbr/core/opencvutils.h" 20 #include "openbr/core/opencvutils.h"
21 21
openbr/plugins/validate.cpp
1 #include <QFutureSynchronizer> 1 #include <QFutureSynchronizer>
2 #include <QtConcurrentRun> 2 #include <QtConcurrentRun>
3 -#include <openbr/openbr_plugin.h> 3 +#include "openbr_internal.h"
4 #include <openbr/core/qtutils.h> 4 #include <openbr/core/qtutils.h>
5 5
6 namespace br 6 namespace br
openbr/plugins/wavelet.cpp
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 16
17 #include <opencv2/imgproc/imgproc.hpp> 17 #include <opencv2/imgproc/imgproc.hpp>
18 -#include <openbr/openbr_plugin.h> 18 +#include "openbr_internal.h"
19 19
20 using namespace cv; 20 using namespace cv;
21 21
openbr/plugins/youtube.cpp
1 #include <QCoreApplication> 1 #include <QCoreApplication>
2 #include <QProcess> 2 #include <QProcess>
3 -#include <openbr/openbr_plugin.h> 3 +#include "openbr_internal.h"
4 4
5 #include "openbr/core/common.h" 5 #include "openbr/core/common.h"
6 6
share/openbr/openbr.svg 0 โ†’ 100644
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<!-- Created with Inkscape (http://www.inkscape.org/) -->
  3 +
  4 +<svg
  5 + xmlns:dc="http://purl.org/dc/elements/1.1/"
  6 + xmlns:cc="http://creativecommons.org/ns#"
  7 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  8 + xmlns:svg="http://www.w3.org/2000/svg"
  9 + xmlns="http://www.w3.org/2000/svg"
  10 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  11 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  12 + width="512"
  13 + height="512"
  14 + id="svg2"
  15 + version="1.1"
  16 + inkscape:version="0.48.2 r9819"
  17 + sodipodi:docname="openbr.svg">
  18 + <defs
  19 + id="defs4" />
  20 + <sodipodi:namedview
  21 + id="base"
  22 + pagecolor="#ffffff"
  23 + bordercolor="#666666"
  24 + borderopacity="1.0"
  25 + inkscape:pageopacity="0.0"
  26 + inkscape:pageshadow="2"
  27 + inkscape:zoom="1.4241042"
  28 + inkscape:cx="255.99998"
  29 + inkscape:cy="224.54497"
  30 + inkscape:document-units="px"
  31 + inkscape:current-layer="layer1"
  32 + showgrid="false"
  33 + inkscape:window-width="1386"
  34 + inkscape:window-height="856"
  35 + inkscape:window-x="54"
  36 + inkscape:window-y="0"
  37 + inkscape:window-maximized="1" />
  38 + <metadata
  39 + id="metadata7">
  40 + <rdf:RDF>
  41 + <cc:Work
  42 + rdf:about="">
  43 + <dc:format>image/svg+xml</dc:format>
  44 + <dc:type
  45 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  46 + <dc:title></dc:title>
  47 + </cc:Work>
  48 + </rdf:RDF>
  49 + </metadata>
  50 + <g
  51 + inkscape:label="Layer 1"
  52 + inkscape:groupmode="layer"
  53 + id="layer1"
  54 + transform="translate(0,-540.36218)">
  55 + <rect
  56 + style="fill:#ffffff;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
  57 + id="rect2985"
  58 + width="380.73685"
  59 + height="380.73685"
  60 + x="65.631577"
  61 + y="637.99377" />
  62 + <path
  63 + sodipodi:type="arc"
  64 + style="fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:3.92984693;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
  65 + id="path2991"
  66 + sodipodi:cx="350"
  67 + sodipodi:cy="393.79074"
  68 + sodipodi:rx="218.57143"
  69 + sodipodi:ry="218.57143"
  70 + d="m 568.57143,393.79074 a 218.57143,218.57143 0 1 1 -437.14286,0 218.57143,218.57143 0 1 1 437.14286,0 z"
  71 + transform="matrix(1.0178513,0,0,1.0178514,-100.24798,395.54173)" />
  72 + <g
  73 + transform="scale(1.1432502,0.87469915)"
  74 + style="font-size:602.20269775px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
  75 + id="text3808">
  76 + <path
  77 + d="m 139.95187,956.87572 0,160.84218 83.97112,0 c 31.95257,0 68.68055,-6.5669 83.97112,-19.7009 15.48604,-13.3299 27.99007,-33.619 27.99037,-60.8672 -3e-4,-27.444 -12.50433,-47.63499 -27.99037,-60.57311 -15.29057,-13.13378 -52.01855,-19.70097 -83.97112,-19.70097 m -83.97112,-180.54319 0,132.31993 83.97112,0 c 29.01214,0 69.85673,-5.39055 83.97112,-16.17244 14.30987,-10.97737 27.99008,-27.63986 27.99037,-49.98753 -2.9e-4,-22.15099 -13.6805,-38.71546 -27.99037,-49.69348 -14.11439,-10.97727 -54.95898,-16.46609 -83.97112,-16.46648 m -139.951873,-48.81135 139.951873,0 c 45.28256,0 91.95076,9.40984 116.45474,28.22825 24.50335,18.81923 36.75519,45.57723 36.75554,80.27409 -3.5e-4,26.85635 -6.27329,48.22354 -18.81883,64.10165 -12.54621,15.87865 -30.97297,25.77813 -55.28033,29.69848 29.20809,6.27317 51.84948,19.40714 67.92423,39.40193 16.27009,19.79916 20.90689,51.96712 20.90689,77.59112 l 0,119.7126 -55.98075,0 0,-44.8424 c -17.69465,15.1339 -37.06615,24.3098 -56.82746,32.0601 -17.87739,7.0114 -36.46927,12.8733 -55.13403,12.7823 -21.46529,-0.1046 -45.63727,-9.5398 -63.32089,-15.318 l -20.44109,-13.0416 -0.20914,28.3596 -55.98075,0 0,-80.0275 -3e-6,-358.98062"
  78 + id="path3816"
  79 + inkscape:connector-curvature="0"
  80 + sodipodi:nodetypes="ccsccccccscccccsccsccscccaacccccc" />
  81 + </g>
  82 + </g>
  83 +</svg>