Buona lingua per la visione artificiale?


28

Sto cercando di implementare un sistema di recupero di immagini basato sul contenuto, ma prima di farlo vorrei avere una panoramica di alcuni linguaggi di programmazione adatti a questo compito (avere buone librerie e simili).

Qualcuno conosce alcune buone lingue e librerie per quel tipo di attività? Che dire di Python o Java?

Migliore


Lo scopo è un progetto accademico ;-) scusa per non averlo detto!
jstr

1
Ho lavorato per circa 3 anni in un gruppo di computer vision per l'avvio di un software. Abbiamo usato python + scipy / numpy per prototipazione rapida di oggetti e C ++ per codice di produzione. boost :: wrapper python per C ++ pesante hanno aiutato con il porting. BLAS e LAPACK usati per oggetti numerici pesanti.
mer

2
@wim - il tuo commento avrebbe dato un'ottima risposta, con qualche dettaglio in più sul perché hai usato quei linguaggi per le diverse fasi di sviluppo.
Mark Booth,

1
È possibile utilizzare Matlab o Octave per la prototipazione rapida, quindi convertirli in C ++ con l'aiuto di toolkit come Armadillo (per l'algebra lineare) e MLPACK (per l'apprendimento automatico e il riconoscimento di schemi). Armadillo utilizza BLAS e LAPACK internamente (come Matlab). Puoi anche mixare il codice Matlab / Octave e il codice C ++ tramite l'interfaccia messicana di Armadillo.
Mt

Risposte:


35

Forse puoi essere più specifico sulla portata e le dimensioni del tuo lavoro (progetto accademico? Prodotto commerciale desktop o mobile? Progetto commerciale basato sul web?).

Alcuni consigli e commenti:

  • Matlab è comune nel mondo accademico ed è abbastanza buono per disegnare / validare idee. Avrai accesso a un ampio corpus di codice da altri ricercatori (in CV e machine learning); la prototipazione e il debug saranno molto veloci e facili, ma qualunque cosa tu abbia sviluppato in questo ambiente sarà difficile da mettere in produzione. A seconda di ciò che sta facendo il tuo codice, potresti avere problemi di memoria / prestazioni (ci sono situazioni in cui non puoi descrivere cosa vuoi fare in termini di primitive di Matlab e devi iniziare a fare un ciclo sui pixel e Matlab essendo un linguaggio interpretato non è aiutando in questo contesto). L'interazione con database, server Web ecc. Non è facile, a volte impossibile (non otterrai un programma Matlab per diventare un server Thrift chiamato da un front-end Web). Costa $.

  • Il C ++ è ciò che viene utilizzato per molti sistemi CV di livello produttivo (pensa a qualcosa di simile alla ricerca di immagini di Google o Streetview o a molte applicazioni di robotica commerciale). Buone librerie come OpenCV, prestazioni eccellenti, facili da inserire in un ambiente di produzione. Se è necessario eseguire l'apprendimento automatico, ci sono molte librerie (LibSVM / SVMlight, Torch). Se devi ricorrere al codice "loop su tutti i pixel", funzionerà bene. Facile da usare per la codifica dei sistemi / livelli di memoria necessari in un sistema di recupero su larga scala (ad esempio: una mappa hash su disco molto grande per la memorizzazione di una funzione di mappatura dell'indice invertita sugli hash delle immagini). Cose come Thrift / Message Pack possono trasformare il tuo programma di recupero in un server RPC che può essere chiamato da un front-end web. Tuttavia: non molto agile per la prototipazione, abbastanza terribile per provare nuove idee, tempo di sviluppo più lento; e mettere nelle mani di programmatori inesperti potrebbe essere difficile tenere traccia delle prestazioni e / o dei problemi di instabilità.

  • Python è in qualche modo una via di mezzo tra entrambi. Puoi usarlo per il calcolo numerico in stile Matlab (con numpy e scipy) + avere collegamenti a librerie come OpenCV. Puoi fare cose su sistemi / strutture dati con esso e ottenere prestazioni accettabili. Esistono diversi pacchetti di apprendimento automatico, anche se meno che in Matlab o C ++. A meno che non si debba ricorrere al codice "loop su tutti i pixel", si sarà in grado di programmare praticamente tutto ciò che si sarebbe potuto fare con C ++ con un rapporto di prestazioni 1: 1,5 a 1: 3 e rapporto di 2: 1 a 10: 1 delle dimensioni del codice sorgente (discutibile). Ma a seconda del successo del tuo progetto ci sarà un punto in cui le prestazioni saranno un problema e quando riscrivere in C ++ non sarà un'opzione.


4
Inoltre, Matlab è molto forte nella documentazione, a differenza di Python.
Andrey Rubshtein,

1
Che mi dici di C? Questa è la mia lingua di riferimento in caso di dubbio.
Zetta Suro,

10

Tanto più che il tuo progetto è accademico, Mathematica è un sistema software molto valido e appropriato. Mathematica 8 viene fornito con un set completo di funzionalità per l'elaborazione delle immagini, l'algebra lineare, i valori numerici, la GPU, ecc. È anche un sistema simbolico così tante volte che posso derivare soluzioni in forma chiusa per equazioni --- abbastanza utile per le attività di visione al computer. Mathematica può anche comunicare con Python, C, C ++, Java, .NET, ..., codice.


5

Se questo è un progetto accademico, allora dovresti assolutamente usare Matlab e più specificamente la Casella degli strumenti di elaborazione delle immagini e la Casella degli strumenti del sistema di Computer Vision. Ti serviranno ordini di grandezza in meno tempo per prototipare e valutare algoritmi in Matlab che in C ++.

Anche con l'interfaccia Python OpenCV è molto più difficile da usare rispetto a Matlab, e se proprio devi farlo puoi chiamare il codice C o C ++ da Matlab attraverso mex.


4

Per un sistema di recupero di immagini. Avresti codice lato client e lato server. Il lato server può essere in Python o C / C ++. OpenCV è la scelta migliore qui. Ha entrambe le interfacce Python e C ++. Per il lato client, penso che tu stia meglio usando java.


3

Il miglior linguaggio per la visione artificiale è C ++. Sebbene il suo principale svantaggio sia che è più difficile ottenere ciò che desideri. OpenCV è la migliore libreria per la visione artificiale, ma puoi fare le stesse cose usando matlab o python.

Dai un'occhiata qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.