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.

Close

Identify() Processing Time

erwin
2012-08-28
2012-09-16
  • erwin
    erwin
    2012-08-28

    Hi Robert,

    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 ?

    Thanks

     
  • Robert Važan
    Robert Važan
    2012-08-28

    Hi Erwin,

    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
    the results.

    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
    fingerprints.

    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.

    Kind Regards,

    Robert

     
  • erwin
    erwin
    2012-08-29

    Hi,

    all right then, i will examine it more.

    Thanks a lot Robert.