Problem
My code is using IDKit instance connecting to a 100k database and creating a User probe with a face image that is the same as the one that is registered with the User (id 9999). Running findUser returns no results (and no error). When I run matchUser on the same database with the same probe User and User (id = 9999) the match is score 100. If I create a small database, the same procedure works fine. So it seems like the culprit is the size of the database?


Cause

IDKit findUser procedure consists of two phases- fast identification phase and accurate verification phase. The verification phase works on a subset of candidates (an intermendiate result) returned from the identification phase. The size of this subset is given by parameter CFG_BEST_CANDIDATES_COUNT. Its default value is 1. Because of the characteristics of the identification algorithm, the true match might not get into the intermediate subset of candidates, if it is too small.


Solution

Increase CFG_BEST_CANDIDATES_COUNT parameter to value 10 or more. Consider the trade-off between speed and accuracy- the bigger the value is, the more accurate and less fast is identification performance.