static void Main(string[] args)
        {
            try
            {
                var corConsoleDefault = Console.ForegroundColor;
                var repositorio       = new DigitaisRepositorio();
                var handler           = new IdentificarBiometriaHandler();

                var numeroTotalBiometrias = repositorio.RecuperarNumeroTotalBiometrias();
                var biometriasPorPagina   = (numeroTotalBiometrias / Environment.ProcessorCount) + 10;
                for (int pagina = 1; pagina <= Environment.ProcessorCount; pagina++)
                {
                    var biometriasRecuperadas = repositorio.RecuperarPagina(pagina, biometriasPorPagina);
                    handler.AdicionarMecanismoBuscaPara(biometriasRecuperadas);
                }

                // Captura da digital (trocar para o que vem da catraca posteriormente)
                var nitgenMainApi = new NBioAPI();

                var possoSair = false;
                while (!possoSair)
                {
                    Console.WriteLine("Informe a digital");

                    NBioAPI.Type.HFIR template;
                    var window = new NBioAPI.Type.WINDOW_OPTION();
                    nitgenMainApi.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO);
                    nitgenMainApi.Capture(out template, 0, window);
                    nitgenMainApi.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);

                    var relogio = new Stopwatch();
                    relogio.Start();
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("Identificando.....");
                    Console.ForegroundColor = corConsoleDefault;
                    var resultado = handler.IdentificarBiometria(template);
                    relogio.Stop();
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine($"Id digital encontrada {resultado} em {relogio.Elapsed.TotalSeconds} segundos");
                    Console.ForegroundColor = corConsoleDefault;

                    Console.WriteLine();

                    Console.WriteLine("\nCapturar nova digital?");
                    var tecla = Console.ReadKey();
                    if (tecla.Key == ConsoleKey.N)
                    {
                        possoSair = true;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine($"ERRO {ex.Message} - {ex.StackTrace}");
                throw;
            }
        }
Ejemplo n.º 2
0
        public int IdentificarBiometriaV2(NBioAPI.Type.HFIR template)
        {
            var relogio = new Stopwatch();

            relogio.Start();
            Console.WriteLine($"Localizado digital ...");

            var repositorio           = new DigitaisRepositorio();
            var tasks                 = new ConcurrentDictionary <Guid, Task <int> >();
            var numeroTotalBiometrias = repositorio.RecuperarNumeroTotalBiometrias();
            var biometriasPorPagina   = (numeroTotalBiometrias / Environment.ProcessorCount) + 10;

            for (int pagina = 1; pagina <= Environment.ProcessorCount; pagina++)
            {
                var biometriasRecuperadas = repositorio.RecuperarPagina(pagina, biometriasPorPagina);
                var buscaNitgen           = NitgenBiometriaTaskV2.Novo(biometriasRecuperadas);
                var task = buscaNitgen.CriarTaskParaIdentificacaoBiometrica(template, biometriasRecuperadas);
                tasks.TryAdd(buscaNitgen.Id, task);
                task.Start();
            }

            var cancelation = new CancellationTokenSource();

            Task.WaitAll(tasks.Select(t => t.Value).ToArray(), cancelation.Token);
            var resultado = tasks.FirstOrDefault(x => x.Value.Status == TaskStatus.RanToCompletion && x.Value.Result > 0);

            var biometria = resultado.Key == Guid.Empty
                ? 0
                : resultado.Value.Result;

            foreach (var item in tasks)
            {
                item.Value.Dispose();
            }

            relogio.Stop();
            Console.WriteLine($"Localizado digital em > {relogio.Elapsed.TotalSeconds} segundos");

            return(biometria);
        }