Boa linguagem para visão computacional?


28

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


O escopo é um projeto acadêmico ;-) desculpe por não dizer isso!
Jstr

1
Trabalhei por ~ 3 anos em um grupo de visão computacional para uma inicialização de software. Usamos python + scipy / numpy para prototipar rapidamente e C ++ para código de produção. Os wrappers boost :: python para C ++ pesado ajudaram na portabilidade. BLAS e LAPACK usados ​​para material numérico pesado.
21712 wim

2
@ wim - seu comentário teria sido uma ótima resposta, com um pouco mais de detalhes sobre por que você usou essas linguagens para as diferentes fases do desenvolvimento.
Mark Booth

1
Você pode usar Matlab ou Octave para prototipagem rápida e, em seguida, converter em C ++ com a ajuda de kits de ferramentas como Armadillo (para álgebra linear) e MLPACK (para aprendizado de máquina e reconhecimento de padrões). O tatu usa BLAS e LAPACK internamente (o mesmo que Matlab). Você também pode misturar o código Matlab / Octave com o código C ++ através da interface mex do Armadillo.
Mtall

Respostas:


35

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.


4
Além disso, o Matlab é muito forte em documentação, diferentemente do Python.
Andrey Rubshtein 15/02/2012

1
E o C? Essa é a minha língua preferida em caso de dúvida.
Zetta Suro

10

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, ...,.


5

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.


4

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.


3

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 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.