Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.
I made a small apps to try the SimpleAFIS API, here is the snippet :
var sw = Stopwatch.StartNew();
IEnumerable<Person> matchCollection = Afis.Identify(probe, database);
SPElapsed = sw.Elapsed.Seconds.ToString();
I have loaded just the templates from database (been extracted before). The
time it takes to process is about 56 seconds with approx 100,000 fingerprint
templates. Even, the time required is not flat, sometimes it takes 10 seconds.
Do I wrongly diagnostic it ? I used threshold at 25.0 , with laptop Intel Core
i5 M460 CPU @ 2.53GHz with 3.8GB usable memory, 2.6GB used memory. If I used
threshold at 10, it take too long that I forced to stop the service. How to
achieve 10,000 fingerprints/second matching speed ?
A few notes on proper benchmarking. Executing Identify for the first time will
be much slower than subsequent runs. SourceAFIS is initializing internal cache
that contains one entry for each candidate template. It's preprocessing each
template that doesn't yet have an entry in the cache. You should benchmark
second run of Identify method. Ideally benchmark 2nd to 4th run and average
SourceAFIS is faster on non-matching fingerprint pairs than on matching pairs.
If your have created your database by duplicating the same fingerprint 100,000
times, it will definitely impact your benchmark. SourceAFIS is optimized for
the usual scenario of having database full of non-matching fingerprints with
perhaps one matching. Reference speed was measured on non-matching
If you don't have that many fingerprints, you can cheat it by 10,000x
duplicating fingerprints 1..10 and using unique fingerprint 0 as a probe. This
works because candidates are never compared to each other. Only probe
fingerprint needs to be sufficiently unique.
Your hardware is somewhat better than reference hardware (Core2 Duo 2.13Ghz).
I don't see any problem there.
Even if you benchmark properly, you can still get different speed (higher or
lower). Minutia count per fingerprint along with overall fingerprint structure
influences matching speed. If you have large and/or minutia-rich fingerprints
in your database, you can get lower speed. Reference speed in datasheet is
computed from SourceAFIS test databases collected from multiple sources. You
can download SourceAFIS database for comparison.
As for the threshold influencing speed, that really surprises me. Threshold is
a lightweight filter applied to match results before returning them through
public API. I suspect this is some kind of error in your benchmark. If you can
reproduce the issue in a small sample, I will take a look into it.
all right then, i will examine it more.
Thanks a lot Robert.