2017-07-30 74 views
0

我开发了一个使用Java的Web应用程序,并在BackEnd中播放框架,在FrontEnd中使用AngularJS。集成指纹U.are.U SDK与Java Web应用程序的错误

我与U.are.U SDK进行了指纹扫描集成,但是在尝试比较两个相同的指纹时出现错误。

这是我在角部位代码:

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的JavaScript API的指纹。

然后,他发出了Base64编码字符串到Web服务,并按照以下步骤进行:

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" 
    } 
} 

有没有人转换的图像口蹄疫,可以帮助我吗? 谢谢!

+0

你的输入图像是PNG格式吗?你如何获得这张图片?这张图片是从哪里来的? – LaurentY

+0

是的,它是一个PNG图像,这是通过javascript和相同的Digital Persona API获得的前端。这个图像是在Base64中生成的,我随后建立了一个图像以显示在html –

回答

0
  1. 转换您的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(); 
    
  2. 转换您的ByteArray的FID

     Fid fid = UareUGlobal.getImporter().ImportRaw(rawPixels, 
         width, height, inDpi, fingerPosition, cbeffId, 
         Fid.Format.ANSI_381_2004, outDpi, rotate180); 
    
  3. 转换您的FID口蹄疫

     Fmd fmd = UareUGlobal.GetEngine().CreateFmd(fid, 
         Fid.Format.ANSI_381_2004); 
    
  4. 现在你可以用当前捕获

+0

谢谢@LaurentY,在您的帮助下,我可以解决我在比较两个指纹时遇到的问题! 如果这是我需要的图像管理主题,而无需修改我的代码,那么添加您的帮助和FID对象就可以解决第一次尝试。我很讨厌你... –

0

我用这个方法来获得成功的结果,是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); 
相关问题