2017-07-30 4 views
0

Javaを使用してWebアプリケーションを開発し、BackEndでフレームワークを、FrontEndでAngularJSを使用しました。エラー統合指紋Java Webアプリケーションを使用したU.are.U SDK

私は指紋スキャンのためにU.are.U SDKと統合しましたが、2つの等しい指紋を比較しようとするとエラーが発生します。

これは角の部分に私のコードです:

私はこのSDKのJavaScriptのAPIで指紋を撮影し
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); 
     }); 
    } 

彼はその後、Webサービスに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に画像を変換していますか? ありがとう!

+0

入力画像はPNG形式ですか?このイメージをどうやって取得しますか?この画像はどこから来たのですか? – LaurentY

+0

はい、これはPNG画像です。これはjavascriptと同じDigital Persona APIの助けを借りてフロントエンドで取得されます。この画像はBase64で生成され、後でhtmlで表示する画像を作成しました –

答えて

0
  1. あなたのPNG画像は、グレースケールで生のByteArrayに変換します

     // 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. あなたのFIDは、FMD

     Fmd fmd = UareUGlobal.GetEngine().CreateFmd(fid, 
         Fid.Format.ANSI_381_2004); 
    
  3. に変換

     Fid fid = UareUGlobal.getImporter().ImportRaw(rawPixels, 
         width, height, inDpi, fingerPosition, cbeffId, 
         Fid.Format.ANSI_381_2004, outDpi, rotate180); 
    
  4. をFIDためにあなたのByteArrayに変換

    は、今、あなたは、私はちょうど私が取得し、データを保存し、DBからデータを格納m_fmdAuxiliar可変で、成功した結果を取得するには、このメソッドを使用して現在のキャプチャと

+0

ありがとう@LaurentY、あなたの助けを借りて、私は両方の指紋を比較するときに問題を解決することができました! 私が必要としていたイメージ管理の主題だった場合、コードを変更することなく、ヘルプとFIDオブジェクトを追加することが最初の試みで解決されました。私はあなたがたくさん嫌い... –

0

このFMDを比較することができます。

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); 
関連する問題