Respostas no Fórum

Visualizando 15 posts - 346 até 360 (de 402 do total)
  • Autor
    Posts
  • em resposta a: Junção entre função e darknet/prompt #30761
    Gabriel Alves
    Moderador

      Olá Daniel!

      Qual erro exatamente aparece para você (relacionado ao darknet.dll)? Ah e você está tentando no windows mesmo ou seria outro sistema operacional?

      O Darknet deveria aceitar os comandos via linha de comandos normalmente (documentação), mas caso você esteja tendo muitas dificuldades de implementar dessa forma eu sugiro como possível solução ao seu problema você usar a implementação com o módulo DNN do OpenCV, que mostramos no curso. Seria viável para você? Pois assim você não precisa usar diretamente o darknet, você pode fazer a inferência carregando o modelo e passando para a função do módulo DNN.

      em resposta a: Reconhecedores Eigenfaces e fisherfaces #30752
      Gabriel Alves
      Moderador

        Olá Diogenes!

        Desculpe a demora na resposta, mas precisaria que você me informasse qual erro está aparecendo para você, assim podemos te ajudar melhor pois podem ocorrer inúmeros tipos de erros durante a execução. Preciso que me passe a mensagem de erro caso tenha e a descrição do problema (se por exemplo é a imagem da webcam que não aparece, se ele dá erro na hora de reconhecer a face, se ele não reconhece nenhum rosto cadastrado, etc.)

        Também sugiro comparar com o código da aula. Se achar melhor, pode baixar o código fonte completo na aula “Recursos” ou visualizar o código por aqui (pro caso do Eigenfaces e fisherfaces são os arquivos reconhecedor-eigenfaces.py e reconhecedor-fisherfaces.py, respectivamente).

        Notei que no seu código está com algumas coisas um poucos diferentes, no caso o cv2.VideoCapture em seu código não tem o 0, está apenas cv2.VideoCapture(). Primeiramente faça esse ajuste e deixe cv2.VideoCapture(0) pois as vezes você pode estar com problema para capturar as imagens da sua webcam por esse motivo, já que dependendo da versão o OpenCV exige que você passe esse parâmetro (isso caso o seu problema realmente seja na aquisição das imagens, por isso é importante descrever qual tipo de problema exatamente você está tendo).

        No caso de outros alunos que tiveram problemas para executar esses algoritmos 99% das vezes é relacionado à instalação OpenCV (quando não é um erro de digitação no código, o que é mais comum). Mas se você conseguiu executar sem erros o código de treinamento e gerou os arquivos .yml sem problemas então sua instalação deve estar Ok, caso contrário você teria algum erro ali na hora de usar as funções relacionadas ao reconhecimento facial (com eigen, fisher ou LBPH no nome) e não poderia gerar o arquivo .yml.

        Outra coisa importante: verifique se a indentação do seu código está toda correta, conforme mostrado em aula.

        Fazendo essas verificações provavelmente você conseguirá executar, mas caso não consiga peço por favor que me avise e me informe com detalhes qual mensagem de erro você está tendo e se possível a descrição do problema (Caso necessário, ou se não tiver alguma mensagem de erro).

        • Esta resposta foi modificada 3 anos, 10 meses atrás por Gabriel Alves.
        em resposta a: Arquivo Yalefaces.zip do curso “Reconhecimento facial #30684
        Gabriel Alves
        Moderador

          Disponha! =)

          em resposta a: Duvida no corte da regiao #30671
          Gabriel Alves
          Moderador

            Olá Eduardo!

            Na verdade não tem um motivo exato, quem desenvolveu poderia ter feito para considerar o eixo X antes do Y nesse caso, assim como em outras ocasiões você deve observar que precisa informar o parâmetro do eixo X antes. Isso é uma característica da biblioteca ou linguagem (e até mesmo pode variar de alguma função para outra dentro da mesma biblioteca), em alguns você pode ver que o X se considera por primeiro e outros o Y.

            Embora não exista uma regra que defina que o X deva sempre ser antes nesse caso, por convenção esperamos que seja assim já que isso pode ser definido por muitos como um padrão. No próprio OpenCV por exemplo tem mais alguns detalhes que fazem ele ser um pouco diferente (ou “ao contrário”) de coisas que poderiam ser consideradas padrão também, como por exemplo o fato de carregar as imagens no canal de cor BGR e não RGB, invertendo assim o canal B (azul) e R (vermelho). Digamos que é assim pois quem desenvolveu escolheu que fosse assim, geralmente tem um motivo por trás (pode ser que acharam que fosse mais conveniente ser dessa forma) mas na verdade isso é um mero detalhe e nada impede que fosse de outro jeito também.

            em resposta a: Arquivo Yalefaces.zip do curso “Reconhecimento facial #30670
            Gabriel Alves
            Moderador

              Olá! Tudo bem?

              Tente baixar novamente agora, pois eu fiz um teste de download aqui mas no meu ele baixou e descompactou todos os arquivos corretamente. Não sei qual erro apareceu para você, mas já que por aqui baixou normal então deve ter sido um problema local que ocorreu aí na hora do download mesmo.

              Portanto peço que tente baixar novamente, mas caso não consiga resolver pode baixar nesse link aqui também (testado e funcionando).

              em resposta a: Artigo Original de Viola-Jones. #30215
              Gabriel Alves
              Moderador

                Olá, tudo bem?

                Sim, claro! O artigo original se encontra aqui: https://www.cs.cmu.edu/~efros/courses/LBMV07/Papers/viola-cvpr-01.pdf

                em resposta a: Material do curso #30155
                Gabriel Alves
                Moderador

                  Olá Elias!

                  Verifique na seção de introdução em Recursos para Download (acesse aqui), lá tem o link onde você pode fazer o download dos arquivos.

                   

                  em resposta a: Could not initialize tesseract. #30153
                  Gabriel Alves
                  Moderador

                    Olá, esse “–tessdata-dir tessdata“ é para indicar ao Tesseract que queremos usar os pacotes de linguagem que estão localizados na pasta “tessdata”. Durante o curso usamos esse método pois achamos melhor gerenciar os arquivos através desse diretório, pois além de funcionar melhor oferece mais controle. Mas na verdade é opcional, se você já fez a instalação do Tesseract pelo método tradicional então não é necessário indicar esse parâmetro, ao invés disso você pode instalar os pacotes das linguagens para OCR usando o comando !apt-get install tesseract-ocr-[codigo da linguagem]

                    no caso para instalar o pacote para português ficaria !apt-get install tesseract-ocr-por

                    (e pode usar !tesseract –list-langs para listar todos os pacotes instalados)

                     

                    em resposta a: Utilização do ‘Yolo’ #30151
                    Gabriel Alves
                    Moderador

                      Olá Daniel!

                      Para fins didáticos, no projeto 3 é utilizado uma abordagem que não faz o uso de machine learning, é usado um conjunto de técnicas de processamento de imagem para detectar a região do retângulo na placa. Se sua intenção é reconhecer a escrita em placas eu recomendo mesmo usar o YOLO para a detecção.

                      Sobre usar o EAST para a detecção dos textos na imagem, é possível sim e inclusive é abordado no curso, explicamos bem certinho lá como usar. Só não entendi muito bem o que você disse sobre “usar a base de dados do YOLO”, acredito que se refira a usar a técnica YOLO para detecção (no exemplo desse projeto, detecção de placas). O uso do YOLO para detecção é extremamente recomendável quando você sabe em que tipo de objeto o texto que você quer detectar vai estar. Nesse caso como vai estar dentro de placas podemos usar o YOLO (que é excelente para detecção) para detectar o objeto e assim extrair apenas região de interesse (dentro da caixa delimitadora do objeto detectado), desse modo podemos executar o OCR apenas nessa área onde o objeto se encontra na imagem e assim evitar outros elementos que vão atrapalhar o reconhecimento.

                      A respeito da performance, se tal abordagem é apropriada ou não vai depender do tipo de sua aplicação. Por exemplo, se ela precisa funcionar em tempo real ou não. Para tempo real você vai ter uma opção menor de técnicas caso tenha um hardware muito limitado, mas ainda assim a maioria delas da para usar. Além disso, outro detalhe fundamental é o hardware que você possui disponível, por exemplo se possui GPU ou não (se possuir, melhor ainda, da para processar essas técnicas mais modernas em tempo real a uma boa taxa de FPS). Por isso o que recomendo é testar essas técnicas e verificar o tempo de inferência (tempo que demora para fazer a detecção), assim você decide qual fica melhor para a sua situação.

                      em resposta a: Could not initialize tesseract. #30074
                      Gabriel Alves
                      Moderador

                        Olá Daniel!

                        O arquivo “por.traineddata” (e outros, caso esteja usando também outros idiomas) se encontram dentro desse diretório “tessdata“?

                        Aliás, você mencionou que isso ocorre quando usa a função image_to_string, se usar a image_to_data funciona normal sem erros?

                        Verifique também, se ao remover o “–tessdata-dir tessdata” do “config_tesseract” roda sem erros.

                        em resposta a: Cade o codigo #30053
                        Gabriel Alves
                        Moderador

                          Olá Breno! O código dessa aula está no Colab dessa seção, clique aqui para acessar. Lembrando na primeira aula de cada seção tem o link pro Colab, dentro da aba “Materiais”.

                          Para facilitar, basta você clicar aqui que vai abrir o Colab na parte exata do código que você precisa.

                          em resposta a: Matrix Confusion YOLO #29906
                          Gabriel Alves
                          Moderador

                            Olá Rafael! Primeiramente, ficamos felizes que esteja gostando do curso =)

                            Sobre sua dúvida, há como sim, embora não seja tão usado no caso do YOLO. Esse artigo explica porque é menos intuitivo.

                            Há inclusive um repositório para facilitar a implementação com o YOLO, dê uma olhada aqui, creio que vai te auxiliar bastante no processo.

                            em resposta a: Existe algum dataset/modelo treinado só de animais (zoologico) #29865
                            Gabriel Alves
                            Moderador

                              Olá Antonio!

                              Recomendo muito dar uma olhada no Open Images Dataset (OID), ele é comentado mais pra frente no curso, na parte onde é abordado como treinar seu próprio modelo. No OID eu sei que tem todos esses animais que você citou de exemplo e muitos outros, talvez já tenha todos os que você precise.  Então você pode fazer o download dessas classes (no caso, os animais) específicos usando aquela ferramenta que mostramos em aula, basta especificar o nome das classes e será feito apenas o download das imagens delas e depois fazer o treinamento. Já que você comentou que queria um modelo pronto (talvez por não poder treinar) sugiro dar uma olhada no modelo pra YOLOv3 que foi treinado em cima desse dataset (então vai conter essas classes que você precisa), basta baixar aqui (para mais informações veja o README do darknet). Se ao testar você notar que está faltando algum animal ou se não tiver a precisão necessária então recomendo treinar um novo modelo para o v4 do YOLO, basta fazer o download das imagens conforme explicado e seguir para as etapas de treinamento.

                              Caso não tenha algum animal importante nesse dataset eu recomendo procurar por outros datasets específicos para animais de zoológico no Kaggle, como por exemplo esse.

                              em resposta a: Reconhecimento de texto em várias linhas #29663
                              Gabriel Alves
                              Moderador

                                Olá Guilherme! Primeiramente, ficamos felizes que esteja gostando do curso!

                                Sobre sua dúvida, você poderia usar uma função do Python para substituir por espaço (” “) os caracteres que determinam uma nova linha em sua string. Talvez o modo mais simples seria usando a função replace(), cujo primeiro parâmetro é o “alvo” que você quer substituir e o segundo parâmetro é o que você quer que fique no lugar.

                                Por exemplo, vamos assumir que seu texto esteja em uma variável chamada “texto” (que é populada com o retorno da função que fez o OCR). Caso você tenha usado a função image_to_string() do Pytesseract o texto vem com a formatação que ele identificou na imagem, ou seja, incluindo as quebras de linha. Então para colocar espaço no lugar das quebras de linha basta fazer assim:

                                texto = texto.replace("\n", " ")

                                como resultado você terá

                                '515 097'

                                Caso use a função image_to_data() para fazer o OCR será fácil também, você pode primeiro inicializar uma nova variável com uma string vazia

                                texto_completo = “”

                                obs: você coloca isso antes do for que percorrerá cada resultado retornado pela função de OCR.

                                E dentro do for, pra cada iteração, você vai deixar assim

                                for i in range(0, len(resultado["text"])):
                                
                                    ....
                                
                                    texto = resultado["text"][i]
                                
                                    texto_completo = texto_completo + texto + " "

                                ao final, a variável texto_completo conterá esse resultado “515 097”

                                Se você está utilizando uma abordagem que detecta antes o texto na imagem então para fazer isso que você quer vai ser um pouco mais complexo e exige uma codificação mais específica. Caso esteja usando um detector específico para textos (como o EAST por exemplo) provavelmente será um pouco mais fácil, já que ele deve agrupar os caracteres que estejam lado a lado (igual ao image_to_data), assim:

                                “515”  “097”

                                ou seja, são duas detecções separadas na imagem. Basta fazer um for para percorrer os resultados e concatenar cada bloco de texto, conforme nesse ultimo código que te passei acima (e também, antes de fazer o for, de preferência agrupe pela coordenada x e y onde a bounding box inicia, para evitar que o texto final fique na ordem errada).

                                E caso esteja utilizando a técnica para detectar cada caractere individualmente será um pouquinho ainda mais trabalhoso e chato, mas o conceito é igual. Você terá que agrupar cada caractere próximo a partir da coordenada x (onde inicia a bounding box do caractere) e então programar um modo de separar os caracteres cuja coordenada y (do inicio da bounding box) esteja muito acima ou muito abaixo, o que configura como uma nova linha (já que se estivesse em uma nova linha teria a coordenada y bem próxima, lembrando que o y corresponde à “altura” do ponto de início dentro da imagem).

                                Obs: pelo que vejo você deseja fazer a detecção de texto em cenários naturais, buscando texto em lugares que são “comuns” e esperados (no caso, postes). Sugiro considerar a possibilidade de criar um detector de objetos (com a técnica YOLO por exemplo) para que antes de realizar o OCR seja detectada a região de interesse do objeto na imagem que você quer realizar o reconhecimento de texto, e assim, após detectada a região é possível realizar o OCR apenas dentro da área da caixa delimitadora. Ou, se não for usar um detector, utilize técnicas de processamento para considerar apenas a área que você deseja realizar o OCR (igual no exemplo do projeto para deteçcão de placas de carros), pois caso contrário o Tesseract vai ter muita dificuldade de reconhecer  (já com o EasyOCR vai ser um pouco mais fácil). Isso é interessante para descartar tudo o que estiver fora da região de interesse na imagem – o que no seu exemplo seria o próprio poste – pois talvez em algumas das fotos tiradas haja a presença de texto em outros lugares, que não seja dentro do poste (por exemplo, a foto tirada pode conter ao fundo o número da casa ou outro número que não é de seu interesse detectar) e isso vai atrapalhar mais ainda seus resultados.

                                • Esta resposta foi modificada 3 anos, 12 meses atrás por Gabriel Alves.
                                Gabriel Alves
                                Moderador

                                  Olá Kezia!

                                  De cara eu recomendaria pelo menos 1500 imagens para cada classe se você deseja obter uma precisão boa, mas no geral vai depender muito das próprias características do objeto, da complexidade de sua forma. Além disso, depende um pouco da qualidade das imagens de treinamento. Em todo o caso, o autor do repositório darknet recomenda 2000 para cada classe.

                                  Essa quantidade para cada classe também pode depender do seu cenário, por exemplo, pode ser que algumas classes para o seu caso sejam muito mais importante de detectar do que outras, se for esse o caso então não precisa necessariamente igualar a quantidade de imagens para essas que não são tão fundamentais detectar (mas se possível deixe a quantidade igual pois é o recomendado).

                                Visualizando 15 posts - 346 até 360 (de 402 do total)