📄 consoleuserinterfacefactory.java
字号:
return choice;
}
/**
* Adds user to the database
*/
private void addUser() {
System.out.printf("Adding person to the database...\n");
String username = ShowDialog("Enter a name: ");
if (userDatabase.addUser(username) != null) {
System.out.printf("\"%s\" was added to the database.\n", username);
} else {
System.out.printf("\"%s\" was not added to the database.\n", username);
}
}
/**
* register() looks for the user in the database, invokes CreateRegistrationTemplate(),
* and stores the template in the database.
*
* @param activeReader reader to use for fingerprint acquisition
*/
private void register(String activeReader) {
System.out.printf("Performing fingerprint enrollment...\n");
String username = ShowDialog("Enter the name of the person to be enrolled: ");
UserDatabase.User user = userDatabase.getUser(username);
if (user == null) {
System.out.printf("\"%s\" was not found in the database.\n", username);
} else {
StringBuilder sb = new StringBuilder();
for (DPFPFingerIndex finger : DPFPFingerIndex.values()) {
if (user.getTemplate(finger) != null)
sb.append(" ").append(fingerName(finger)).append("\n");
}
String fingers = sb.toString();
if (fingers.length() > 0) {
System.out.printf("The following fingers for \"%s\" have already been enrolled:\n%sChoose a finger to enroll:", username, fingers);
} else {
System.out.printf("No fingers for \"%s\" have been enrolled. Choose a finger to enroll:", username);
}
Vector<MenuItem> menu = new Vector<MenuItem>();
for (DPFPFingerIndex finger : DPFPFingerIndex.values())
menu.add(new MenuItem(fingerName(finger), finger.ordinal()));
int nFinger = MenuShow(menu, MENU_WITH_BACK);
if (nFinger == backItem.getValue()) {
System.out.printf("Enrollment canceled.\n");
} else {
try {
DPFPFingerIndex finger = DPFPFingerIndex.values()[nFinger];
DPFPFeatureExtraction featureExtractor = DPFPGlobal.getFeatureExtractionFactory().createFeatureExtraction();
DPFPEnrollment enrollment = DPFPGlobal.getEnrollmentFactory().createEnrollment();
while (enrollment.getFeaturesNeeded() > 0)
{
DPFPSample sample = getSample(activeReader,
String.format("Scan your %s finger (%d remaining)\n", fingerName(finger), enrollment.getFeaturesNeeded()));
if (sample == null)
continue;
DPFPFeatureSet featureSet;
try {
featureSet = featureExtractor.createFeatureSet(sample, DPFPDataPurpose.DATA_PURPOSE_ENROLLMENT);
} catch (DPFPImageQualityException e) {
System.out.printf("Bad image quality: \"%s\". Try again. \n", e.getCaptureFeedback().toString());
continue;
}
enrollment.addFeatures(featureSet);
}
DPFPTemplate template = enrollment.getTemplate();
user.setTemplate(finger, template);
System.out.printf("The %s was enrolled.\n", fingerprintName(finger));
} catch (DPFPImageQualityException e) {
System.out.printf("Failed to enroll the finger.\n");
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
/**
* Acquires fingerprint from the sensor and matches it with the registration templates
* stored in the database.
*
* @param activeReader fingerprint reader to use
*/
private void verify(String activeReader) {
System.out.printf("Performing fingerprint verification...\n");
String username = ShowDialog("Enter the name of the person to be verified: ");
UserDatabase.User user = userDatabase.getUser(username);
if (user == null) {
System.out.printf("\"%s\" was not found in the database.\n", username);
} else {
if (user.isEmpty()) {
System.out.printf("No fingers for \"%s\" have been enrolled.\n", username);
} else {
try {
DPFPSample sample = getSample(activeReader, "Scan your finger\n");
if (sample == null)
throw new Exception();
DPFPFeatureExtraction featureExtractor = DPFPGlobal.getFeatureExtractionFactory().createFeatureExtraction();
DPFPFeatureSet featureSet = featureExtractor.createFeatureSet(sample, DPFPDataPurpose.DATA_PURPOSE_VERIFICATION);
DPFPVerification matcher = DPFPGlobal.getVerificationFactory().createVerification();
matcher.setFARRequested(DPFPVerification.MEDIUM_SECURITY_FAR);
for (DPFPFingerIndex finger : DPFPFingerIndex.values()) {
DPFPTemplate template = user.getTemplate(finger);
if (template != null) {
DPFPVerificationResult result = matcher.verify(featureSet, template);
if (result.isVerified()) {
System.out.printf("Matching finger: %s, FAR achieved: %g.\n",
fingerName(finger), (double)result.getFalseAcceptRate()/DPFPVerification.PROBABILITY_ONE);
return;
}
}
}
} catch (Exception e) {
System.out.printf("Failed to perform verification.");
}
System.out.printf("No matching fingers for \"%s\" were found.\n", username);
}
}
}
/**
* Prints information on all available readers
*/
private void listReaders() {
DPFPReadersCollection readers = DPFPGlobal.getReadersFactory().getReaders();
if (readers == null || readers.size() == 0) {
System.out.printf("There are no readers available.\n");
return;
}
System.out.printf("Available readers:\n");
for (DPFPReaderDescription readerDescription : readers)
System.out.println(readerDescription.getSerialNumber());
}
/**
* selectReader() stores chosen reader in *pActiveReader
* @param activeReader currently selected reader
* @return reader selected
* @throws IndexOutOfBoundsException if no reader available
*/
String selectReader(String activeReader) throws IndexOutOfBoundsException {
DPFPReadersCollection readers = DPFPGlobal.getReadersFactory().getReaders();
if (readers == null || readers.size() == 0)
throw new IndexOutOfBoundsException("There are no readers available");
Vector<MenuItem> menu = new Vector<MenuItem>();
for (DPFPReaderDescription readerDescription : readers)
menu.add(new MenuItem(readerDescription.getSerialNumber(), menu.size()));
menu.add(new MenuItem("Any available readers", menu.size()));
int res = MenuShow(menu, MENU_WITH_BACK);
if (res == backItem.getValue()) {
return activeReader;
} else if (res == readers.size()) {
return null;
} else {
return readers.get(res).getSerialNumber();
}
}
/**
* Acquires a fingerprint sample from the specified fingerprint reader
*
* @param activeReader Fingerprint reader to use for acquisition
* @return sample acquired
* @throws InterruptedException if thread is interrupted
*/
private DPFPSample getSample(String activeReader, String prompt)
throws InterruptedException
{
final LinkedBlockingQueue<DPFPSample> samples = new LinkedBlockingQueue<DPFPSample>();
DPFPCapture capture = DPFPGlobal.getCaptureFactory().createCapture();
capture.setReaderSerialNumber(activeReader);
capture.setPriority(DPFPCapturePriority.CAPTURE_PRIORITY_LOW);
capture.addDataListener(new DPFPDataListener()
{
public void dataAcquired(DPFPDataEvent e) {
if (e != null && e.getSample() != null) {
try {
samples.put(e.getSample());
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
});
capture.addReaderStatusListener(new DPFPReaderStatusAdapter()
{
int lastStatus = DPFPReaderStatusEvent.READER_CONNECTED;
public void readerConnected(DPFPReaderStatusEvent e) {
if (lastStatus != e.getReaderStatus())
System.out.println("Reader is connected");
lastStatus = e.getReaderStatus();
}
public void readerDisconnected(DPFPReaderStatusEvent e) {
if (lastStatus != e.getReaderStatus())
System.out.println("Reader is disconnected");
lastStatus = e.getReaderStatus();
}
});
try {
capture.startCapture();
System.out.print(prompt);
return samples.take();
} catch (RuntimeException e) {
System.out.printf("Failed to start capture. Check that reader is not used by another application.\n");
throw e;
} finally {
capture.stopCapture();
}
}
private String ShowDialog(String prompt) {
System.out.printf(prompt);
try {
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
return stdin.readLine();
} catch (IOException e) {
return "";
}
}
private String fingerName(DPFPFingerIndex finger) {
return fingerNames.get(finger);
}
private String fingerprintName(DPFPFingerIndex finger) {
return fingerNames.get(finger) + " fingerprint";
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -