Estou tentando implementar um sistema de recuperação de imagens com base em conteúdo, mas antes disso, gostaria de obter uma visão geral de algumas linguagens de programação adequadas para esta tarefa (com boas bibliotecas e outras).
Alguém conhece algumas boas línguas e bibliotecas para esse tipo de tarefa? E o Python ou Java?
Melhor
Respostas:
Talvez você possa ser mais específico sobre o escopo e a escala do seu trabalho (projeto acadêmico? Produto comercial para computador ou celular? Projeto comercial baseado na Web?).
Algumas recomendações e comentários:
O Matlab é comum no mundo acadêmico e muito bom para esboçar / validar idéias. Você terá acesso a um grande corpo de código de outros pesquisadores (em CV e aprendizado de máquina); a criação de protótipos e a depuração será muito rápida e fácil, mas será difícil colocar em produção o que você tiver desenvolvido nesse ambiente. Dependendo do que o seu código está fazendo, você pode ter problemas de memória / desempenho (há situações em que você não pode descrever o que deseja fazer em termos das primitivas do Matlab e precisa começar a repetir pixels e o Matlab ser uma linguagem interpretada não é ajudando neste contexto). A interação com bancos de dados, servidores da web etc. não é fácil, às vezes impossível (você não conseguirá que um programa Matlab se torne um servidor Thrift chamado por um front-end da web). Custa $$$.
C ++ é o que é usado para muitos sistemas CV de nível de produção (pense em algo na escala da pesquisa de imagens do Google, do Streetview ou de muitos aplicativos de robótica comercial). Boas bibliotecas como OpenCV, excelente desempenho, fácil de colocar em um ambiente de produção. Se você precisar fazer aprendizado de máquina, existem muitas bibliotecas por aí (LibSVM / SVMlight, Torch). Se você precisar recorrer ao código "loop em todos os pixels", ele terá um bom desempenho. Fácil de usar para codificar as camadas de sistemas / armazenamento necessárias em um sistema de recuperação em larga escala (por exemplo: um mapa de hash em disco muito grande para armazenar um recurso de mapeamento de índice invertido hashes em imagens). Coisas como Thrift / Message Pack podem transformar seu programa de recuperação em um servidor RPC, que pode ser chamado por um front-end da web. No entanto: não é muito ágil para a criação de protótipos, é terrível para experimentar novas idéias, menor tempo de desenvolvimento; e colocar nas mãos de codificadores inexperientes pode ter dificuldades em rastrear desempenhos e / ou problemas de instabilidade.
Python é de alguma forma um meio termo entre os dois. Você pode usá-lo para computação numérica no estilo Matlab (com numpy e scipy) + com ligações a bibliotecas como o OpenCV. Você pode fazer coisas de sistemas / estrutura de dados com ele e obter desempenhos aceitáveis. Existem muitos pacotes de aprendizado de máquina por aí, embora menos do que no Matlab ou C ++. A menos que você precise recorrer ao código "loop em todos os pixels", poderá codificar praticamente tudo o que poderia ter feito com C ++ com uma proporção de desempenho de 1: 1,5 a 1: 3 e proporção de 2: 1 a 10: 1 do tamanho do código-fonte (discutível). Mas, dependendo do sucesso do seu projeto, haverá um ponto em que o desempenho será um problema e a reescrita no C ++ não será uma opção.
fonte
Especialmente porque seu projeto é acadêmico, o Mathematica é um sistema de software muito bom e apropriado. O Mathematica 8 vem com um conjunto abrangente de recursos para processamento de imagem, álgebra linear, numérica, GPU, etc. É também um sistema simbólico tantas vezes que posso derivar soluções de formulários fechados para equações - bastante úteis para tarefas de visão computacional. O Mathematica também pode se comunicar com código Python, C, C ++, Java, .NET, ...,.
fonte
Se este é um projeto acadêmico, você definitivamente deve usar o Matlab e, mais especificamente, a Image Processing Toolbox e a Computer Vision System Toolbox. Você precisará de ordens de magnitude menos tempo para prototipar e avaliar algoritmos no Matlab do que no C ++.
Mesmo com a interface Python, o OpenCV é muito mais difícil de usar que o Matlab, e se você realmente precisar, pode chamar o código C ou C ++ do Matlab através do mex.
fonte
Para um sistema de recuperação de imagens. Você teria o código do lado do cliente e do servidor. O lado do servidor pode estar em Python ou C / C ++. OpenCV é sua melhor escolha aqui. Possui interfaces python e C ++. Para o lado do cliente, acho melhor usar java.
fonte
A melhor linguagem para visão computacional é C ++. Embora sua principal desvantagem seja que é mais difícil conseguir o que você deseja. O OpenCV é a melhor biblioteca de visão por computador do mercado, mas você pode fazer as mesmas coisas usando matlab ou python.
Dê uma olhada aqui .
fonte