diff --git a/openbr/plugins/misc.cpp b/openbr/plugins/misc.cpp index 9b66378..a29ec16 100644 --- a/openbr/plugins/misc.cpp +++ b/openbr/plugins/misc.cpp @@ -14,6 +14,7 @@ * limitations under the License. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +#include #include #include #include "openbr_internal.h" @@ -517,6 +518,109 @@ class EventTransform : public UntrainableMetaTransform }; BR_REGISTER(Transform, EventTransform) + +//ProgressCounter+Output + +class GalleryOutputTransform : public TimeVaryingTransform +{ + Q_OBJECT + + Q_PROPERTY(QString outputString READ get_outputString WRITE set_outputString RESET reset_outputString STORED false) + BR_PROPERTY(QString, outputString, "") + + void projectUpdate(const TemplateList &src, TemplateList &dst) + { + if (src.empty()) + return; + dst = src; + writer->writeBlock(dst); + } + + void train(const TemplateList& data) + { + (void) data; + } + ; + void init() + { + writer = QSharedPointer(Gallery::make(outputString)); + } + + QSharedPointer writer; +public: + GalleryOutputTransform() : TimeVaryingTransform(false,false) {} +}; + +BR_REGISTER(Transform, GalleryOutputTransform) + +class ProgressCounterTransform : public TimeVaryingTransform +{ + Q_OBJECT + + Q_PROPERTY(int totalTemplates READ get_totalTemplates WRITE set_totalTemplates RESET reset_totalTemplates STORED false) + BR_PROPERTY(int, totalTemplates, 1) + + void projectUpdate(const TemplateList &src, TemplateList &dst) + { + dst = src; + qint64 elapsed = timer.elapsed(); + calls++; + set_calls++; + // updated every 10 seconds + if (elapsed > 5 * 1000) { + float f_elapsed = elapsed / 1000.0f; + // remaining calls (according to our input variable) + int remaining = totalTemplates - calls; + // calls / second + float speed = set_calls / f_elapsed; + + float p = 100 * float(calls) / totalTemplates; + + // seconds remaining + int s = float(remaining) / speed; + + int h = s / (60*60); + int m = (s - h*60*60) / 60; + s = (s - h*60*60 - m*60); + + // hours:minutes:seconds + fprintf(stderr, "%05.2f%% REMAINING=%02d:%02d:%02d COUNT=%g \r", p, h, m, s, float(calls)); + + timer.start(); + set_calls = 0; + } + + + return; + } + + void train(const TemplateList& data) + { + (void) data; + } + + void finalize(TemplateList & data) + { + (void) data; + } + void init() + { + calls = 0; + set_calls = 0; + timer.start(); + } + +public: + ProgressCounterTransform() : TimeVaryingTransform(false,false) {} + bool initialized; + QElapsedTimer timer; + qint64 calls; + qint64 set_calls; + +}; + +BR_REGISTER(Transform, ProgressCounterTransform) + } #include "misc.moc"