예제 #1
0
        public void extractTemplates(Core.Database.IRecordEnumerable <TInputRecord> inputDatabase, Core.Database.TemplateDatabase.TemplateDatabase templateDatabase)
        {
            onProgressChanged(new ProgressReport("Template extraction started"));

            int total = inputDatabase.getRecords().Count();
            int act   = 0;

            foreach (TInputRecord r in inputDatabase.getRecords())
            {
                act++;

                string message = "Template extraction ";
                message += ".";
                onProgressChanged(new ProgressReport(message, act, total));

                //create input data
                TInputData inputData = this.evaluationSettings.getInputDataCreator().createInputData(r);

                message += ".";
                onProgressChanged(new ProgressReport(message, act, total));

                Core.Template.Persistence.IPersistentTemplate mt = this.evaluationSettings.getPersistentTemplateCreator().createPersistentTemplate(this.evaluationSettings.Name, r.BiometricID);

                foreach (var block in evaluationSettings.getEvaluatedBlockIterator())
                {
                    //var block = bioSystem.getBiometricSystemSettings().getProcessingBlock();
                    //persistent template
                    Core.Template.Persistence.IPersistentTemplate persistentTemplate = mt.createSubtemplate(block.Name);
                    block.extractAndAddToNewTemplate(inputData, persistentTemplate);

                    message += ".";
                    onProgressChanged(new ProgressReport(message, act, total));
                }

                //store template
                templateDatabase.addRecord(new Core.Database.TemplateDatabase.TemplateRecord(r.SampleID, r.BiometricID, mt));

                message += ".";
                onProgressChanged(new ProgressReport(message, act, total));
            }
        }
예제 #2
0
        public void evaluateRecords(Core.Database.IRecordEnumerable <TInputRecord> inputDatabase, TemplateDatabase templateDatabase, Core.Evaluation.Results.Results results)
        {
            onProgressChanged(new ProgressReport("Records evaluation started"));

            Dictionary <string, Dictionary <int, Core.Database.TemplateDatabase.TemplateRecord> > cache = new Dictionary <string, Dictionary <int, Core.Database.TemplateDatabase.TemplateRecord> >();

            //onProgressChanged(new ProgressReport("Create cache"));
            //List<TemplateCacheRecord> cache = new List<TemplateCacheRecord>();

            foreach (var block in evaluationSettings.getEvaluatedBlockIterator())
            {
                block.resetTemplates();
                cache.Add(block.Name, new Dictionary <int, Core.Database.TemplateDatabase.TemplateRecord>());
                foreach (Core.Database.TemplateDatabase.TemplateRecord templateRecord in templateDatabase.getCollections().getRecords())
                {
                    cache[block.Name].Add(
                        block.pushTemplate(
                            templateRecord.PersistentTemplate.getSubtemplate(block.Name)),
                        templateRecord
                        );
                }
            }

            int total = inputDatabase.getRecords().Count() * evaluationSettings.getEvaluatedBlockIterator().Count();
            int act   = 0;

            foreach (TInputRecord r in inputDatabase.getRecords())
            {
                string message = "Records evaluation ";
                message += ".";
                onProgressChanged(new ProgressReport(message, act, total));

                //create input data
                TInputData inputData = this.evaluationSettings.getInputDataCreator().createInputData(r);

                message += ".";
                onProgressChanged(new ProgressReport(message, act, total));

                foreach (var block in evaluationSettings.getEvaluatedBlockIterator())
                {
                    act++;

                    block.setInputData(inputData);

                    foreach (KeyValuePair <int, Core.Database.TemplateDatabase.TemplateRecord> pair in cache[block.Name])
                    {
                        //compare
                        MatchingScore matchingScore = block.computeMatchingScore(pair.Key);

                        //store result
                        Result result = new Result(new Record(pair.Value), new Record(r));
                        result.setMatchingScore(block.Name, matchingScore);

                        results.addResult(result);
                    }

                    message += ".";
                    onProgressChanged(new ProgressReport(message, act, total));
                }
            }
        }