Ejemplo n.º 1
0
 private IEnumerable <string> ObterRecortesDoReconhecimento(ResultadoReconhecimento resultadoReconhecimento)
 {
     return(resultadoReconhecimento
            .Campos
            .Keys
            .Where(x => x.Contains("recorte")));
 }
Ejemplo n.º 2
0
 public void Execute(Pagina pagina, ResultadoReconhecimento resultadoReconhecimento)
 {
     this.BuscarTarjaPorCampo(pagina, resultadoReconhecimento.Palavras, Campo.ReferenciaDeArquivoNomeTitular);
     if (this.DeveProcurarPaiOuMaeNesseTipoDocumento(pagina.Documento.TipoDocumento.Id))
     {
         this.BuscarTarjaPorCampo(pagina, resultadoReconhecimento.Palavras, Campo.ReferenciaDeArquivoNomePaiCliente);
         this.BuscarTarjaPorCampo(pagina, resultadoReconhecimento.Palavras, Campo.ReferenciaDeArquivoNomeMaeCliente);
     }
 }
Ejemplo n.º 3
0
        private bool ExisteRecorteRepetido(ResultadoReconhecimento resultadoReconhecimento, IList <Pagina> paginas, IEnumerable <string> camposRecorte)
        {
            var ordenacao = new List <int>();

            for (var i = 0; i < paginas.Count(); i++)
            {
                var informacaoPagina = resultadoReconhecimento.Campos[camposRecorte.ElementAt(i)].Texto;
                ordenacao.Add(informacaoPagina.Substring(informacaoPagina.Length - 1, 1).ToInt());
            }

            return(ordenacao.Distinct().Count() != paginas.Count());
        }
Ejemplo n.º 4
0
        public void Executar(Pagina pagina, ResultadoReconhecimento resultadoReconhecimento)
        {
            if (resultadoReconhecimento == null)
            {
                return;
            }

            var valoresReconhecidos = this.obtemValoresReconhecidosPaginaServico.Obter(
                pagina,
                resultadoReconhecimento);

            foreach (var valorReconhecido in valoresReconhecidos)
            {
                this.valorReconhecidoRepositorio.Salvar(valorReconhecido);
            }

            var tripaTexto = string.Empty;

            foreach (var palavra in resultadoReconhecimento.Palavras)
            {
                var palavraReconhecida = new PalavraReconhecida
                {
                    Texto    = palavra.Texto,
                    Altura   = palavra.Localizacao.Height,
                    Direita  = palavra.Localizacao.Right,
                    Esquerda = palavra.Localizacao.Left,
                    Largura  = palavra.Localizacao.Width,
                    Topo     = palavra.Localizacao.Top,
                    Pagina   = pagina
                };

                this.palavraRepositorio.Salvar(palavraReconhecida);
                tripaTexto += palavra.Texto + " ";
            }

            //// gravando parte das palavras reconhecidas na recvalue também, para facilitar comparações na POC.
            if (tripaTexto.Trim().Length > 2)
            {
                if (tripaTexto.Length > 200)
                {
                    tripaTexto = tripaTexto.Substring(0, 199) + "(...)";
                }

                var recValueFull = new ValorReconhecido()
                {
                    TemplateName = "fulltextbsb", CampoTemplate = "fulltextbsb", Pagina = pagina, Value = tripaTexto
                };
                this.valorReconhecidoRepositorio.Salvar(recValueFull);
            }
        }
Ejemplo n.º 5
0
        private bool ExisteRecorteNulo(ResultadoReconhecimento resultadoReconhecimento, IEnumerable <string> camposRecorte)
        {
            for (var i = 0; i < camposRecorte.Count(); i++)
            {
                var informacaoPagina = resultadoReconhecimento.Campos[camposRecorte.ElementAt(i)].Texto;

                if (string.IsNullOrEmpty(informacaoPagina))
                {
                    Log.Application.ErrorFormat("Reconhecimento trouxe informação da página nula. Recorte #{0}", camposRecorte.ElementAt(i));
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 6
0
        public List <ValorReconhecido> Obter(Pagina pagina, ResultadoReconhecimento resultadoReconhecimento)
        {
            //// TODO: fortalecer teste. está fraco
            var mapeamentos         = this.mapeamentoCampos.ObterTodosExcetoPac();
            var valoresReconhecidos = new List <ValorReconhecido>();

            foreach (var campoReconhecidoEngine in resultadoReconhecimento.Campos)
            {
                var valorReconhecido = new ValorReconhecido();

                if (campoReconhecidoEngine.Value.EhReconhecivel)
                {
                    valorReconhecido.Value = campoReconhecidoEngine.Value.Texto;
                }

                valorReconhecido.SetarCampo(mapeamentos, campoReconhecidoEngine.Value);
                valorReconhecido.SetarCampoReconhecidoDoEngine(campoReconhecidoEngine.Value);
                valorReconhecido.Pagina = pagina;

                valoresReconhecidos.Add(valorReconhecido);
            }

            return(valoresReconhecidos);
        }
Ejemplo n.º 7
0
        public void Executar(int paginaId, Imagem imagem, string imagemProcessada, ResultadoReconhecimento resultadoReconhecimento)
        {
            //// avalia o que deve ser postado, de acordo com a tag OCR_POSTAGEM_IMG (TipoPostagemOcr)
            switch (Contexto.TipoPostagemOcr)
            {
            case -1:
                //// Não deve postar nada
                return;

            case 0:
                //// TIF padrão
                break;

            case 1:
                //// JPG original + ajustes pre-processado
                imagemProcessada = this.ExecutarAjustesNaOriginal(imagem, imagemProcessada, resultadoReconhecimento);
                break;

            default:
                //// TIF padrão
                break;
            }

            var extension = Path.GetExtension(imagem.Caminho);

            if (extension == null)
            {
                return;
            }

            if (this.fileSystem.Exists(imagemProcessada) == false)
            {
                return;
            }

            var extensao = extension
                           .Replace(".", string.Empty)
                           .ToUpper();

            var extensaoNovaImagem = Path.GetExtension(imagemProcessada);

            if (extensaoNovaImagem == null)
            {
                return;
            }

            extensaoNovaImagem = extensaoNovaImagem.Replace(".", string.Empty).ToUpper();
            var novaImagem = Path.Combine(
                Path.GetDirectoryName(imagemProcessada),
                paginaId + "." + extensaoNovaImagem);

            //// so continua se nova extensão for TIF
            if (extensaoNovaImagem != "TIF" && Contexto.TipoPostagemOcr == 0)
            {
                Log.Application.DebugFormat("Imagem não será postada no FT. Extensão diferente de TIF. Arquivo: {0}", novaImagem);
                return;
            }

            try
            {
                this.fileSystem.Copy(imagemProcessada, novaImagem);
            }
            catch (Exception exception)
            {
                Log.Application.Error(exception);
                return;
            }

            var caminhoImagemOriginalNoFileTransfer = string.Format(
                @"/{0}/F/{1}.{2}",
                Files.GetEcmPath(paginaId),
                paginaId.ToString("000000000"),
                extensao).Replace("\\", "/").ToUpper();

            this.EnviarImagensParaFileTransfer(
                paginaId,
                imagem.Caminho,
                extensaoNovaImagem,
                novaImagem,
                caminhoImagemOriginalNoFileTransfer);

            this.ApagarImagensLocais(imagem.Caminho, imagemProcessada, novaImagem);

            ////try
            ////{
            ////    if (extensao.ToLower() != extensaoNovaImagem.ToLower())
            ////    {
            ////        this.paginaRepositorio.AtualizarPaginaTipoDocumento(paginaId, extensaoNovaImagem);
            ////    }
            ////}
            ////catch (Exception exception)
            ////{
            ////    Log.Application.ErrorFormat(exception, "Erro ao tentar atualizar tipoArquivo para formato {0} na pagina {1}", extensaoNovaImagem, paginaId);
            ////}
        }
Ejemplo n.º 8
0
        private string ExecutarAjustesNaOriginal(Imagem imagem, string imagemProcessada, ResultadoReconhecimento resultadoReconhecimento)
        {
            var funcoesAforge = IoC.Current.Resolve <IFuncoesAforge>();
            var novoNomeOriginalReprocessada = Path.Combine(Path.GetDirectoryName(imagemProcessada), Path.GetFileNameWithoutExtension(imagemProcessada) + "_reproc.JPG");

            var    bitmap = ImageDecoder.DecodeFromFile(imagem.Caminho);
            Bitmap bitmapGirado;

            switch (resultadoReconhecimento.OrientacaoDetecada)
            {
            case 1:
                bitmapGirado = funcoesAforge.GirarAngulo(bitmap, -90.0);
                break;

            case 2:
                bitmapGirado = funcoesAforge.GirarAngulo(bitmap, 90.0);
                break;

            case 3:
                bitmapGirado = funcoesAforge.GirarAngulo(bitmap, 180.0);
                break;

            default:
                //// faz nada (0)
                bitmapGirado = (Bitmap)bitmap.Clone();
                break;
            }

            bitmap.Dispose();
            var skew = resultadoReconhecimento.SkewDetectado;

            if (skew != 0.0)
            {
                var angulo        = Math.Atan(skew);
                var bitmapComSkew = funcoesAforge.GirarAngulo(bitmapGirado, angulo);
                bitmapGirado.Dispose();
                bitmapGirado = bitmapComSkew;
            }

            try
            {
                funcoesAforge.SalvarComo(bitmapGirado, novoNomeOriginalReprocessada, ImageFormat.Jpeg, 8);
            }
            catch (Exception exception)
            {
                Log.Application.ErrorFormat(exception, "Erro ao tentar executar ajustes na imagem {0} ", novoNomeOriginalReprocessada);
            }

            bitmapGirado.Dispose();
            return(novoNomeOriginalReprocessada);
        }