-
The primary addition is ProcessWrapperTransform, which takes a transform as a child, and creates a worker process that runs that transform. The main point of this is to handle cases where we interface with non-threadsafe code, and need to isolate transforms in their own processes if we want to use multiple copies of them. Inter-process communication is handled using QLocalServer/QLocalSocket, the actual worker processes are additional instance of br, which does mean this bleeds out to the public API to an unfortunate extent. Initial trvial tests seem promising, but generally we can expect performance to degrade if larger amounts of data are transfered, ideally we should do ProcessWrapper(Open+FeatureExtraction), so the data transfered to the worker is an image name, and the data transfered from the worker is a feature vector.
-
Resolved conflicts: app/br/br.cpp openbr/core/bee.cpp openbr/plugins/output.cpp
-
resolved conflicts: app/br/br.cpp openbr/core/bee.cpp openbr/core/classify.cpp openbr/core/cluster.cpp openbr/core/eval.h openbr/openbr.cpp openbr/openbr.h openbr/plugins/algorithms.cpp openbr/plugins/independent.cpp openbr/plugins/output.cpp openbr/plugins/svm.cpp
-
If just the first property name argument is specified, use that for both the gt and predicted files. Use empty strings to indicate when the gt/predicted property names are not supplied to facilitate the above change. Fix argument count checks for eval regression/classification.
-
Change default label name from Subjet to Label (since label is a more general term). Use different default variable names for classification (label), regression (regressor/regressand), and clustering (ClusterID) Update some (far from all) transforms to accept arguments specifying their input/output variables. Update eval classification to optionally take target variable names as arguments
-
Release a thread from the global thread pool whenever we wait for a parallel job to finish. This means we don't waste one of the global thread pool's threads, and can maintain full CPU utilization.
-
Add Show2Transform (should replace ShowTransform eventually), which displays input images using QT, rather than going through openCV. Additional modifications to support doing this (since qt is quite particular about how GUI elements are created/modified). Create a QApplication instead of a QCoreApplication (if not building BR_EMBEDDED), restructure br.cpp's main to run its main work in a separate thread while the main thread sits in an event loop.