2014-06-11 18 views
23

Quali sono le principali differenze tra i framework Core Image e GPUImage (oltre a GPUImage come open source)? A prima vista le loro interfacce sembrano molto simili ... Applicando una serie di filtri a un input per creare un output. Vedo alcune piccole differenze, come ad esempio il LookupFilter facile da usare che ha GPUImage. Sto cercando di capire perché qualcuno potrebbe scegliere uno per l'applicazione di filtro fotografico.Differenze principali tra Core Image e GPUImmagine

+2

Hai letto qualche informazione sul file readme di GPUImage? Questo è tutto delineato lì. –

+0

Grazie ... È sicuro che esportare video filtrati sia più veloce di Core Image? –

+0

GPU L'immagine non è necessariamente più veloce di Core Image e viceversa. A volte lo è, a volte non lo è. Dovresti vedere quale struttura si adatta meglio alle tue esigenze. – lxt

risposta

75

Come autore di GPUImage, puoi prendere quello che dico con un pizzico di sale. Devo innanzitutto dire che ho un enorme rispetto per il team di Core Image e come continuano ad aggiornare il framework. Ero un utente di Core Image pesante prima di scrivere GPUImage, e ho modellato molti dei suoi elementi di design basati su come Core Image funzionava su Mac.

Entrambe le strutture sono in continua evoluzione, quindi un confronto effettuato oggi potrebbe non essere vero in pochi mesi. Posso puntare alle funzionalità e ai benchmark attuali, ma non c'è garanzia che non si invertiranno quando qualcuno di noi aggiorna le cose.

La mia filosofia con GPUImage era di creare un involucro leggero attorno ai quad OpenGL (ES) renderizzati con shader, e di farlo con un'interfaccia più semplice possibile. Come ho detto prima, ho inserito aspetti di Core Image che mi sono piaciuti molto, ma ho anche cambiato parti della loro interfaccia che mi avevano fatto inciampare in passato. Ho anche esteso un po 'le cose, in quanto Core Image si occupa solo dell'elaborazione delle immagini, mentre collego la riproduzione di film, l'input della videocamera, la registrazione video e l'acquisizione di immagini.

Quando inizialmente mi sono buttato all'aria per questa idea, Core Image non era ancora arrivata su iOS. Quando l'ho rilasciato, Core Image era appena stato aggiunto a iOS. Tuttavia, il numero di filtri supportati su iOS in quell'istante was fairly limited (senza sfocature, ad esempio) e Core Image su iOS non ti permetteva di creare kernel personalizzati come faceva sul Mac.

GPU L'immagine ha fornito i mezzi per eseguire operazioni personalizzate con accelerazione GPU su immagini e video su iOS, dove Core Image non ha funzionato. La maggior parte delle persone che hanno iniziato a utilizzarlo lo ha fatto per questo motivo, perché hanno avuto un effetto che non potevano fare con i filtri stock Image di base.

Inizialmente, GPUImage anche had significant performance advantages for many common operations. Tuttavia, il team di Core Image ha apportato miglioramenti significativi nella velocità di elaborazione con ciascuna versione di iOS e le cose sono molto vicine in questo momento. Per alcune operazioni, GPUImage è più veloce e per altri Core Image è più veloce. Cercano di utilizzare alcuni pretty clever optimizations for things like blurs, che ho iniziato a replicare in cose come il mio GPUImageiOSBlurFilter. Combinano anche operazioni multi-stage in modo intelligente, in cui tratto i passaggi del filtro come elementi separati e separati. In alcuni casi su iOS, questo mi dà un vantaggio, e ho cercato di ridurre le conseguenze della memoria di recente, ma gestiscono molti tipi di catene di filtri meglio di me.

iOS 8 introduce il supporto del kernel personalizzato in Core Image su iOS che ha sempre avuto sul Mac. Ciò rende possibile scrivere i propri filtri personalizzati e altre operazioni in Core Image su iOS, in modo tale da non rappresentare più un vantaggio per GPUImage. Ovviamente, chiunque desideri scegliere come target una versione iOS precedente sarà ancora limitato da ciò che Core Image può fare lì, dove GPUImage può tornare a iOS 4.0.

L'immagine di base ha anche alcune ottime funzionalità in termini di possibilità di filtraggio mentre un'applicazione iOS è in background (basata sulla CPU, ma iOS 8 aggiunge il supporto per GPU per questo ora), dove GPUImage fa affidamento su OpenGL ES impedisce l'esecuzione quando un'applicazione è in background. Ci potrebbero essere dei modi per aggirare questa limitazione in iOS 8, ma non ho ancora elaborato tutta la documentazione.

I miei interessi con GPUImage sono nel campo della visione artificiale.I filtri di immagine sono una distrazione divertente, ma voglio usare questo framework per esplorare ciò che è possibile con l'analisi delle immagini accelerata dalla GPU. Sto lavorando su operazioni arbitrarie di riconoscimento e tracciamento degli oggetti, e questa è la direzione verso cui evolverò continuamente la struttura. Tuttavia, hai il the code per il framework, quindi non devi fare affidamento su di me.

2

Questo è un thread vecchio, ma penso che valga la pena notare che GPUImage ha anche alcune funzionalità che non sono presenti in Core Image: in particolare la trasformazione di Hough e diversi filtri di rilevamento dei bordi.

L'immagine core sembra applicare filtri ed effetti ed è bello vedere GPUImage che esplora maggiormente l'analisi di immagini/video, diventando più simile a openCV, ma in un modo più efficiente.