将指纹 U.are.U SDK 与 java 网络应用程序集成时出错
Error integration fingerprint U.are.U SDK with java web application
我开发了一个 Web 应用程序,在后端使用 Java 和 play 框架,在前端使用 AngularJS。
我集成了 U.are.U SDK 进行指纹扫描,但是我在尝试比较两个相同的指纹时遇到错误。
这是我在 Angular 部分的代码:
if(currentFormat == Fingerprint.SampleFormat.PngImage){
localStorage.setItem("imageSrc", "");
var samples = JSON.parse(s.samples); //parse json
var finger = Fingerprint.b64UrlTo64(samples[0]); // convertion to Base64
localStorage.setItem("imageSrc", "data:image/png;base64," + finger);
var vDiv = document.getElementById('imagediv');
vDiv.innerHTML = "";
var image = document.createElement("img");
image.id = "image";
image.src = localStorage.getItem("imageSrc");
vDiv.appendChild(image);
AuthService.fingerValidation(finger, vm.username, function(response){
showMessage("Login biométrico", response);
});
}
我用这个SDK的javascriptAPI采集指纹的地方
然后他向网络服务发送了一个 Base64 字符串并执行了以下过程:
UserFingerPrint print = fingerprintService.getFinderByUser(data.getUsername()); //Db data
if (print != null) {
String equals = "";
//'finger' is the base64 String from JavaScript
//Convert finger to byte[]
byte[] bytesImage = fingerprintService.getFMD(Base64.decodeBase64(finger), "first");
//Convert byte[] to FMD format from SDK with parameters of image example
Fmd fmd = UareUGlobal.GetEngine().CreateFmd(bytesImage, 320, 350, 500, 1, 3407615, Fmd.Format.ANSI_378_2004);
//Image from DB
byte[] imageDB = fingerprintService.resizeImage(print.getImage());
Fmd fmd2 = UareUGlobal.GetEngine().CreateFmd(imageDB, 320, 350, 500, 1, 3407615, Fmd.Format.ANSI_378_2004);
//The error is when comparing with the following method.
//The fingerprint is always different, even if it is the same image.
int falsematch_rate = UareUGlobal.GetEngine().Compare(fmd, 0, fmd2, 0);
int target_falsematch_rate = Engine.PROBABILITY_ONE / 100000;
if (falsematch_rate < target_falsematch_rate) {
equals = "match success";
} else {
equals = "No match"
}
}
有没有人将图像转换为 FMD 可以帮助我?
谢谢!
将您的 PNG 图像转换为灰度原始字节数组:
// read an image from the disk
BufferedImage image = ImageIO.read(new File("kittens.jpg"));
setPreferredSize(new Dimension(
image.getWidth(),image.getHeight()));
// create a grayscale image the same size
gray = new BufferedImage(image.getWidth(),image.getHeight(),
BufferedImage.TYPE_BYTE_GRAY);
// convert the original colored image to grayscale
ColorConvertOp op = new ColorConvertOp(
image.getColorModel().getColorSpace(),
gray.getColorModel().getColorSpace(),null);
op.filter(image,gray);
//convert BuffuredImage to raw byte array
WritableRaster raster = gray.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
byte[] rawPixels = data.getData();
将字节数组转换为 FID
Fid fid = UareUGlobal.getImporter().ImportRaw(rawPixels,
width, height, inDpi, fingerPosition, cbeffId,
Fid.Format.ANSI_381_2004, outDpi, rotate180);
将您的 FID 转换为 FMD
Fmd fmd = UareUGlobal.GetEngine().CreateFmd(fid,
Fid.Format.ANSI_381_2004);
现在您可以将此 Fmd 与当前捕获的进行比较
我用这个方法得到了成功的结果,m_fmdAuxiliar一个存储数据库数据的变量,我只是保存数据然后检索。
m_fmd = m_engine.CreateFmd(cap_result.image, Fmd.Format.ANSI_378_2004);
data = m_fmd.getData();
Fmd m_fmdAuxiliar = UareUGlobal.GetImporter().ImportFmd(data, Fmd.Format.ANSI_378_2004, Fmd.Format.ANSI_378_2004);
Fmd m_fmd2 = m_engine.CreateFmd(cap_result.image, Fmd.Format.ANSI_378_2004);
m_score = m_engine.Compare(m_fmdAuxiliar, 0, m_fmd2, 0);
我开发了一个 Web 应用程序,在后端使用 Java 和 play 框架,在前端使用 AngularJS。
我集成了 U.are.U SDK 进行指纹扫描,但是我在尝试比较两个相同的指纹时遇到错误。
这是我在 Angular 部分的代码:
if(currentFormat == Fingerprint.SampleFormat.PngImage){
localStorage.setItem("imageSrc", "");
var samples = JSON.parse(s.samples); //parse json
var finger = Fingerprint.b64UrlTo64(samples[0]); // convertion to Base64
localStorage.setItem("imageSrc", "data:image/png;base64," + finger);
var vDiv = document.getElementById('imagediv');
vDiv.innerHTML = "";
var image = document.createElement("img");
image.id = "image";
image.src = localStorage.getItem("imageSrc");
vDiv.appendChild(image);
AuthService.fingerValidation(finger, vm.username, function(response){
showMessage("Login biométrico", response);
});
}
我用这个SDK的javascriptAPI采集指纹的地方
然后他向网络服务发送了一个 Base64 字符串并执行了以下过程:
UserFingerPrint print = fingerprintService.getFinderByUser(data.getUsername()); //Db data
if (print != null) {
String equals = "";
//'finger' is the base64 String from JavaScript
//Convert finger to byte[]
byte[] bytesImage = fingerprintService.getFMD(Base64.decodeBase64(finger), "first");
//Convert byte[] to FMD format from SDK with parameters of image example
Fmd fmd = UareUGlobal.GetEngine().CreateFmd(bytesImage, 320, 350, 500, 1, 3407615, Fmd.Format.ANSI_378_2004);
//Image from DB
byte[] imageDB = fingerprintService.resizeImage(print.getImage());
Fmd fmd2 = UareUGlobal.GetEngine().CreateFmd(imageDB, 320, 350, 500, 1, 3407615, Fmd.Format.ANSI_378_2004);
//The error is when comparing with the following method.
//The fingerprint is always different, even if it is the same image.
int falsematch_rate = UareUGlobal.GetEngine().Compare(fmd, 0, fmd2, 0);
int target_falsematch_rate = Engine.PROBABILITY_ONE / 100000;
if (falsematch_rate < target_falsematch_rate) {
equals = "match success";
} else {
equals = "No match"
}
}
有没有人将图像转换为 FMD 可以帮助我? 谢谢!
将您的 PNG 图像转换为灰度原始字节数组:
// read an image from the disk BufferedImage image = ImageIO.read(new File("kittens.jpg")); setPreferredSize(new Dimension( image.getWidth(),image.getHeight())); // create a grayscale image the same size gray = new BufferedImage(image.getWidth(),image.getHeight(), BufferedImage.TYPE_BYTE_GRAY); // convert the original colored image to grayscale ColorConvertOp op = new ColorConvertOp( image.getColorModel().getColorSpace(), gray.getColorModel().getColorSpace(),null); op.filter(image,gray); //convert BuffuredImage to raw byte array WritableRaster raster = gray.getRaster(); DataBufferByte data = (DataBufferByte) raster.getDataBuffer(); byte[] rawPixels = data.getData();
将字节数组转换为 FID
Fid fid = UareUGlobal.getImporter().ImportRaw(rawPixels, width, height, inDpi, fingerPosition, cbeffId, Fid.Format.ANSI_381_2004, outDpi, rotate180);
将您的 FID 转换为 FMD
Fmd fmd = UareUGlobal.GetEngine().CreateFmd(fid, Fid.Format.ANSI_381_2004);
现在您可以将此 Fmd 与当前捕获的进行比较
我用这个方法得到了成功的结果,m_fmdAuxiliar一个存储数据库数据的变量,我只是保存数据然后检索。
m_fmd = m_engine.CreateFmd(cap_result.image, Fmd.Format.ANSI_378_2004);
data = m_fmd.getData();
Fmd m_fmdAuxiliar = UareUGlobal.GetImporter().ImportFmd(data, Fmd.Format.ANSI_378_2004, Fmd.Format.ANSI_378_2004);
Fmd m_fmd2 = m_engine.CreateFmd(cap_result.image, Fmd.Format.ANSI_378_2004);
m_score = m_engine.Compare(m_fmdAuxiliar, 0, m_fmd2, 0);