Respostas no Fórum

Visualizando 15 posts - 256 até 270 (de 402 do total)
  • Autor
    Posts
  • em resposta a: Extrair textos de partes/posições definidas do documento #37980
    Gabriel Alves
    Moderador

      Opa, para esse caso se há muitas possibilidades de layout diferentes eu acho que vai ser mais difícil encontrar alguma solução “pré-pronta” que abranja todas essas variações, mas se tiver sorte talvez encontre algo procurando em repositórios abertos como no github. O jeito seria construir o seu script próprio, preparado para extrair as informações dos documentos com layouts da forma que você precisa.

      Encontrei essa abordagem também, talvez possa ser útil.

      Uma alternativa à utilização de técnicas de pré-processamento seria usar algum detector de objetos (como o YOLO). Se treinar bem você consegue obter muita precisão, porém se o layout onde se encontra essa informação varia muito então recomendo tentar uma sugestão que deixo abaixo.

      (aqui há um outro exemplo de como poderia treinar um modelo em deep learning para localizar/classificar partes de um documento.)

      Ainda sobre o uso de técnicas de processamento, ao final da seção “Projeto 1” pode te dar uma intuição maior. Pegue por exemplo aquela imagem que usamos do rótulo com informações nutricionais do produto. Ali foi feita a busca a partir de um termo, onde retornou a posição dele na imagem. Digamos que você não sabe qual será o texto, nesse caso, você precisa saber qual é o padrão de onde ele vai aparecer, ou até mesmo a localização exata dele com base nos outros elementos da imagem. Para isso você pode utilizar as técnicas de processamento de imagem que mostramos nos 3 projetos finais. Por exemplo, se você sabe que a marca sempre aparece na primeira linha da tabela então primeiro você detecta os contornos na imagem (ou melhor, os retângulos) e extrai a área apenas daquele que se encontra mais ao topo (o que significa que constitui a primeira linha da tabela).

      Caso a posição realmente não seja tão óbvia você pode treinar um detector de objetos próprio para detectar a região onde se encontra essas informações (caso não consiga bons resultados com as técnicas de pré-processamento), conforme comentei mais acima.

      Ou seja, se você sabe exatamente qual texto está presente neste documento e você deseja saber se ele está ali (ou se tem alguma palavra que sempre acompanha essa informação marca, por exemplo, “Marca:” [x]) então poderia usar como base a técnica do Projeto 1, pois você consegue localizar a partir do filtro.

      Mas se esse local puder variar muito ao longo do documento (porém mantém uma mesma estrutura visual, ou muito parecida) então talvez o melhor seja treinar um detector de objetos próprio (como o YOLO por exemplo) para localizar essas regiões.

      em resposta a: Extrair textos de partes/posições definidas do documento #37916
      Gabriel Alves
      Moderador

        Olá!

        Caso queira fazer a leitura de CNH ou RG, o curso dará uma boa intuição inicial para isso. Em um dos projetos é mostrado como fazer o scan de documentos, o que funciona para o caso desse tipo de documento também. Como adicional, você precisará incorporar outras técnicas de pré-processamento de imagem para que possa extrair o textos nas regiões específicas nesse documento. Dê uma olhada nesse artigo que mostra exatamente como você poderia fazer isso (e tem o código inclusive) -> https://medium.com/stackchain/drivers-license-ocr-cnh-with-python-opencv-and-tesseract-21b0388ae101

        em resposta a: Yolo e Darknet no Windows #37823
        Gabriel Alves
        Moderador

          Olá Filipe,

          Para instalar e compilar no Windows você precisa usar o CMake, conforme é explicado aqui (ou também pode usar esse método). Se ocorrer algum problema nos avise e passe a mensagem de erro que aparecer para você.

          em resposta a: Erro na construção do gerador #37822
          Gabriel Alves
          Moderador

            Olá Soni,

            Verifique se na primeira linha do network.add() está assim:

            network.add(layers.Dense(units = 7*7*256, use_bias = False, input_shape=(100,)))

            pela mensagem de erro, provavelmente há um erro de digitação.

            E se puder confira se o restante está exatamente igual ao código completo da função (clique aqui).

            em resposta a: Leitura de Veículos #37741
            Gabriel Alves
            Moderador

              Olá Haviner,

              Nesse caso, primeiramente sugiro testar com outros parâmetros (por exemplo ali na função do Canny Edge, você pode mexer nos parâmetros para que retorne menos linhas no geral para a imagem, assim as linhas se concentram mais ao redor da placa apenas e evita identificar outras partes que contenham 4 cantos).

              Se permanecer o problema, sugiro testar essa outra heurística aqui, pois pela imagem que você indicou parece que essa pode oferecer melhores resultados.

              Mas conforme comentado no curso, o uso dessa abordagem que consiste apenas no uso de técnica de pré-processamento não vai garantir que seja sempre detectada a placa, pois apesar de funcionar bem para cenários mais “controlados” pode não detectar em imagens em situações mais “reais”, já que são muito menos precisas comparadas à abordagens baseadas em redes neurais por exemplo. Como o curso foca em OCR foi escolhido essa abordagem, mas se deseja criar um programa real então sugiro implementar um detector de objetos baseado em alguma técnica de deep learning, pois irá garantir detecções muito mais precisas nessas situações mais reais. Uma recomendação é usar o YOLO, que é uma das técnicas de detecção mais precisas hoje, você pode fazer assim ou, para facilitar sua implementação, usar esse repositório.

              em resposta a: Construção do gerador #37739
              Gabriel Alves
              Moderador

                Olá Soni,

                Qual erro que aparece para você? Se puder passar a mensagem de erro, para podermos auxiliar melhor.

                Confira se foram realizados todos os imports necessários e se o código da função está o mesmo conforme mostrado aqui.

                • Esta resposta foi modificada 2 anos, 8 meses atrás por Gabriel Alves.
                em resposta a: Emissão do Certificado #37557
                Gabriel Alves
                Moderador

                  Olá Gustavo!

                  Nós fizemos uma análise geral no sistema e não conseguimos localizar nenhum problema que pudesse estar causando esse comportamento para você, e ainda mais por ser um comportamento que somente ocorre nessas aulas em específico (que não tem nada diferente nas configurações).

                  Mas eu acho que sei o que pode estar confundindo, pois na hora que fomos nos certificar que estava tudo ok eu pensei nisso também. O botão “Marcar como concluído” fica desabilitado até o momento que você chega ao final da aula, e assim que você chega ao final ele é instantaneamente habilitado. Então, você precisa chegar até o final dela para poder marcar a aula como concluída. Se você por um acaso chegou ao final dela porém saiu da página (ou fechou o navegador por exemplo) e não clicou no botão então quando voltar àquela aula pode ser que precise chegar ao final do vídeo novamente, pois pode ser que o navegador não tenha salvo que você chegou ao final do vídeo logo antes de você fechar a página e portanto o sistema ainda identifica como se faltasse você completar a aula. E se você já assistiu toda a aula e não assistirá novamente basta clicar na barrinha de progresso do vídeo para que pule até o ultimo segundo.

                  Resumindo: basta chegar até o final da aula e (nessa mesma sessão em que a página estiver aberta) clicar no botão, que ficará habilitado (verde) assim que chegar ao final da aula.

                  Para te facilitar nós já marcamos aqui para você essas aulas como visto, já que você comenta que passou por elas então podemos deixá-las como concluídas.

                  Portanto, quando quiser já pode lá baixar seu certiticado 😉

                  em resposta a: Segmentar (Colorir) objeto da classe detectada #37262
                  Gabriel Alves
                  Moderador

                    Olá!

                    Para colorir a “área” de cada porco seria aconselhável você treinar novamente com Mask R-CNN pois ele é próprio para segmentação, e com detecção você apenas consegue as coordenadas da caixa delimitadora. Mas se você já tem o modelo treinado com YOLO então você pode tentar algumas opções.

                    A primeira alternativa seria usar um detector de contornos como o Canny Edge (mostrado no curso), e após processar a imagem fazer o preenchimento do objeto central. Tem um código aqui completo que mostra como fazer isso. Essa imagem processada pode ser usada como a máscara de uma outra imagem, que será uma imagem do tamanho da imagem original e preenchida inteiramente com a cor desejada (e aí você pode aplicar uma transparência a ela, que já é feito pelas funções nativas do repositório do mask R-CNN mas se você quiser implementar manualmente pode fazer como demonstrado aqui).

                    Observação: essa operação é feita para cada ROI (região de interesse) detectada, ou seja, para cada pedaço da imagem dentro de cada uma das caixas delimitadoras, pois todo o resto da imagem não é de interesse então pode ser ignorado.

                    Essa opção exige bastante ajustes e testes pra deixar o contorno bem perfeito, então se quiser algo mais “pronto” e genérico pode usar uma técnica para extração do objeto principal da imagem usando deep learning, como essa aqui https://towardsdatascience.com/background-removal-with-deep-learning-c4f2104b3157  (também são usadas para remoção de fundo). Novamente, deve ser aplicado a cada caixa delimitadora, e será mais custosa computacionalmente pois envolve deep learning só para essa função.

                    Gabriel Alves
                    Moderador

                      Opa!

                      Então quanto à versão, você pode usar a mesma que está sendo usado pelo Colab, conforme no código fonte aqui, que está em funcionamento (recomendo também dar uma olhada no código e comparar com o seu).

                      Segundo o comando cv2.__version__, a versão é a 4.6.0.

                       

                      Recomendo verificar mais duas coisas:

                      • Se pro tamanho do vídeo lá em cv2.VideoWriter() foi passado como parâmetro a altura e largura exatas que estão sendo salvas os frames (com o salvar_video.write()). Tem que estar o mesmo tamanho, ou ele vai dar esse problema no salvamento do vídeo e o arquivo ficará com poucos bytes de tamanho.
                      • Se mudou para .avi a extensão do arquivo salvo (saída). Se sim, me passe a mensagem que aparece (se aparecer) ou qual tamanho ficou o arquivo.

                       

                      Mas em último caso você pode desinstalar mesmo o OpenCV e instalar novamente essa versão. Pois pode ser até o caso de estar faltando alguma config necessária para os vídeos, para visualizar essas informações execute print(cv2.getBuildInformation()) e veja por exemplo se lá em “Video I/O” o “FFMPEG” está como “YES”.

                      em resposta a: Forma certa de customizar um modelo #36891
                      Gabriel Alves
                      Moderador

                        Olá!

                        Nesse caso recomenda-se fazer a anotação de todos os porcos pois o algoritmo tenta associar as regiões não marcadas como sendo o “fundo”, ou seja funciona parecido com essa ideia das imagens negativas. Portanto, o ideal é que todos os “objetos” da classe específica estejam marcados, de modo que não confunda o modelo e assim acabe gerando resultados menos confiáveis. Ou seja, é recomendado fazer a anotação de todos mesmo que dê mais trabalho, vai garantir resultados melhores, não apenas porque há mais instâncias anotadas mas também por esse outro motivo, que querendo ou não pode ter um certo impacto (mesmo que não seja tão considerável, dependendo do caso).

                        Gabriel Alves
                        Moderador

                          Opa!

                          Experimente fazer a seguinte substituição: de cv2.VideoWriter_fourcc(*’mp4v’) para cv2.VideoWriter_fourcc(‘m’, ‘p’, ‘4’, ‘v’) 

                          Faça essa mudança, tente executar e veja se dá certo (se não, me passe o erro exato que apareceu agora, caso seja diferente). Se não der tente também remover a extensão “.mp4” do nome do arquivo, que foi passado como parâmetro.

                          A propósito, no nome do arquivo você tava colocando de início para salvar em .mp4 ou .avi? Então tente salvar direto na extensão .avi mesmo, basta mudar o nome do arquivo ali na variável resultado, ficando assim: resultado = ‘../content/gesture1_novo.avi′  e mude novamente para cv2.VideoWriter_fourcc(*’XVID’)

                          Caso realmente isso não funcione também aí sugiro fazer o downgrade de sua versão do OpenCV pois pode ser até que seja algum bug recente, mas acredito que fazendo essa mudança já funcione aí em seu ambiente.

                          em resposta a: Como contar quantos objetos existem na imagem ? #36860
                          Gabriel Alves
                          Moderador

                            Olá Felipe!

                            Para imagens é mais fácil, você só precisa contar quantas detecções houveram para determinada classe. Para isso pode usar por exemplo uma condição if para conferir se a classe do objeto x na imagem corresponde à classe que deseja contar. Isso é explicado também na aula “Contagem de objetos em múltiplas imagens”, no módulo “Detecção de objetos com YOLO e OpenCV”.

                            Gabriel Alves
                            Moderador

                              Olá Gabriel!

                              Qual versão do OpenCV você está usando? Pode ser algum bug com a versão, pois aqui com o mesmo código ele roda sem esse problema.
                              Se puder conferir também se todas as variáveis anteriores estão com os valores esperados, pois as vezes tem ali algum detalhe (ex: alguma linha executada fora de ordem) que deixou com esse comportamento.

                              Mas se conferiu e está tudo certo então tenta substituir o XVID por mp4v (tem que ser minúsculo).

                              • Esta resposta foi modificada 2 anos, 9 meses atrás por Gabriel Alves.
                              em resposta a: Couldn’t open file: /data/train.txt #36798
                              Gabriel Alves
                              Moderador

                                Olá Felipe!

                                Pela mensagem de erro, o darknet não conseguiu localizar o arquivo .txt de treinamento. Verifique se o comando  (!./darknet detector …) foi executado no diretório correto, conforme mostrado em aula, ou se foi executado a partir de outro diretório. Pois nesse caso ele não vai encontrar o arquivo no caminho especificado em obj.data. Então você pode conferir se está no diretório relativo correto; ou atualizar o caminho no obj.data e colocar o caminho absoluto.

                                em resposta a: Emissão do Certificado #36797
                                Gabriel Alves
                                Moderador

                                  Olá Gustavo! Tudo bem?

                                  Para quais aulas exatamente está acontecendo isso para você? Se puder informar o nome, que iremos verificar aqui e resolver para você.

                                Visualizando 15 posts - 256 até 270 (de 402 do total)