2012-05-20 18 views
11

Sto lavorando a un progetto scolastico e parte di esso dovrebbe riguardare la situazione attuale delle librerie di visione artificiale per Android. Ci sono andato con grande entusiasmo perché la computer vision sembra un argomento affascinante ma ho cercato più di una settimana e non ho trovato molto. Mi piacerebbe essere in grado di fornire informazioni sulle biblioteche stesse e sul confronto tra loro.Computer Vision Android Confronto JavaCV OpenCV FastCV

Condividerò quello che ho trovato finora.

OpenCV

  • sembra come il più avanzato e il più popolare.

  • fornire il maggior numero di funzioni

  • ha avuto problemi con la compatibilità a ritroso

  • è veloce (almeno così ho sentito ma non ho nulla informazioni su di esso)

  • ha più grande quantità di libri a riguardo (almeno per la versione C++)

JavaCV

  • è wrapper per alcune altre librerie OpenCV compresi

FastCv

  • nuovo con Qualcomm dietro di esso.

Wikitude

  • questo è più per realtà aumentata ma nel suo nucleo è ancora calcolatore visione.

Come potete vedere, ho una piccola informazione su di esso e fare i miei test per ogni libreria è molto al di là delle mie attuali capacità di visione artificiale.

Cordiali saluti, Peter.

+1

Qualcun'altro ha lavorato su un progetto simile prima: http: //www.cs.brown.edu/corsi/csci1290/results/final/sbnguyen/ –

+0

@SamuelAudet dovresti metterlo come risposta ufficiale in modo da poterlo ripubblicare! :) – Peter

+0

@SamuelAudet ora guardandolo Sembra che le informazioni nel link siano obsolete. – Peter

risposta

24

Fondamentalmente ci sono due opzioni: OpenCV e FastCV

OpenCV è una libreria più maturo con molto più funzionalità rispetto FastCV. Per molte attività di visione artificiale è possibile trovare solo le funzionalità di base in FastCV, mentre è possibile avere quasi tutte le alternative più popolari disponibili in OpenCV. Controlla i rilevatori di funzioni disponibili, ad esempio. OpenCV ha Harris, SURF, SIFT, FAST, ecc. FastCV, d'altra parte, ha solo Harris e FAST. OpenCV contiene ottimizzazioni hardware per diversi HW inclusi computer desktop e dispositivi mobili. La possibilità di utilizzare OpenCV in desktop offre un'opzione di sviluppo più flessibile, poiché puoi modificare e testare il codice su un computer desktop veloce prima di iniziare a lavorare sullo sviluppo mobile. Anche OpenCV è considerato come parte di a Khronos Computer Vision Group Proposal. Quindi, se questo viene approvato, OpenCV può diventare l'API standard per la visione artificiale. Per quanto posso vedere, FastCV offre ottimizzazioni superiori per le CPU Snapdragon. Questo potrebbe giocare un ruolo importante nella decisione a breve termine, ma sono sicuro che OpenCV colmerà il gap molto velocemente, se ve ne sarà.

Se si sceglie il percorso OpenCV, esistono due percorsi secondari: OpenCV con Android NDK vs JavaCV con Android SDK. JavaCV è un wrapper di OpenCV basato su JavaCpp. JavaCV esegue principalmente wrapping dell'API C, sebbene OpenCV offra anche un'API C++ orientata agli oggetti. L'API C++ gestisce, ad esempio, il rilascio automatico della memoria non utilizzata. Tuttavia, l'API C (quindi JavaCV) richiede di gestire manualmente il rilascio di immagini non utilizzate. Inoltre, quando si affronta un problema in JavaCV, è difficile affrontare il problema, perché ci sono troppe indicazioni indirette da verificare. I problemi sono più facili da individuare quando si utilizza OpenCV direttamente. Tuttavia, nel caso di Android, la difficoltà aggiuntiva di NDK non dovrebbe essere dimenticata.

Se la funzionalità OpenCV disponibile è necessaria per l'applicazione specifica e non è necessario alcun codice di elaborazione a livello di pixel personalizzato, JavaCV è la strada da percorrere. Tuttavia, se è richiesta una notevole quantità di codice di elaborazione delle immagini personalizzato, il codice Java rallenterà e sarà comunque necessario passare a NDK. In quest'ultimo caso, OpenCV è l'alternativa da scegliere.

+0

Grazie vizir, quella era la risposta che cercavo più o meno. – Peter

+0

BTW, possiamo usare JavaCPP invece di usare direttamente NDK. –

+0

Vale la pena notare che SIFT e SURF sono entrambi brevettati e non gratuiti per uso commerciale. Non lo so, ma forse è per questo che FastCV li omette. –

5

Per un progetto basato su Android, è facile iniziare con JavaCV. Contiene quasi tutte le funzioni disponibili su OpenCV.

Ma non c'è una ricca documentazione su JavaCV, ma OpenCV ha. Quindi puoi trovare i metodi rilevanti dalla documentazione OpenCV e usarli in JavaCV (stessi nomi di metodi).

C'è un documento completo allo here. Questo è discutere su come configurare JavaCV su eclipse - ambiente Android.

+1

Grazie per la risposta, ma non stavo cercando la libreria da usare, ma il titolo sta dicendo che sto cercando un comparsion generale. – Peter

7

Vorrei utilizzare OpenCV in quanto è la migliore libreria di visione artificiale al momento. Programmerai le tue funzioni in C++ e poi compilerai l'applicazione Android usando la libreria JNI.Hai informazioni su come farlo sul official documentation.

Ho lavorato con questa configurazione e le prestazioni di OpenCV in Android sono davvero belle. Noterai dei vantaggi se crei alcune funzioni nell'aritmetica in virgola fissa. Buona fortuna

+1

Ciao @jav_Rock grazie per la tua risposta, ma, come premetto sopra, cerco davvero un serio confronto. – Peter

3

Il visir ha risposto abbastanza bene ma ho l'impressione che la sua analisi abbia un errore. Penso che non sia a conoscenza del fatto che Opencv ha una versione per Android chiamata OpenCV4Android. Si tratta di wrapper Java per la funzionalità C++, il che significa che puoi evitare di utilizzare Android NDK e programmare tutto in Java. Ciò renderebbe ridondante la libreria "non ufficiale" di JavaCV eccetto per il fatto che questo, oltre a includere opencv, include anche molte altre librerie di CV.

Edit:

Questo non cambia conclusioni visir su raccomandando OpenCV, in realtà aggiunge più punti verso la scelta di esso.

1

C'è una nuova opzione per CV su Android, Google Mobile Vision API. L'API viene esposta tramite com.google.android.gms.vision e consente di rilevare vari tipi di oggetti (volti, codici a barre e funzioni facciali) in base a una bitmap immagine arbitraria.

0

Iniziare con OpenCV e quindi eseguire il porting di funzioni importanti come tracciamento delle caratteristiche, convoluzioni, dilatazione/erosione e forse SVM. Nel caso di compilazione per Android avvolgere quelle chiamate con #ifdef __ANDROID__ quindi basta chiamare l'equivalente di FastCV. L'astrazione è tua amica.