手指数据匹配错误
Error matching finger data
我目前正在做一个简单的 java 项目,我正在扫描用户的指纹,将其转换为字符串,使用文本将其存储在数据库 (MySQL) 中,然后从数据库,并将其与新的指纹进行比对,进行比对操作。问题是针对同一个人,无法识别指纹数据。
为了采集指纹数据,我使用的是 Mantra 的 MFS100 指纹设备!!!
这是代码快照:
byte[] ISOTemplate = null;
/* Finger data contains
* byte[] ISOTemplate;
*/
FingerData data = new FingerData();
/*It will now scan fingerprints from device*/
int ret = mfs100.AutoCapture(data,timeout,false,false);
//Initializing local ISOTemplate
ISOTemplate = new byte[data.ISOTemplate().length];
System.arraycopy(data.ISOTemplate(), 0, ISOTemplate, 0, data.ISOTemplate().length);
//Storing it in database
String str = new String(ISOTemplate);
Connection con = (Connection)
DriverManager.getConnection("jdbc:mysql://localhost:3306/db","user","pass");
PreparedStatement ps = con.prepareStatement("update datatable set fingerscan = ? where empID like '123'");
ps.setString(1,str);
ps.executeUpdate();
到这里为止,一切正常。问题在这里:
PreparedStatement ps = con.prepareStatement("select fingerscan from datatable where empID like '123'");
ResultSet rs = ps.executeQuery();
while(rs.next()){
String tmp = rs.getString("fingerscan");
ISOTemplate = tmp.getBytes();
}
//captures new data from user
int ret = mfs100.AutoCapture(data, timeout, false, false);
if(ret == 0){
int score = 0;
score = mfs100.MatchISO(data.ISOTemplate(), ISOTemplate);
System.out.println("Score:"+score);
if(score > 14000){
Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Success:"+score, ButtonType.OK);
alert.show();
}else if (score >= 0 && score < 14000) {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Failure:"+score, ButtonType.OK);
alert.show();
}
}
根据设备规格,匹配分数应该大于14000。但在我的情况下,分数只有1300左右。
我试过这个:
How to save "Finger Print" in database
但是分数还是不到14000
我知道问题是当我将手指数据存储在 mysql 数据库中时,数据变得无用了。
所以请建议我一些将手指数据存储到数据库中的方法。
请帮我提高匹配分数。
不要将字节数组转换为字符串。
在MySQL
创建一个 BLOB 类型的列
保存模板
在Java中使用PreparedStatement
的setBytes方法
PreparedStatement ps = con.prepareStatement("update datatable set fingerscan = ? where empID like '123'");
ps.setBytes(1,ISOTemplate);
ps.executeUpdate();
获取模板
在Java中使用ResultSet
的getBytes方法
PreparedStatement ps = con.prepareStatement("select fingerscan from
datatable where empID like '123'");
ResultSet rs = ps.executeQuery();
while(rs.next()){
String tmp = rs.getBytes(1);
ISOTemplate = tmp.getBytes();
}
我目前正在做一个简单的 java 项目,我正在扫描用户的指纹,将其转换为字符串,使用文本将其存储在数据库 (MySQL) 中,然后从数据库,并将其与新的指纹进行比对,进行比对操作。问题是针对同一个人,无法识别指纹数据。 为了采集指纹数据,我使用的是 Mantra 的 MFS100 指纹设备!!! 这是代码快照:
byte[] ISOTemplate = null;
/* Finger data contains
* byte[] ISOTemplate;
*/
FingerData data = new FingerData();
/*It will now scan fingerprints from device*/
int ret = mfs100.AutoCapture(data,timeout,false,false);
//Initializing local ISOTemplate
ISOTemplate = new byte[data.ISOTemplate().length];
System.arraycopy(data.ISOTemplate(), 0, ISOTemplate, 0, data.ISOTemplate().length);
//Storing it in database
String str = new String(ISOTemplate);
Connection con = (Connection)
DriverManager.getConnection("jdbc:mysql://localhost:3306/db","user","pass");
PreparedStatement ps = con.prepareStatement("update datatable set fingerscan = ? where empID like '123'");
ps.setString(1,str);
ps.executeUpdate();
到这里为止,一切正常。问题在这里:
PreparedStatement ps = con.prepareStatement("select fingerscan from datatable where empID like '123'");
ResultSet rs = ps.executeQuery();
while(rs.next()){
String tmp = rs.getString("fingerscan");
ISOTemplate = tmp.getBytes();
}
//captures new data from user
int ret = mfs100.AutoCapture(data, timeout, false, false);
if(ret == 0){
int score = 0;
score = mfs100.MatchISO(data.ISOTemplate(), ISOTemplate);
System.out.println("Score:"+score);
if(score > 14000){
Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Success:"+score, ButtonType.OK);
alert.show();
}else if (score >= 0 && score < 14000) {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Failure:"+score, ButtonType.OK);
alert.show();
}
}
根据设备规格,匹配分数应该大于14000。但在我的情况下,分数只有1300左右。 我试过这个:
How to save "Finger Print" in database
但是分数还是不到14000
我知道问题是当我将手指数据存储在 mysql 数据库中时,数据变得无用了。 所以请建议我一些将手指数据存储到数据库中的方法。 请帮我提高匹配分数。
不要将字节数组转换为字符串。
在MySQL
创建一个 BLOB 类型的列
保存模板
在Java中使用PreparedStatement
的setBytes方法PreparedStatement ps = con.prepareStatement("update datatable set fingerscan = ? where empID like '123'");
ps.setBytes(1,ISOTemplate);
ps.executeUpdate();
获取模板
在Java中使用ResultSet
的getBytes方法PreparedStatement ps = con.prepareStatement("select fingerscan from
datatable where empID like '123'");
ResultSet rs = ps.executeQuery();
while(rs.next()){
String tmp = rs.getBytes(1);
ISOTemplate = tmp.getBytes();
}