NeuroDactyl
Batching

All general methods in the SDK (like NeuroDactyl::Detector::detect or NeuroDactyl::Extractor::extract) are threadsafe. It means, that you can process different images in different threads simultaneously.
Internal batch queue and load control are implemented on the SDK level. You don't need to implement batch collecting - you can just call corresponding methods in different threads. All operations will be processed optimally based on your hardware and configuration.
Optimal batch size depends on your GPU or CPU model and your income load. Consult us, before setting up a batch size in Configuration.
For example, if you need to detect fingerprints on several images you should run:

std::vector<std::shared_ptr<NeuroDactyl::Image>> images;
// ...
// Images loading
// ...
std::vector<std::vector<std::shared_ptr<NeuroDactyl::Detection>> detections;
detections.resize(images.size());
#pragma omp parallel for
for (int k = 0; k < images.size(); ++k) {
detector->detect(images[k], 500, 0.1, detections[k]);
}

All images will be processed in batch mode as fast as it's possible on your hardware.