The last published version of SourceAFIS still stupports it (in C#). Nevertheless, I am now recommending everyone to use images for permanent storage and to generate native templates for whatever recognition engine they are using at the moment. ISO template support will be dropped from newer versions of SourceAFIS for this reason.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Robert, Thanks for your reply
Could you provide sample code?
Sorry, I am still searching from SourceAfis.dll, but still can't find where is the method to generate ISO 19794-2 template. there are no method to load image, and then extract it to ISO 19794-2.
Fingerprint fp2 = new Fingerprint();
fp2.AsBitmap = new Bitmap(Bitmap.FromFile("pathToImage"));
.... how to extract to ISO19794-2
May I know how do you get the specification of ISO 19794-2 ? I have googling and still can't find the free document for learning ISO 19794-2
Thanks a lot
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I have 3sample files which contains 'FMR....' identifier. I believe it is ISO 19794-2 Fingerprint Minutea Record format. I still confuse how to get ISO 19794-2 from image with SourceAfis.dll. I wish you could provide sample code. Thanks Robert
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
AfisEngine Afis = new AfisEngine();
Fingerprint fp = new Fingerprint();
fp.AsBitmap = new Bitmap(Bitmap.FromFile("fp_image1.bmp"));
Person person = new Person();
person.Fingerprints.Add(fp);
Afis.Extract(person);
byte [] data= fp.AsIsoTemplate;
BinaryWriter a= new BinaryWriter(File.Open("fp_iso19794-2 from fp_image1.dat",FileMode.Create));
foreach (byte element in data)
{
a.Write(element);
}
a.Close();
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
AfisEngine Afis = new AfisEngine();
Fingerprint fp = new Fingerprint();
fp.AsBitmap = new Bitmap(Bitmap.FromFile("fp_image1.bmp"));
Person person = new Person();
person.Fingerprints.Add(fp);
Afis.Extract(person);
byte [] data= fp.AsIsoTemplate;
BinaryWriter a= new BinaryWriter(File.Open("iso19794-2 template from fp_image1.dat",FileMode.Create));
foreach (byte element in data) {
a.Write(element);
}
a.Close();
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Just an update about ISO 19794-2 support: ISO templates are supported in a very limited form that is functional just enough to allow import of ISO templates from sensors that refuse to provide fingerprint image.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
May you help me getting the source code of the matcher (only the matcher) that compares between ISO/IEC 19794-2 2011 biometric data templates ?
(I will be glad if it's available in C(or it can be in some way))
And On what ISO template do your code support specifically ? (kindly check the second point on the first standard description to relate https://secugen.com/biometric-standards/)
Thanks
parentheses everywhere :D
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
SourceAFIS supports a very minimal subset of ISO/IEC 19794-2:2005 (not 2011) that is barely enough to import minutia data from template-only fingerprint readers.
It means I can convert a template that was storage in a DB ; for example my case is that I storage the templates in a DB PostgreSQL in a field type "bytea" , it's saved in this way:
The fingerprint I use is U are U 4500 from digital persona. I can match when I read a template from the device against this template storage in DB. So my question is;
when I recover the fingerprint as type byte :
The fingerprint you posted starts with zero byte. ISO templates start with bytes that read "FMR" in ASCII. This might be some sensor-specific template format. You should try to get fingerprint image from the sensor instead.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
That means I might do Rust port in the future if I feel like it. Or someone could pay me to do it now. Contrast this with C, which I consider obsolete and dangerous and I would be reluctant to support it. C is still required for some embedded systems, but these are too slow to run feature extractor anyway, although they might be fast enough for matching. I am mostly hoping that Rust gets ported to all the embedded devices that people might reasonably wish to use.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Such "freely available description of ISO 19794-2 templates" doesn't exist yet. The whole point of custom development page is to suggest features that can be sponsored.
If you just need to import templates from existing fingerprint reader, the minimal implementation present in SourceAFIS should be enough. Full ISO support is likely necessary only for compliance.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The idea is that there are 3 data formats inside ISO/IEC 19794-2 itself
1- Record-based format.
2- Normal format => for use on a smart card in a match-on-card application.
3- Compact format => for use on a smart card in a match-on-card application.
Which one does SourceAFIS support ?
May you let me know if there is any updates regarding ""freely available description of ISO 19794-2 templates" ? :-)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I can confirm that SourceAFIS uses the record-based format from ISO 19794-2. SourceAFIS doesn't support either of the smartcard formats defined in ISO 19794-2.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Is it possible to use SourceAFIS to convert fingerprint image (in BMP or JPG) format to ISO 19794-2 format (record, or standard or compact format) ?
The last published version of SourceAFIS still stupports it (in C#). Nevertheless, I am now recommending everyone to use images for permanent storage and to generate native templates for whatever recognition engine they are using at the moment. ISO template support will be dropped from newer versions of SourceAFIS for this reason.
Hi Robert, Thanks for your reply
Could you provide sample code?
Sorry, I am still searching from SourceAfis.dll, but still can't find where is the method to generate ISO 19794-2 template. there are no method to load image, and then extract it to ISO 19794-2.
Fingerprint fp2 = new Fingerprint();
fp2.AsBitmap = new Bitmap(Bitmap.FromFile("pathToImage"));
.... how to extract to ISO19794-2
May I know how do you get the specification of ISO 19794-2 ? I have googling and still can't find the free document for learning ISO 19794-2
Thanks a lot
I have 3sample files which contains 'FMR....' identifier. I believe it is ISO 19794-2 Fingerprint Minutea Record format. I still confuse how to get ISO 19794-2 from image with SourceAfis.dll. I wish you could provide sample code. Thanks Robert
Is this correct ?
AfisEngine Afis = new AfisEngine();
Fingerprint fp = new Fingerprint();
fp.AsBitmap = new Bitmap(Bitmap.FromFile("fp_image1.bmp"));
Person person = new Person();
person.Fingerprints.Add(fp);
Afis.Extract(person);
byte [] data= fp.AsIsoTemplate;
BinaryWriter a= new BinaryWriter(File.Open("fp_iso19794-2 from fp_image1.dat",FileMode.Create));
foreach (byte element in data)
{
a.Write(element);
}
a.Close();
is this code correct?
AfisEngine Afis = new AfisEngine();
Fingerprint fp = new Fingerprint();
fp.AsBitmap = new Bitmap(Bitmap.FromFile("fp_image1.bmp"));
Person person = new Person();
person.Fingerprints.Add(fp);
Afis.Extract(person);
byte [] data= fp.AsIsoTemplate;
BinaryWriter a= new BinaryWriter(File.Open("iso19794-2 template from fp_image1.dat",FileMode.Create));
foreach (byte element in data) {
a.Write(element);
}
a.Close();
Yes, that's correct. Although you could just write File.WriteAllBytes(filename, data). SourceAFIS part of your code is correct.
Just an update about ISO 19794-2 support: ISO templates are supported in a very limited form that is functional just enough to allow import of ISO templates from sensors that refuse to provide fingerprint image.
hi Robert,
May you help me getting the source code of the matcher (only the matcher) that compares between ISO/IEC 19794-2 2011 biometric data templates ?
(I will be glad if it's available in C(or it can be in some way))
And On what ISO template do your code support specifically ? (kindly check the second point on the first standard description to relate https://secugen.com/biometric-standards/)
Thanks
parentheses everywhere :D
SourceAFIS supports a very minimal subset of ISO/IEC 19794-2:2005 (not 2011) that is barely enough to import minutia data from template-only fingerprint readers.
You can follow java tutorial:
https://sourceafis.machinezoo.com/java
Except that you would use convert() instead of create() when importing ISO templates:
https://sourceafis.machinezoo.com/javadoc/com/machinezoo/sourceafis/FingerprintTemplate.html#convert-byte:A-
There is no C port in sight. I am considering Rust port though.
Please help me with a doubt: when you put this link:
https://sourceafis.machinezoo.com/javadoc/com/machinezoo/sourceafis/FingerprintTemplate.html#convert-byte:A-
It means I can convert a template that was storage in a DB ; for example my case is that I storage the templates in a DB PostgreSQL in a field type "bytea" , it's saved in this way:
\000\370\201\001\310\343s\\300A7\011\253q\260\335\024U\222c\306\004Fx[\277\243$\354>\363\035D<<\303/\353\360\336\3734%\257\216\374\243wx\016\223\210\305\322\023!\333=\223j\377\256\\375\316\277v\020\371{]\347\030\353\3421\311$\223_\316Y\241\365\006\256\323^\361\357\254\300i\265\316\025\206\362\264\037\261\364\355\177\372\341\024\212\177aK\021\257Ud\005\364\266\360T\251\306C\362Q\234\202\365\010\216\275l\000\325\3073\355$Q\016
\300\030\011\3676\265\345\334Z\200\355\011U\242\277+\201E\032ih\243\347j\276\356\333yB\367\367\2364{e;\211\314\335\242\214\322~\330\272\3350o\251\254\350Q
\2265\006\236\006?\-\007\250\327\037xs5\013L\271\006u0\371.\346\237\311\272\011\225\372\221]\337\027\332\224|+\304[\332j\247\267\265\351\344j+k\263\311Q\371f\227O?\#\255\240d\355c\257\233\330\256\027\245\341\030w\310\261\373E\343mQ\030\233x\330C\000]\226\306bbc\262-/\204\336\2648\262LF\241\031\237/\032He\241\347\337l\344N\242y0~\025rH\224\317\015d3?\363\025\177A\343=c^,I\033\254\231[\202dM\321\220$i\234\316H\030\202\335:f\311j\223\301\330\341\376\376\227\352\245\275\317L\302[\276c\0367\177\316\256n\313\317\324A\345\2201\335J\272\025o\000\370\201\001\310\343s\\300A7\011\253q0\322\024U\222\317\226\220\014\236\231\333-t\025B\024u(8\006b\270Y\340|\343\306\200\335\266f(\242\212\206\231S\272\315\256P\k\3171\257:\223\202\251c\304p\302\226\312\210\202\367\011e\031\343\237\375\014\247\221\246\367\251\3205\3412R\314\373\377\307\372[I_\357[\342\261\265\327@\346\325\371\026\361\336\337\357?\346\353\374\213%\247\304\372\027\325\227\327\222\236N\002\014\360v\234:\270\204Q\221_\367\017t\210\367\331H\010g\000@\22266\303;i%\300}\333.\201\206<\355\244\023\033\300\241atw\350\244\226\361\326\262\007\240g2NH\371>\353\302\354\205V\216g\213\321,\263\202\372\305\347\264?\012\343\341!\336\361\337\017\311\244\213g\302l\355\205\025\237\306[\207;\214<\361\360\214\200\366\205K\216\376\365e\256\266k\270\225*9\016\217\004\320\267\023\025\004<f\3104\266e\347T\266\237\254\332K\265\220\361\350\\036%\251\0121R\337\334\223\025h2( \327\223C{\266Vg\264j\202\365a\376\323\352h\274\037D\366\365\307bi\245H\004\255S\267y\350;\0269\326\203/\010\241_-\226BH\334\022\356\177\013[i\022\032]\303\303\353\322=\205:\277UJ\203\337\363\021\214r\365r\251>_\303\364;@\232\020\027\203\330|\360-2A\201\321\260\215\331\350\200\340\310o\000\370\200\001\310\343s\\300A7\011\253q\360\325\024U\222\026\274\220W\305k''\355\222\375.\362%\357\306\364\320$\310\253\312\370\330c\225\355\003\323\030\267\007jv\016f\361\243vu\037 bK:\255\253\305\324\323\354\243t\024@1hX^O\037\363\037\023\007r+\310#\214\220\217W-\205.\312\256\376F\011e\316\276\3156F+e\013\374\360\001\343\035*\302\320O\2243$-R\242Ri\240\262\031\377;\206\210\364Z\024\307\037JC\222+G\260f5\224n/ T\346:)\002\030j\354b+\272\365o\205\335\245v\321%\204\\213)\262\033\332#\236\237\300\264\301\272\015\023LL~\335\370\361\267\272\346b\374\014j[\331;\036Y\035\302#\214,>\203\306\257c\265\214PF\352\361\016\360\307o;\207\243\006$\0005\372\316i\017\230I\2566\360\342|\001iV\000\350h4J\232\261h\364\316\207S\014gfv\234\266\215\352\366B\275\2054tw\032\\\274GP\315\030.\366\361\037H\222\245\215I\034.\034\036\334\265m@\237\247\034"\271\016\025\334"O;F\204\371O\034\312tb\317f\366\177\236%\015#~\343\034\366#b\213\271_\035\374*\337\260H3\230\215b\245}\250\356/\354\336.\350\345\010t<\216\252\255,G\014v\321\236\015z \322\357\245\034A\276\341=\345S\177C\243
\260V\2527\352o\000\350\201\001\310*\343s\\300A7\011\253qp\335\024U\222\354\265\034V\352\266\256\313q\331\033HF\037\320\236\253x,\307)\372\322\210\205\236\343\177\2102\375v\353\230\364o\354\0327:\323\002\260\304\357e\354\2410\325\343\230\220\222\340\266\027(\341\246\202U\351c\235W\011/\313\223\355\014\310@i\340x\341[\377\276\224A\323P\206fB\341S\032\034\006\236r[\220\021\356\270)B\244m\017\200\266\346-\017b\250\253\001V\012dk\225\222|\213\027}\242\012\216\005\351\322\275\023\337\274\334\320\347A\231\223\346\342Y\302M\307\346Ts\263\213\366\216\304b\\\341\336Q\271\024\322*3\252u\225\011\011\243\266\265\306\362\367\212>_&j\351\024\215\374\036\307zV\021^\271\202\375\011\252\004T\032\303\276\001\012\004@\322W\221\237h\202a7~\215\343>b\010\334\347+\355u\333XV\204\213.
\313s\274.n\205w\324\264N\303U]l\370\373\023q\357\014\2105$<\342\031\352$d\007C]5\254=\304)"Q\344\036[F\032\012:X\267+\364\217G\304\016\013\304+dv\303\320\024-\022s\037\245aY#\004U\220\356f\377\304a-\267 \022\000\377\203\303\024\332J\254\340\330\324\243\002>\007\363\3426=P\237\327=\376\275\226\265\220\3244\030\027%Fcn\307\014i\367\304+\222\036\312\356\312\233\305SV(\356K\226_o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000The fingerprint I use is U are U 4500 from digital persona. I can match when I read a template from the device against this template storage in DB. So my question is;
when I recover the fingerprint as type byte :
PreparedStatement identificarStmt = c.prepareStatement("SELECT name,fingrprint FROM fingerprints");
ResultSet rs = identificarStmt.executeQuery();
....
byte[] candidateImage = rs.getBytes("fingrprint");
Can I send "candidateImage" as parameter to the method to compare against other templates from others vendors?
FingerprintTemplate candidate = new FingerprintTemplate()
.dpi(500)
.convert(candidateImage);
Thanks.
The fingerprint you posted starts with zero byte. ISO templates start with bytes that read "FMR" in ASCII. This might be some sensor-specific template format. You should try to get fingerprint image from the sensor instead.
Thanks for your reply.
But, I am not getting what you mean by
That means I might do Rust port in the future if I feel like it. Or someone could pay me to do it now. Contrast this with C, which I consider obsolete and dangerous and I would be reluctant to support it. C is still required for some embedded systems, but these are too slow to run feature extractor anyway, although they might be fast enough for matching. I am mostly hoping that Rust gets ported to all the embedded devices that people might reasonably wish to use.
yeah implementation in C is still required, while Rust can be used as you're saying I will check it deeply.
Refering to your section here https://sourceafis.machinezoo.com/custom#iso
where can I find this ?
Such "freely available description of ISO 19794-2 templates" doesn't exist yet. The whole point of custom development page is to suggest features that can be sponsored.
If you just need to import templates from existing fingerprint reader, the minimal implementation present in SourceAFIS should be enough. Full ISO support is likely necessary only for compliance.
The idea is that there are 3 data formats inside ISO/IEC 19794-2 itself
1- Record-based format.
2- Normal format => for use on a smart card in a match-on-card application.
3- Compact format => for use on a smart card in a match-on-card application.
Which one does SourceAFIS support ?
May you let me know if there is any updates regarding ""freely available description of ISO 19794-2 templates" ? :-)
those three ISO formats can be found being referred to. here https://secugen.com/biometric-standards/
I don't have a copy of the ISO template specification. It is not available for download. I guess SourceAFIS uses the first format.
I can confirm that SourceAFIS uses the record-based format from ISO 19794-2. SourceAFIS doesn't support either of the smartcard formats defined in ISO 19794-2.