Closed dan-developer closed 4 years ago
The template starts with magic ICRS21, which indicates it is an undocumented proprietary template format created by Innovatrics. You will need either an image or an ANSI/ISO template. SourceAFIS wouldn't work with proprietary templates from random vendors.
Thank you for your response.
I ended up sending the wrong ones, follow again, see if this is supported (I configured it to export as ISO):
Rk1SACAyMAAAAAEaAAABBAEsAMUAxQEAAAAAKkC4ABBlXYCCACB1ZEDFACxmXYDMADjhZECaADnlZICEAEVvZED0AEhgZECyAFpoXUA+AGKRZICHAGXkZEBuAGqCZIDcAGzWZIBPAHIIZEAmAHqWZECAAHt8ZIA/AIQKZEAuAIybZEBvAJOKZEDTAJtRZIB1AKbOZIAXAKykZEDQAK3KZIBGALivZICqALy7ZEAYAMGvZECRAM2zXYAsAM63ZEDCANC/ZIBNAPUkXUCVAPyrZIA7AQMTXYC1AQO3ZEB6AQQsZEAsAQhCZIASAQvPXUBoAQ+YZIA+ARMNZIB5ARSkXYCTARSsXUCAARgrXUBQARt6ZIATAR/QXQAA
Rk1SACAyMAAAAADYAAABBAEsAMUAxQEAAAAAH4COACTkZIBYACvoZEC6ADRjZIBKADdxZEB0AEhpXYBMAFfoZIChAFjZZECJAFzYZEAyAF6CZIBDAHCCZEA3AIaPZECcAIdUZEBBAJTRZECZAJfNZIB1AKjAZEAPAK20ZICMAL3BZIBTAMuyZIAgANc1ZEAnAOEyXUAZAOlEXYCGAO27ZEAkAO4wXYBrAPCvZEARAPM6XUBOAPUxZEA7AQOcZEBJAQSnZIBmAQSvZECeAQW5ZIBaAQcuZAAA
I try this implemetation:
String template1 = "Rk1SACAyMAAAAAEaAAABBAEsAMUAxQEAAAAAKkC4ABBlXYCCACB1ZEDFACxmXYDMADjhZECaADnlZICEAEVvZED0AEhgZECyAFpoXUA+AGKRZICHAGXkZEBuAGqCZIDcAGzWZIBPAHIIZEAmAHqWZECAAHt8ZIA/AIQKZEAuAIybZEBvAJOKZEDTAJtRZIB1AKbOZIAXAKykZEDQAK3KZIBGALivZICqALy7ZEAYAMGvZECRAM2zXYAsAM63ZEDCANC/ZIBNAPUkXUCVAPyrZIA7AQMTXYC1AQO3ZEB6AQQsZEAsAQhCZIASAQvPXUBoAQ+YZIA+ARMNZIB5ARSkXYCTARSsXUCAARgrXUBQARt6ZIATAR/QXQAA";
String template2 = "Rk1SACAyMAAAAADYAAABBAEsAMUAxQEAAAAAH4COACTkZIBYACvoZEC6ADRjZIBKADdxZEB0AEhpXYBMAFfoZIChAFjZZECJAFzYZEAyAF6CZIBDAHCCZEA3AIaPZECcAIdUZEBBAJTRZECZAJfNZIB1AKjAZEAPAK20ZICMAL3BZIBTAMuyZIAgANc1ZEAnAOEyXUAZAOlEXYCGAO27ZEAkAO4wXYBrAPCvZEARAPM6XUBOAPUxZEA7AQOcZEBJAQSnZIBmAQSvZECeAQW5ZIBaAQcuZAAA";
byte[] template1BytesArray = Base64.getDecoder().decode(template1.getBytes());
byte[] template2BytesArray = Base64.getDecoder().decode(template2.getBytes());
FingerprintTemplate probe = new FingerprintTemplate(template1BytesArray);
FingerprintTemplate candidate = new FingerprintTemplate(template2BytesArray);
double score = new FingerprintMatcher()
.index(probe)
.match(candidate);
System.out.println(score);
The result is: 164.92244157304955 Same finger but another read from biometric sensor.
String template1 = "Rk1SACAyMAAAAAEaAAABBAEsAMUAxQEAAAAAKkC4ABBlXYCCACB1ZEDFACxmXYDMADjhZECaADnlZICEAEVvZED0AEhgZECyAFpoXUA+AGKRZICHAGXkZEBuAGqCZIDcAGzWZIBPAHIIZEAmAHqWZECAAHt8ZIA/AIQKZEAuAIybZEBvAJOKZEDTAJtRZIB1AKbOZIAXAKykZEDQAK3KZIBGALivZICqALy7ZEAYAMGvZECRAM2zXYAsAM63ZEDCANC/ZIBNAPUkXUCVAPyrZIA7AQMTXYC1AQO3ZEB6AQQsZEAsAQhCZIASAQvPXUBoAQ+YZIA+ARMNZIB5ARSkXYCTARSsXUCAARgrXUBQARt6ZIATAR/QXQAA";
String template2 = "Rk1SACAyMAAAAAEaAAABBAEsAMUAxQEAAAAAKkC4ABBlXYCCACB1ZEDFACxmXYDMADjhZECaADnlZICEAEVvZED0AEhgZECyAFpoXUA+AGKRZICHAGXkZEBuAGqCZIDcAGzWZIBPAHIIZEAmAHqWZECAAHt8ZIA/AIQKZEAuAIybZEBvAJOKZEDTAJtRZIB1AKbOZIAXAKykZEDQAK3KZIBGALivZICqALy7ZEAYAMGvZECRAM2zXYAsAM63ZEDCANC/ZIBNAPUkXUCVAPyrZIA7AQMTXYC1AQO3ZEB6AQQsZEAsAQhCZIASAQvPXUBoAQ+YZIA+ARMNZIB5ARSkXYCTARSsXUCAARgrXUBQARt6ZIATAR/QXQAA";
byte[] template1BytesArray = Base64.getDecoder().decode(template1.getBytes());
byte[] template2BytesArray = Base64.getDecoder().decode(template2.getBytes());
FingerprintTemplate probe = new FingerprintTemplate(template1BytesArray);
FingerprintTemplate candidate = new FingerprintTemplate(template2BytesArray);
double score = new FingerprintMatcher()
.index(probe)
.match(candidate);
System.out.println(score);
The result is: 501.7640040162884 But the two are the same. Can you help me to implement?
I think I'm in luck, as I passed the template1Bytes in the FingerprintCompatibility.convert(byte[]) function and didn't raise any exception.
String template1 = "Rk1SACAyMAAAAAEaAAABBAEsAMUAxQEAAAAAKkC4ABBlXYCCACB1ZEDFACxmXYDMADjhZECaADnlZICEAEVvZED0AEhgZECyAFpoXUA+AGKRZICHAGXkZEBuAGqCZIDcAGzWZIBPAHIIZEAmAHqWZECAAHt8ZIA/AIQKZEAuAIybZEBvAJOKZEDTAJtRZIB1AKbOZIAXAKykZEDQAK3KZIBGALivZICqALy7ZEAYAMGvZECRAM2zXYAsAM63ZEDCANC/ZIBNAPUkXUCVAPyrZIA7AQMTXYC1AQO3ZEB6AQQsZEAsAQhCZIASAQvPXUBoAQ+YZIA+ARMNZIB5ARSkXYCTARSsXUCAARgrXUBQARt6ZIATAR/QXQAA";
byte[] template1BytesArray = Base64.getDecoder().decode(template1.getBytes());
FingerprintCompatibility.convert(template1BytesArray);
FingerprintCompatibility
is indeed the right class to use. Similarity score 164 is very good. Looks like the problem is solved.
What minimum score is recommended? How much does this score go? I thought it was something from 0 to 100, but even with identical templates it gives a broken number.
I want to test a string (captured by the digital biometric device) and I want to compare it with other templates. In the examples I only found opening an image, I want to pass the string directly, because I already have the template string. I want to know the comparison score or if it's the same finger. How should I do?
Below two readings from the same finger:
SUNSUzIxAAADmAEBAAAAAMUAxQAEASwBAAAAg2odhgASABsPcgAgAB4ONAApAA0PHQAzAHQPjQBBAKAPNABFAHUPkABSACcPMQBhAGUPPABnACQPdABuADUPNQB1ADIOkgB3ADIPYwCHAD0OFgCLAEQPXgCXAD4NmACmADoPeQCvAEcPtQCyADgPNgDAAMcMZADAAMIPgQDAAEUPaQDLAEwPWADMAFgPcADMAMYPGADeALANLgDfAOkNRgDhAHYORwAKAekPeAAUAeEPzf6jfKP3SQaKg4/75Zq1m7eq/WopAz8RGXiGh5+EzWtRE6kDFYia9br2MENVNeHz8MOx9BaxpvhaBC4SIRAJzbby2vwODYv4kQAeCHP4JhYX4R8hEQBi+X5+WgS+9Kb1aQWdh4aA2gC/9s/zBuDKcepR7HshbOH86QGlgan7OIrkj7H0CZglDCmWQH5dBKGB0cqy69c8GTqddmIkjY7pI7qxWnZDAaMJK/lDb18fUjnLHCA6AQIEGEYKAG0AE2A+ZAQAngAWNAgAfwEQO1YHAI8BE/84wAwAYwMT/0zB/mX/DwBNCP37PlRS/jQFADMKCV4JACcQBlT+/0AIAIgUGlRYBQAdGgA4CwB2HhzAQ1VBEgAeIwPC/f3AQcBDPk8DAHQkHsAFAF0lF/5XCgA4KQz////+wD4YABctA8IiNf//OP9V/8D+/ykcAAxB8cH8J8D+Pv1XUzv+MzoEAC9Fd40JAJFFIMD/VTYPAARR5P3B+/zA/v/9wPvCRggAlFMiQkAIAI9WJ2BKCwAtYWuXwMOHwhEAA2XgMf77/cD8//7B//7//wQAOGZ0xMMDAEBmGv0JADJuF/z9KCcHAC9xYsSdwxIAdHEx/8D+aMH9MypMCwAEctcn/f37/yoGADF5WsXBoAYAN3ktI/8JAJZ6LUzALwgAkHs0wf9PwQsAW4a6w8PEw8LGwcLDAwAwiEPBBAA2iDo2CQBaiEA///78/AUAZ4o6//7BBwBSjEZHJgoAEo5Ml//CwrcGABiOQ4vAAwBdqEbCBwCYqjQvLwMQlABW/AkAfbJA/cE7KgMAtLU9wAsAgMNA/jv9//07CQBkxEYqI/0HAGnPSf7+/icFAFrQUywGAHDQRir9BAEB3EzCwAYADd0awMXEwwUApORJ///+AwAS6xrDAxB0F2v+BBCOF3A0AERCAQEAAAAWAAAAAAIFAAAAAAAARUI=
SUNSUzIxAAADMAEBAAAAAMUAxQAEASwBAAAAgwIXvgBMAI4PkgBPABEPYABmAAkOiAB5AIoOlAB6ABsOrwB9ABoPhwCQABEOYACVAAkPkwCVAJEOSgCgAHQPuwCnAJ8PYQCrAHQPvgC4ACgPWgDEAGQOnQDVADQPvwDeADMPkQDsADwPfwDzALEPQwD5AEEPhwD7AEIPxQATAUEPWgAYAcIPpgAaAUIPcn9DdVN3rvu6i26HioO7AGf6+HM5eir46JO9D6mP7QPKie6SgIMxikX7tZbllnL6gIOxe6II+W4hAj4SHXiWh3YTzW6hAlkTEYia9r736fPO8uNcoftaAa6H2gEODsP4nf21jRkL8HPBdbJ/ZoIT3z+T4JMZCWIDugD/EdsHZoKjEauCNgDiA+8JqPZLIDYBAeUXKAMAujQXwAUArjcTwToHAKA5ED1dAwCbQAzACgCWRA9bPk8OAGdIA1c+REEQAFNKCf7Bwv3AVEf+VwwAdU4GL8DA/sE1EABHUAZQ/ldX/1QLAJRQEMBERP7/CQBGWQb9xf3//0cEAEVhDFURAGNmBv/+U/7ARP/AwDcEAFh0Az0LADh6BsI9wP4rBQCMexrASgwAl3waR0TAwD4HALN8Fj5MCgCygRr/wP9VNwwAPIMDwjXA/v4+FAA6iwPAw/0r//5BW/9GCAB2lRBANQ8AZJcJMzj///7AwPzCEABOn/r9My//K0YFAFyrd8NrCQC+qyA+R/8IAMK6JP//wMBACAC+vCtXwEYMACbB4v48+/8z/wcAVsJrwsJ+BwBewwP9+/4gCQBYyGnDwcP+w5oJAGXMcZ9hwQQAcs0kKgMAbNIk/gcAodcwQGQFAJzYN8BGBwDD4DHAQ/0GAL7hN8DBQQcAXOIW+f0wEwAh5cn8/f/A/v79/P3A/f3BwP7//g0AkOi3w8LCxMLEw8HBwsEFAFbqTJIFAGHuN/4pBABc70N1BQCP8D09BQCV8DpABQB/90ZPBAD8+kM9BAAK/EPE/gQAQv1DkQQAhv9GSgQAi/9APg8QUyqwMP3++/cW/y9EQgEBAAAAFgAAAAACBQAAAAAAAEVC