如何在C#中序列化Digital Persona的指纹并保存到数据库
How to Serialize the fingerprint of Digital Persona in C# and saved to a database
我下载了供我的 digitalPersona 设备使用的注册示例代码。它已经可以注册和验证指纹,但问题是它将其指纹 .fpt 文件保存在一个文件夹中。我想把它保存在数据库中。
我无法序列化 FMD objetc 类型的指纹,
private void OnCaptured(CaptureResult captureResult)
{
try
{
//check capture quality and throw an error if bad
if (!_sender.CheckCaptureResult(captureResult)) return;
SendMessage(Action.SendMessage, "la huella se capturo");
DataResult<Fmd> resultConversion = FeatureExtraction.CreateFmdFromFid(captureResult.Data, Constants.Formats.Fmd.ANSI);
if (captureResult.ResultCode != Constants.ResultCode.DP_SUCCESS)
{
_sender.Reset = true;
throw new Exception(captureResult.ResultCode.ToString());
}
if (count == 0)
{
indiceDr = resultConversion.Data;
XmlSerializer xml = new XmlSerializer(resultConversion.GetType());
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
xml.Serialize(writer,resultConversion);
count += 1;
SendMessage(Action.SendMessage, "Ahora coloca tu pulgar en el lector");
SendMessage(Action.SendMessage, "gethashcode = "+sb.ToString());
}
else if (count == 1)
{
pulgarDr = resultConversion.Data;
count += 1;
SendMessage(Action.SendMessage, "Ahora coloca cualquier dedo en el lector");
}
else if (count == 2)
{
AnyFinger = resultConversion.Data;
Fmd[] fmds = new Fmd[2];
fmds[0] = indiceDr;
fmds[1] = pulgarDr;
//Verificar la documentacion del SDK
int thresholdScore = DPFJ_PROBABILITY_ONE * 1 / 10000;
IdentifyResult identifyResult = Comparison.Identify(AnyFinger,0,fmds, thresholdScore, 2);
if (identifyResult.ResultCode != Constants.ResultCode.DP_SUCCESS)
{
_sender.Reset = true;
throw new Exception(identifyResult.ResultCode.ToString());
}
SendMessage(Action.SendMessage,"Resultado de la identificación " + identifyResult.Indexes.Length.ToString());
SendMessage(Action.SendMessage, "coloca el indice" );
count = 0;
}
}
catch (Exception ex)
{
SendMessage(Action.SendMessage, "Error" + ex.Message);
}
}
您可以在 XML 中像这样序列化:
tempFingerPrint = Fmd.SerializeXml(resultConversion.Data);
好吧,我建议您以 byte[] 格式导入和导出 Fmd 数据。
Fmd > get byte[] > convert byte[] to base64
然后
base64 > decode to byte[] > then import to Fmd
我的意思是 Java 中的 C# 导出和导入。
导出 (C#)
Fmd fmd = resultConversion.Data;
string base64Fmd = Convert.ToBase64String(fmd.Bytes)
导入(Java)
byte[] bFmd = Base64.getDecoder().decode(base64Fmd.getBytes("UTF-8"));
Fmd fmd = UareUGlobal.GetImporter().ImportFmd(bytes1, Fmd.Format.ANSI_378_2004, Fmd.Format.ANSI_378_2004)
我使用技巧,因为我在 Java lib dpuareu.jar
.
中找不到函数 SerializeXml
和 DeserializeXml
所以,这是我找到的导入和导出 Fmd 的唯一方法。
然而,
This will not limit you to use whether Java or C#, and You can combine both of them
我下载了供我的 digitalPersona 设备使用的注册示例代码。它已经可以注册和验证指纹,但问题是它将其指纹 .fpt 文件保存在一个文件夹中。我想把它保存在数据库中。
我无法序列化 FMD objetc 类型的指纹,
private void OnCaptured(CaptureResult captureResult)
{
try
{
//check capture quality and throw an error if bad
if (!_sender.CheckCaptureResult(captureResult)) return;
SendMessage(Action.SendMessage, "la huella se capturo");
DataResult<Fmd> resultConversion = FeatureExtraction.CreateFmdFromFid(captureResult.Data, Constants.Formats.Fmd.ANSI);
if (captureResult.ResultCode != Constants.ResultCode.DP_SUCCESS)
{
_sender.Reset = true;
throw new Exception(captureResult.ResultCode.ToString());
}
if (count == 0)
{
indiceDr = resultConversion.Data;
XmlSerializer xml = new XmlSerializer(resultConversion.GetType());
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
xml.Serialize(writer,resultConversion);
count += 1;
SendMessage(Action.SendMessage, "Ahora coloca tu pulgar en el lector");
SendMessage(Action.SendMessage, "gethashcode = "+sb.ToString());
}
else if (count == 1)
{
pulgarDr = resultConversion.Data;
count += 1;
SendMessage(Action.SendMessage, "Ahora coloca cualquier dedo en el lector");
}
else if (count == 2)
{
AnyFinger = resultConversion.Data;
Fmd[] fmds = new Fmd[2];
fmds[0] = indiceDr;
fmds[1] = pulgarDr;
//Verificar la documentacion del SDK
int thresholdScore = DPFJ_PROBABILITY_ONE * 1 / 10000;
IdentifyResult identifyResult = Comparison.Identify(AnyFinger,0,fmds, thresholdScore, 2);
if (identifyResult.ResultCode != Constants.ResultCode.DP_SUCCESS)
{
_sender.Reset = true;
throw new Exception(identifyResult.ResultCode.ToString());
}
SendMessage(Action.SendMessage,"Resultado de la identificación " + identifyResult.Indexes.Length.ToString());
SendMessage(Action.SendMessage, "coloca el indice" );
count = 0;
}
}
catch (Exception ex)
{
SendMessage(Action.SendMessage, "Error" + ex.Message);
}
}
您可以在 XML 中像这样序列化:
tempFingerPrint = Fmd.SerializeXml(resultConversion.Data);
好吧,我建议您以 byte[] 格式导入和导出 Fmd 数据。
Fmd > get byte[] > convert byte[] to base64
然后
base64 > decode to byte[] > then import to Fmd
我的意思是 Java 中的 C# 导出和导入。
导出 (C#)
Fmd fmd = resultConversion.Data;
string base64Fmd = Convert.ToBase64String(fmd.Bytes)
导入(Java)
byte[] bFmd = Base64.getDecoder().decode(base64Fmd.getBytes("UTF-8"));
Fmd fmd = UareUGlobal.GetImporter().ImportFmd(bytes1, Fmd.Format.ANSI_378_2004, Fmd.Format.ANSI_378_2004)
我使用技巧,因为我在 Java lib dpuareu.jar
.
中找不到函数 SerializeXml
和 DeserializeXml
所以,这是我找到的导入和导出 Fmd 的唯一方法。
然而,
This will not limit you to use whether Java or C#, and You can combine both of them