⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 consoleuserinterfacefactory.java

📁 DigitalPersona.rar
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            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 + -