-
This change consolidates the previous 'read' and 'noDuplicates' flags into a single 'append' flag. If append is specified, and an output gallery already exists, and the gallery format supports read/write or has explicit append support, then enrollment will be restricted to those files in the input list not already present in the gallery, and the results will be appended to the existing gallery. append defaults to 'false', which is a deparature from previous behavior. The .gal format has explicit append support, for other cases, if the gallery supports both read and write (less common than you might think), we support append by reading the existing gallery, and writing back out to an overwriting file. It should be possible to add explicit append support to several other gallery types.
-
When setting up the stream in enroll, use the Stream interface's staging logic on the input algorithm. Making this happen is slightly complex when we don't particularly have header files, but on the plus side algorithms incorporating something like Show (e.g. ShowFaceDetection) will not be used as a single threaded stage in the process.
-
Since we no longer add distribute in AlgorithmCore::init, instead adding a task specific stream in AlgorithmCore::enroll, we also add a stream to the algorithm in train, so that the training data will be projected in parallel by PipeTransform::train.
-
Decode and enroll images from strings in C API
-
A new transform, ConsolidateRegions, is added. This transform should be used after BuildScales and/or SlidingWindow to take potentially overlapping detections, and consolidate them into a single detection. This is a very numerically correct approach, in that a Laplacian matrix is built from overlapping rectangles, and spectral clustering is then performed to find the clusters/groupings of detected regions. However, it is perhaps not the most computationally efficient solution, especially when the number of detected regions is large (e.g., over 200). This is b/c the eigendecomposition step will be a bit of a bottleneck. Future solutions could move in one of (at least) two directions. The first is the use of numerical analysis methods to efficiently find the smallest eigenvalue/vectors. This is not readily support by Eigen. The second would be more logic-based approaches. Presumably the method used by opencv to consolidate regions would be applicable here. In the meantime this solutions very much works, and should be used until a more effecient method is made available.
-
Loadstore updates
-
Plot enhancements