Desidero estrarre i frame da un video e applicare alcuni filtri su di esso come gabor/hough ecc. Quale libreria Java sarebbe perfetta per gestire tutti i tipi di codifica video? Ho osservato GStreamer, JMF, Xuggler ecc. Ma non sono in grado di decidere quale sarebbe il migliore. Sto anche cercando di modificare i frame e realizzare il video con i nuovi frame.Libreria di elaborazione video per Java
risposta
Se stai cercando di eseguire operazioni di basso livello come estrarre i frame e manipolarli, Xuggler sarebbe la scelta migliore, perché le API sono orientate intorno a questo livello basso. Funziona su ffmpeg in modo da poter gestire tutti i tipi di codifiche video.
Non utilizzare JMF per nulla, è obsoleto, obsoleto e bacato.
JMF è una buona scelta. Ma se il tempo di elaborazione è importante nel tuo codice, è meglio usare Xuggler. Ovviamente, JMF è più generale di Xuggler.
Xuggler, sì. Ma se hai intenzione di lavorare su un sacco di elaborazione delle immagini, dovresti andare con OpenImaj. Questa libreria usa Xuggler come dipendenza, ma non è tutto quello che fa. Pensa di avere funzionalità di Opencv senza la mancanza di velocità che ottieni in Java. Inoltre, tutto ciò che serve è aggiungere una dipendenza di esperti e sei a posto. Anche la quantità di codice è ridotta.
Nota: Sto ancora esaminando la libreria e continuerò ad aggiornare la mia risposta su come va.
video introduttivo: https://www.youtube.com/watch?v=TNEQ0eNqLgA
si può provare Marvin Framework. Utilizza JavaCV per codifiche video e accesso ai dispositivi, ma tutti gli algoritmi di elaborazione delle immagini sono puramente Java.
È molto facile caricare un video ed elaborare i frame in tempo reale, come mostrato nell'esempio di rilevamento dei bordi di seguito. Codice
Fonte:
import static marvin.MarvinPluginCollection.*;
public class SimpleVideoProcessing extends JFrame implements Runnable{
private MarvinVideoInterface videoAdapter = new MarvinJavaCVAdapter();
private MarvinImagePanel videoPanel = new MarvinImagePanel();
private MarvinImage videoFrame, videoOut = new MarvinImage(640,480);
public SimpleVideoProcessing() throws MarvinVideoInterfaceException{
super("Simple Video Processing using Marvin");
add(videoPanel);
// Load video file and start the processing thread
videoAdapter.loadResource("./res/snooker.wmv");
new Thread(this).start();
setSize(640,500);
setVisible(true);
}
public void run() {
try {
while(true){
// Request, process and show the video frame.
videoOut.clear();
videoFrame = videoAdapter.getFrame();
prewitt(videoFrame.clone(), videoOut);
videoPanel.setImage(videoOut);
}
} catch (MarvinVideoInterfaceException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws MarvinVideoInterfaceException {
new SimpleVideoProcessing().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Grazie! Immagino che sia Xuggler allora. Sembra anche che OpenCV per Java possa essere configurato manualmente http://answers.opencv.org/question/2137/wrapping-opencv-with-desktop-java-building-for-64/ - qualche idea su se sarebbe meglio ? – abhishek
Non ho mai visto OpenCV, quindi non posso davvero commentare, ma probabilmente mi rivolgo a Xuggler dato che si tratta di una pura API Java che dovrebbe semplificare il compito. – berry120