Forum Replies Created
-
AuthorPosts
-
Que ótimo que conseguiu descobrir
Esse problema deve ocorrer porque alguns PDFs possuem conteúdos mal formatados ou usam codificação que dificulta a extração adequada do texto, resultando em palavras juntas ou sem espaçamento. Talvez quando você abriu o PDF com o Word e salvou novamente, o Word automaticamente reformatou o texto e com isso corrigiu essas inconsistências.
Para evitar isso no futuro, você pode usar ferramentas como PyPDF2 ou pdfplumber para inspecionar e corrigir problemas nos arquivos antes de carregá-los com o PyPDFLoader. Ou ainda, converter em um arquivo de texto ou outro formato legível antes de enviar o conteúdo para o RAG.
Se quiser também pode testar outros loaders de PDF que o LangChain suporta, como PyMuPDFLoader ou PDFMinerLoader. Mais informações aqui: https://python.langchain.com/docs/integrations/document_loaders/
Para lidar com PDFs com formatos inconsistentes, o uso de serviços como o Unstructured (que o LangChain também suporta) pode ser uma ótima solução para extrair textos de maneira mais robusta. Para mais informações sobre ele veja https://python.langchain.com/docs/integrations/document_loaders/unstructured_file/ – aliás também deixamos comentários sobre no final do Colab do projeto 03 (aqui)
Olá Tatiane!
Você pode usar o programa labelImg, que permite fazer as anotações de modo bastante prático. Na aula “Criação do seu dataset de imagens manualmente” tem uma explicação detalhada mostrando como pode usar.
Caso use o modelo YOLOv8 ou versão superior eu recomendo usar a plataforma roboflow, que oferece uma ferramenta gratuita para anotação e costuma ser mais prático pois gera em uma interface unificada os arquivos de anotação no formato para essa versão do YOLO – veja aqui a explicação de como usar https://roboflow.com/how-to-label/yolov8
Olá Leonardo!
Se entendi corretamente, inicialmente não estava funcionando, mas depois você executou o mesmo código com a mesma pergunta e funcionou. Isso pode estar relacionado à própria biblioteca e não a um erro na programação. Fiz algumas pesquisas e há diversos relatos da comunidade sobre inconsistências no LangChain, especialmente quando ele entra em loops infinitos, mesmo com tudo configurado corretamente.
Embora o LangChain seja excelente para lidar com várias funções de LLMs, ele apresenta algumas limitações para a implementação nativa de agentes, deixando a desejar em certos quesitos. Por isso, para tentar resolver eu recomendo antes experimentar mudar o prompt do sistema para ficar de acordo com o seu objetivo específico, dá para testar desse modo antes e ver se apresenta melhoras.
Parece que recentemente os autores da biblioteca passaram a mudar um pouco o foco, fazendo com que o melhor modo de implementar agentes no ecossistema LangChain seja através do LangGraph, que é uma extensão da biblioteca justamente voltada para a criação de agentes personalizáveis.
Para adaptar é necessário algumas modificações, esse artigo aqui explica bem e detalha exatamente essas mudanças: https://python.langchain.com/docs/how_to/migrate_agent/
Opa, parece ser algo que afeta a pré-visualização somente, mas para garantir você consegue me passar a versão do LangChain e a versão do Streamlit que tem instalado em sua máquina local? Para eu tentar reproduzir o problema daqui, já que em meus ambientes está funcionando conforme esperado
Olá Fernando,
Primeiramente, agradeço o feedback positivo! Vamos às suas dúvidas:
Em relação às respostas incorretas da IA, pela sua descrição parece que o modelo está usando somente conhecimento prévio ou não está encontrando os dados no banco vetorial corretamente. Você comentou que o texto apareceu juntas sem espaçamento, isso mostrou quando clica em cima do botão (popover) para ver a fonte? Se puder mandar um print de onde aparece, pode até ser que seja um bug do streamlit e que nessa caixinha está exibindo o texto sem os espaços ao final de cada bloco. O problema de palavras sem espaçamento poderia estar prejudicando sim a indexação e a recuperação, mas se foi utilizado exatamente o código da aula então não deveria ocorrer pois a função exata já faz esse processamento correto do texto antes de enviar à rede neural (mas só para testar, poderia usar também outro método que faz o pré-processamento do texto). Recomendo fazer novamente o envio dos documentos e testar diferentes parâmetros para o ‘k’ e ‘fetch_k’, dentro de vectorstore.as_retriever().
Quanto a melhorar o tempo de resposta inicial, você está correto. O carregamento e a indexação podem ser feitos separadamente, em um aplicativo à parte. Isso permite iniciar o chat acessando diretamente o vectorstore já pronto, reduzindo significativamente o tempo de resposta inicial. E caso o arquivo seja enviado apenas uma vez e não mude então pode salvar em disco, assim não precisa executar a indexação toda vez que inicia o app. Para mais velocidade no tempo de indexação/recuperação, sugiro dar uma olhada no Pinecone, que pode ser facilmente integrado com o LangChain, basicamente precisa apenas mudar os métodos para integração e assim pode reaproveitar todo o restante do código (veja mais).
E em relação às limitações de tamanho do arquivo, é possível sim carregar arquivos grandes porém o processamento e a indexação podem levar mais tempo e consumir mais memória, portanto precisa verificar se o hardware é adequado ou se vale mais a pena usar soluções que rodam em cloud como o Pinecone. Para PDFs extensos, como livros, recomenda-se dividi-los em chunks menores para facilitar o processamento e melhorar a recuperação de informações durante as consultas. A abordagem correta é experimentar diferentes parâmetros para o método do retriever, o que tenderá a funcionar melhor para documentos bem maiores.
-
This reply was modified 1 year, 7 months ago by
Gabriel Alves.
Olá Flávio! Excelente, obrigado pela sua contribuição
Para não se preocupar com as funções de desenho também é possível usar como alternativa a implementação via CLI, o que pode ser um pouco mais prático
Olá Gabrielli, tudo bem?
Agradecemos a sugestão! Estamos planejando um próximo curso sobre LLMs, muito provavelmente abordaremos esses temas
Ah sim entendo, ainda mais considerando que hoje existem várias tecnologias novas e muito relevantes, é complicado arrumar tempo para aprender tudo
mas faz no seu tempo, que vai dar certo =)
bons estudos!
Olá José!
Sim, seria totalmente viável utilizar o reconhecimento facial via câmera do celular como um método de marcação de ponto no seu aplicativo. Para isso bastaria integrar seu software em Delphi com uma tecnologia de reconhecimento facial – como a mostrada nesse curso de visão computacional ou no curso de Reconhecimento facial aqui da plataforma.
Para o uso dessas técnicas teria que se conectar via API já que o processamento rodaria em um servidor, portanto precisaria de conexão constante com a internet. Desse modo costuma ser melhor porque o processamento é mais pesado e não dependerá do hardware do dispositivo, mas caso seja um único celular fixo e com excelente configuração então talvez rodar tudo localmente pelo celular seja melhor (ambas as alternativas possuem suas vantagens e desvantagens, então veja qual faz mais sentido).
O reconhecimento facial pode ser realizado 100% localmente no dispositivo usando o Google ML Kit ou alguma biblioteca de Face Net em mobile por exemplo, mas como precisa se conectar ao sistema em Delphi então ainda haveria a necessidade de ser enviado a um servidor remoto, onde seu sistema de controle de ponto em Delphi pode validar o registro e associá-lo ao banco de dados.
Portanto, quanto ao reconhecimento seria possível sim e você pode integrar com alguma dessas maneiras, a parte mais trabalhosa seria desenvolver o aplicativo em si na linguagem ou framework de sua preferência, contanto que funcione em Android e iOS e tenha biblioteca para se conectar com a câmera do celular de forma eficiente.
Opa, isso! Creio que o artigo vá ajudar bastante, mas qualquer dúvida pode postar aqui no fórum!
7 de dezembro de 2024 at 22:41 in reply to: Mensurar o tamanho (largura e altura) em imagens 2D. #46818Disponha =)
6 de dezembro de 2024 at 10:40 in reply to: Mensurar o tamanho (largura e altura) em imagens 2D. #46811Olá Julio!
Para medir com precisão o tamanho de um objeto em uma imagem eu sugiro você utilizar um algoritmo específico para isso. Existem várias heurísticas hoje bem definidas feitas para chegar a esse resultado, mas talvez uma das mais confiáveis usam esse artigo como referência. Além disso, o autor também fornece já o código completo para fazer isso no próprio OpenCV.
Esse processo exige atenção para alguns detalhes, então recomendo ver com calma o artigo pois lá explica bem certo. É importante seguir as recomendações para deixar o algoritmo bem calibrado, como por exemplo ajustar bem o objeto de referência para medir do modo mais preciso possível (isso é explicado detalhadamente no artigo).
Olá José! Respondi lá no outro tópico que criou, mas já que perguntou neste tópico deixo a resposta aqui também:
Para fazer a leitura de um RG ou outro documento o segredo está em incorporar as técnicas de pré-processamento de imagem para que possa extrair o textos nas regiões específicas nesse documento, focando em antes extrair as localizações desses textos (regiões de interesse). Se desejar, pode antes fazer o teste com detectores de texto como o EAST para detectar as regiões onde os textos estão localizados, ou também testar com o EasyOCR (que já faz a detecção+reconhecimento).
Em um dos projetos do curso é mostrado como fazer o scan de documentos, o que funciona para o caso desse tipo de documento também. Como adicional, você precisa apenas incorporar outras técnicas de pré-processamento de imagem para que possa extrair o textos nas regiões específicas nesse documento.
A minha recomendação mesmo é seguir a lógica mostrada nesse artigo aqui, que explica exatamente uma maneira de como você pode criar um programa para ler melhor os campos de documentos (além disso, é disponibilizado o código fonte completo). Nesse exemplo do artigo ele usa uma CNH mas pode ser adaptado para RG pois o princípio é o mesmo, apenas alguns nomes e localizações de campos que mudam.
Olá José!
Para fazer a leitura de um RG ou outro documento o segredo está em incorporar as técnicas de pré-processamento de imagem para que possa extrair o textos nas regiões específicas nesse documento, focando em antes extrair as localizações desses textos (regiões de interesse). Se desejar, pode antes fazer o teste com detectores de texto como o EAST para detectar as regiões onde os textos estão localizados, ou também testar com o EasyOCR (que já faz a detecção+reconhecimento).
Em um dos projetos do curso é mostrado como fazer o scan de documentos, o que funciona para o caso desse tipo de documento também. Como adicional, você precisa apenas incorporar outras técnicas de pré-processamento de imagem para que possa extrair o textos nas regiões específicas nesse documento.
A minha recomendação mesmo é seguir a lógica mostrada esse artigo aqui, que explica exatamente uma maneira de como você pode criar um programa para ler melhor os campos de documentos (além disso, é disponibilizado o código fonte completo). Nesse exemplo do artigo ele usa uma CNH mas pode ser adaptado para RG pois o princípio é o mesmo, apenas alguns nomes e localizações de campos que mudam.
Olá! Caso não tenha funcionado esse comando o que eu recomendo é usar o Ollama para rodar a LLM localmente. Aliás, creio que vai ser melhor fazer desse modo mesmo que funcionasse esse comando que te passei, já que você está usando localmente eu sugiro que carregue usando o módulo do Ollama no LangChain pois ele é mais otimizado e vai te causar menos problemas mais tarde.
Para fazer isso use o método ChatOllama(), que é mostrado bem certo na aula “Execução local com Ollama” dentro da seção “LLM com LangChain”.
-
This reply was modified 1 year, 7 months ago by
-
AuthorPosts
