-
With this, we will not have to accumulate the file metadata during enroll which will help with memory use on large jobs. Functions actually using the return type (gui/classifier.cpp, and gallerytoolbar.cpp) updated to avoid using it directly. In gallerytoolbar.cpp, drop support for implicit enrollment to a .gal file.
-
Basically, description() now relies on firstAvailablePropertyIndex being set correctly, and this is done in Object::init(file). If an object is not created via the plugin system, Object::init(file) is never called. Also, description is now called as part of smartCopy, which is of course called when project() const is called on a timeVarying transform.
-
Update these algorithms to draw all detected faces on the same image, and only display that image once. Also, modify ShowFaceDetection to discard matrices that have already been displayed.
-
This is unsafe since in some scenarios, the window is already part of an event loop.
-
Refactor handling of simplified pointer in AlgorithmCore Remove parameter from serialize, it's literally impossible for it to do anything useful Remove spaces after * and & (saving valuable bytes of source code).
-
Also, more careful memory management of the simplified transform in AlgorithmCore
-
Instead of having a parameter to force serialization of loadStores, introduce a recursive method for simplifiying transform trees. Transforms which are only useful during load/training can now remove themselves from the tree via Transform * simplify, returning e.g. their child transform instead of themselves when possible. This avoids the issue of LoadStore transforms refusing to serialize themselves onto an input stream during multi-process enrollment, since they are just removed from the tree.
-
Rather than saving the Transform and distance strings of an algorithm together, in stored files, save the transform and distance descriptions separately. Also introduce an enum allowing for the serialization of algorithms which use gallery comparison transforms, rather than distances as their comparison function. Update pre-trained algorithms, this only requires updating the algorithm files themselves, transforms saved via LoadStore are unaffected.
-
This gives us robustness to one type of model file compatibility break, if e.g. the FaceRecognitionRegistration abbreviation is changed, any results of <FaceRecognitionRegistration> that were previously saved to disk are not invalidated (although any changes to FaceRecognitionRegistration will not be reflected until the model is re-trained).
-
Expand on Object::description to get a workable string that reflects the current state of the properties of Objects in memory. With this, we can conceive of serializing Transforms/Distances without having prior knowledge of the string used to construct them, and also to serialize them in cases where alterations have been made to their state in memory. Also introduce an option to force complete serialization of a transform tree (i.e. bypass LoadStore blocks), this allows us to do things like serialize an algorithm in memory, and transmit it to another process without requiring that the other process read part of the algorithm from disk. Refactor ProcessWrapper to directly transmit its current Transform to child processes, rather than requiring the child processes to read its state from disk. This allows for far more uniform treatment of multiProcess and non-multiProcess jobs in AlgorithmCore, leading to substantial simplification of AlgorithmCore::compare.