Commit cff1fb9fe7d5711c8e4f922b410e88459529d01b
Merge pull request #307 from biometrics/stopwatch_refactor
rewrote StopWatchTransform
Showing
1 changed file
with
52 additions
and
30 deletions
openbr/plugins/time.cpp
| ... | ... | @@ -7,56 +7,78 @@ namespace br |
| 7 | 7 | * \ingroup transforms |
| 8 | 8 | * \brief Gives time elapsed over a specified transform as a function of both images (or frames) and pixels. |
| 9 | 9 | * \author Jordan Cheney \cite JordanCheney |
| 10 | + * \author Josh Klontz \cite jklontz | |
| 10 | 11 | */ |
| 11 | -class StopWatchTransform : public TimeVaryingTransform | |
| 12 | +class StopWatchTransform : public MetaTransform | |
| 12 | 13 | { |
| 13 | 14 | Q_OBJECT |
| 15 | + Q_PROPERTY(QString description READ get_description WRITE set_description RESET reset_description) | |
| 16 | + BR_PROPERTY(QString, description, "Identity") | |
| 14 | 17 | |
| 15 | - Q_PROPERTY(br::Transform* child READ get_child WRITE set_child RESET reset_child) | |
| 16 | - BR_PROPERTY(br::Transform*, child, NULL) | |
| 17 | - | |
| 18 | - long timeElapsed; | |
| 19 | - long numImgs; | |
| 20 | - long numPixels; | |
| 18 | + br::Transform *transform; | |
| 19 | + mutable QMutex mutex; | |
| 20 | + mutable long miliseconds; | |
| 21 | + mutable long images; | |
| 22 | + mutable long pixels; | |
| 21 | 23 | |
| 22 | 24 | public: |
| 23 | - StopWatchTransform() : TimeVaryingTransform(false, false) | |
| 25 | + StopWatchTransform() | |
| 24 | 26 | { |
| 25 | - timeElapsed = 0; | |
| 26 | - numImgs = 0; | |
| 27 | - numPixels = 0; | |
| 27 | + reset(); | |
| 28 | 28 | } |
| 29 | 29 | |
| 30 | 30 | private: |
| 31 | - void projectUpdate(const Template &src, Template &dst) | |
| 31 | + void reset() | |
| 32 | 32 | { |
| 33 | - QTime watch; | |
| 34 | - | |
| 35 | - if (child == NULL) | |
| 36 | - qFatal("Can't find child transform! Command line syntax is StopWatch(name of transform to profile)"); | |
| 33 | + miliseconds = 0; | |
| 34 | + images = 0; | |
| 35 | + pixels = 0; | |
| 36 | + } | |
| 37 | 37 | |
| 38 | - watch.start(); | |
| 38 | + void init() | |
| 39 | + { | |
| 40 | + transform = Transform::make(description); | |
| 41 | + } | |
| 39 | 42 | |
| 40 | - child->project(src, dst); | |
| 43 | + void train(const QList<TemplateList> &data) | |
| 44 | + { | |
| 45 | + transform->train(data); | |
| 46 | + } | |
| 41 | 47 | |
| 42 | - int time = watch.elapsed(); | |
| 48 | + void project(const Template &src, Template &dst) const | |
| 49 | + { | |
| 50 | + QTime watch; | |
| 51 | + watch.start(); | |
| 52 | + transform->project(src, dst); | |
| 43 | 53 | |
| 44 | - timeElapsed += time; | |
| 45 | - numImgs++; | |
| 46 | - numPixels += (src.m().rows * src.m().cols); | |
| 54 | + QMutexLocker locker(&mutex); | |
| 55 | + miliseconds += watch.elapsed(); | |
| 56 | + images++; | |
| 57 | + foreach (const cv::Mat &m, src) | |
| 58 | + pixels += (m.rows * m.cols); | |
| 47 | 59 | } |
| 48 | 60 | |
| 49 | - void finalize(TemplateList &output) | |
| 61 | + void finalize(TemplateList &) | |
| 50 | 62 | { |
| 51 | - (void)output; | |
| 63 | + qDebug("\nProfile for \"%s\"\n" | |
| 64 | + "\tSeconds: %g\n" | |
| 65 | + "\tTemplates/s: %g\n" | |
| 66 | + "\tPixels/s: %g\n", | |
| 67 | + qPrintable(description), | |
| 68 | + miliseconds / 1000.0, | |
| 69 | + images * 1000.0 / miliseconds, | |
| 70 | + pixels * 1000.0 / miliseconds); | |
| 71 | + reset(); | |
| 72 | + } | |
| 52 | 73 | |
| 53 | - qDebug() << "\n\nProfiled " << numImgs << " images:\n" << | |
| 54 | - "\tavg time per image: " << (double)timeElapsed / numImgs << " ms\n" << | |
| 55 | - "\tavg time per pixel: " << (double)timeElapsed / numPixels << " ms\n"; | |
| 74 | + void store(QDataStream &stream) const | |
| 75 | + { | |
| 76 | + transform->store(stream); | |
| 77 | + } | |
| 56 | 78 | |
| 57 | - timeElapsed = 0; | |
| 58 | - numImgs = 0; | |
| 59 | - numPixels = 0; | |
| 79 | + void load(QDataStream &stream) | |
| 80 | + { | |
| 81 | + transform->load(stream); | |
| 60 | 82 | } |
| 61 | 83 | }; |
| 62 | 84 | ... | ... |