के लिए वीडियो प्रोसेसिंग लाइब्रेरी मैं एक वीडियो से फ्रेम निकालना चाहता हूं और गैबर/हफ़ इत्यादि जैसे कुछ फ़िल्टर लागू करना चाहता हूं। कौन सी जावा लाइब्रेरी सभी प्रकार के वीडियो एन्कोडिंग को संभालने के लिए सही होगी? मैं जीस्ट्रीमर, जेएमएफ, एक्सग्लगर इत्यादि देख रहा हूं लेकिन यह तय करने में असमर्थ हूं कि कौन सा सबसे अच्छा होगा। मैं फ्रेम को संपादित करने और नए फ्रेम के साथ वीडियो बनाने की भी तलाश कर रहा हूं।जावा
जावा
उत्तर
यदि आप निम्न स्तर के संचालन जैसे फ्रेम निकालने और उन्हें जोड़ना चाहते हैं, तो Xuggler सबसे अच्छा विकल्प होगा, क्योंकि एपीआई इस निम्न स्तर के आसपास तैयार हैं। यह ffmpeg पर काम करता है ताकि सभी प्रकार के वीडियो एन्कोडिंग को संभाल सकें।
किसी भी चीज़ के लिए जेएमएफ का उपयोग न करें, यह पुराना, पुराना और छोटी गाड़ी है - जीस्ट्रीमर अच्छा है, लेकिन एपीआई फ्रेम को छेड़छाड़ करने के बजाय वीडियो खेलने के लिए खुद को उधार देता है।
जेएमएफ एक अच्छा विकल्प है। लेकिन अगर आपके कोड में प्रक्रिया का समय महत्वपूर्ण है, तो Xuggler का उपयोग करना बेहतर है। जाहिर है, जेएमएफ Xuggler से अधिक सामान्य है।
Xuggler, हाँ। लेकिन अगर आप बहुत सारी छवि प्रसंस्करण पर काम करने जा रहे हैं, तो आपको OpenImaj के साथ जाना चाहिए। यह लाइब्रेरी Xuggler को इसकी निर्भरता के रूप में उपयोग करती है, लेकिन यह सब कुछ नहीं करता है। जावा में प्राप्त गति की कमी के बिना ओपनसीवी की क्षमताओं के बारे में सोचें। इसके अलावा, यह आवश्यक है कि एक मेवेन निर्भरता जोड़ रहा हो और आप जाने के लिए अच्छे हैं। कोड की मात्रा भी कम हो गई है।
नोट: मैं अभी भी लाइब्रेरी की समीक्षा कर रहा हूं और यह कैसे चल रहा है पर मेरा जवाब अपडेट रखेगा।
परिचयात्मक वीडियो: https://www.youtube.com/watch?v=TNEQ0eNqLgA
आप Marvin Framework कोशिश कर सकते हैं। यह वीडियो एन्कोडिंग और डिवाइस एक्सेस के लिए जावासीवी का उपयोग करता है, लेकिन सभी छवि प्रसंस्करण एल्गोरिदम शुद्ध जावा हैं।
वीडियो लोड करना और वास्तविक समय में फ़्रेम को संसाधित करना बहुत आसान है, जैसा कि नीचे किनारे का पता लगाने के उदाहरण में दिखाया गया है।
स्रोत कोड:
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);
}
}
धन्यवाद! मुझे लगता है कि यह तब Xuggler है। ऐसा लगता है कि जावा के लिए ओपनसीवी मैन्युअल रूप से कॉन्फ़िगर किया जा सकता है http://answers.opencv.org/question/2137/wrapping-opencv-with-desktop-java-building-for-64/ - अगर यह बेहतर होगा तो कोई विचार ? – abhishek
मेरे पास ओपनसीवी नहीं है, इसलिए वास्तव में टिप्पणी नहीं कर सकता है, लेकिन फिर भी संभवतः एक्सग्लगर की ओर झुक जाएगा क्योंकि यह एक शुद्ध जावा एपीआई है जो कार्य को आसान बनाना चाहिए। – berry120