Un bon langage pour la vision par ordinateur?


28

J'essaie de mettre en œuvre un système de récupération d'images basé sur le contenu, mais avant de le faire, je voudrais obtenir un aperçu de certains langages de programmation adaptés à cette tâche (avoir de bonnes bibliothèques, etc.).

Est-ce que quelqu'un connaît de bonnes langues et bibliothèques pour ce genre de tâche? Et Python ou Java?

Meilleur


La portée est un projet académique ;-) désolé de ne pas l'avoir dit!
jstr

1
J'ai travaillé pendant environ 3 ans dans un groupe de vision par ordinateur pour une start-up logicielle. Nous avons utilisé python + scipy / numpy pour le prototypage rapide et C ++ pour le code de production. les wrappers boost :: python pour le C ++ lourd ont aidé au portage. BLAS et LAPACK utilisés pour les trucs numériques lourds.
wim

2
@wim - votre commentaire aurait fourni une excellente réponse, avec un peu plus de détails sur les raisons pour lesquelles vous avez utilisé ces langages pour les différentes phases de développement.
Mark Booth

1
Vous pouvez utiliser Matlab ou Octave pour le prototypage rapide, puis convertir en C ++ à l'aide de boîtes à outils telles que Armadillo (pour l'algèbre linéaire) et MLPACK (pour l'apprentissage automatique et la reconnaissance des formes). Armadillo utilise BLAS et LAPACK en interne (comme Matlab). Vous pouvez également mélanger du code Matlab / Octave avec du code C ++ via l'interface mex d'Armadillo.
mtall

Réponses:


35

Peut-être pouvez-vous être plus précis sur la portée et l'échelle de votre travail (projet académique? Produit commercial Desktop ou Mobile? Projet commercial basé sur le Web?).

Quelques recommandations et commentaires:

  • Matlab est courant dans le monde académique et très bon pour esquisser / valider des idées. Vous aurez accès à un grand corpus de code provenant d'autres chercheurs (en CV et en machine learning); le prototypage et le débogage seront très rapides et faciles, mais tout ce que vous aurez développé dans cet environnement sera difficile à mettre en production. Selon ce que fait votre code, vous pourriez avoir des problèmes de mémoire / performances (il y a des situations où vous ne pouvez pas décrire ce que vous voulez faire en termes de primitives de Matlab et devez commencer à boucler sur les pixels et Matlab étant un langage interprété n'est pas dans ce contexte). L'interaction avec les bases de données, les serveurs Web, etc. n'est pas facile, parfois impossible (vous n'obtiendrez pas un programme Matlab pour devenir un serveur Thrift appelé par un serveur Web frontal). Coûts $$$.

  • C ++ est ce qui est utilisé pour de nombreux systèmes CV de production (pensez à quelque chose à l'échelle de la recherche d'images de Google ou de Streetview, ou de nombreuses applications de robotique commerciale). Bonnes bibliothèques comme OpenCV, d'excellentes performances, faciles à mettre dans un environnement de production. Si vous avez besoin de faire du machine learning, il existe de nombreuses bibliothèques (LibSVM / SVMlight, Torch). Si vous devez recourir au code "boucle sur tous les pixels", il fonctionnera bien. Facile à utiliser pour coder les systèmes / couches de stockage nécessaires dans un système de récupération à grande échelle (par exemple: une très grande carte de hachage sur disque pour stocker une fonction de mappage d'index inversé hachée sur les images). Des choses comme Thrift / Message Pack peuvent transformer votre programme de récupération en un serveur RPC qui peut être appelé par un frontal Web. Cependant: pas très agile pour le prototypage, assez terrible pour essayer de nouvelles idées, temps de développement plus lent; et entre les mains de codeurs inexpérimentés peuvent avoir des problèmes de performances et / ou d'instabilité difficiles à suivre.

  • Python est en quelque sorte un juste milieu entre les deux. Vous pouvez l'utiliser pour le calcul numérique de style Matlab (avec numpy et scipy) + avoir des liaisons avec des bibliothèques comme OpenCV. Vous pouvez faire des trucs de systèmes / structure de données avec et obtenir des performances acceptables. Il existe un certain nombre de packages d'apprentissage automatique, mais moins que dans Matlab ou C ++. À moins que vous n'ayez à recourir au code "en boucle sur tous les pixels", vous pourrez coder à peu près tout ce que vous auriez pu faire avec C ++ avec un rapport de performance de 1: 1,5 à 1: 3 et un rapport de 2: 1 à 10: 1 de la taille du code source (discutable). Mais en fonction du succès de votre projet, il y aura un point où les performances seront un problème et lorsque la réécriture en C ++ ne sera pas une option.


4
En outre, Matlab est très solide dans la documentation, contrairement à Python.
Andrey Rubshtein

1
Et C? C'est ma langue de choix en cas de doute.
Zetta Suro

10

D'autant plus que votre projet est académique, Mathematica est un très bon système logiciel et approprié. Mathematica 8 est livré avec un ensemble complet de fonctionnalités pour le traitement d'image, l'algèbre linéaire, les chiffres, le GPU, etc. C'est aussi un système symbolique tellement de fois que je peux dériver des solutions de forme fermée pour les équations --- très pratique pour les tâches de vision par ordinateur. Mathematica peut également communiquer avec du code Python, C, C ++, Java, .NET, ....


5

S'il s'agit d'un projet académique, vous devez absolument utiliser Matlab, et plus spécifiquement la boîte à outils de traitement d'image et la boîte à outils du système de vision par ordinateur. Il vous faudra moins de temps pour prototyper et évaluer les algorithmes dans Matlab qu'en C ++.

Même avec l'interface Python, OpenCV est beaucoup plus difficile à utiliser que Matlab, et si vous en avez vraiment besoin, vous pouvez appeler du code C ou C ++ de Matlab via mex.


4

Pour un système de récupération d'images. Vous auriez du code côté client et côté serveur. Le côté serveur peut être en Python ou en C / C ++. OpenCV est votre meilleur choix ici. Il possède à la fois des interfaces python et C ++. Pour le côté client, je pense que vous feriez mieux d'utiliser java.


3

Le meilleur langage pour la vision par ordinateur est le C ++. Bien que son principal inconvénient soit qu'il soit plus difficile de réaliser ce que vous voulez. OpenCV est la meilleure bibliothèque de vision par ordinateur, mais vous pouvez faire les mêmes choses en utilisant matlab ou python.

Jetez un oeil ici .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.