From 44b5b2b5728ae35a0ee8f4f809e828a87c83e751 Mon Sep 17 00:00:00 2001 From: Bartosz Firyn Date: Wed, 18 Jun 2014 22:35:50 +0000 Subject: [PATCH] Progress on the OpenCV capture driver implementation --- .../driver-javacv/.classpath | 53 +++++++-------- webcam-capture-drivers/driver-javacv/pom.xml | 66 +------------------ .../src/example/java/JavaCvDriverExample.java | 21 ++++++ .../sarxos/webcam/ds/javacv/JavaCvDevice.java | 66 +++++++++++++++---- .../sarxos/webcam/ds/javacv/JavaCvDriver.java | 52 +++++++++------ .../src/example/resources/logback.xml | 10 +++ 6 files changed, 145 insertions(+), 123 deletions(-) create mode 100644 webcam-capture-drivers/driver-javacv/src/example/java/JavaCvDriverExample.java create mode 100644 webcam-capture-drivers/driver-lti-civil/src/example/resources/logback.xml diff --git a/webcam-capture-drivers/driver-javacv/.classpath b/webcam-capture-drivers/driver-javacv/.classpath index c9464c0f..c2ce1e7b 100644 --- a/webcam-capture-drivers/driver-javacv/.classpath +++ b/webcam-capture-drivers/driver-javacv/.classpath @@ -1,26 +1,27 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/webcam-capture-drivers/driver-javacv/pom.xml b/webcam-capture-drivers/driver-javacv/pom.xml index 2d618dc7..0b8cb586 100644 --- a/webcam-capture-drivers/driver-javacv/pom.xml +++ b/webcam-capture-drivers/driver-javacv/pom.xml @@ -12,23 +12,8 @@ jar Webcam Capture - JavaCV Driver - Webcam Capture driver using JavaCV - Java binding for OpenCV framework + Webcam Capture driver using JavaCV binding for OpenCV - - 0.2 - - - - - javacv - http://maven2.javacv.googlecode.com/git - - - kevoree - http://maven.kevoree.org/release - - - com.github.sarxos @@ -36,51 +21,9 @@ ${project.version} - com.googlecode.javacv - javacv - ${javacv.version} - - - com.googlecode.javacv - javacv - windows-x86 - ${javacv.version} - - - com.googlecode.javacv - javacv - windows-x86_64 - ${javacv.version} - - - com.googlecode.javacv - javacv - linux-arm - ${javacv.version} - - - com.googlecode.javacv - javacv - linux-x86 - ${javacv.version} - - - com.googlecode.javacv - javacv - linux-x86_64 - ${javacv.version} - - - com.googlecode.javacv - javacv - macosx-x86_64 - ${javacv.version} - - - com.googlecode.javacv + org.bytedeco javacv - android-arm - ${javacv.version} + 0.8 @@ -93,9 +36,6 @@ org.apache.maven.plugins maven-deploy-plugin - - true - diff --git a/webcam-capture-drivers/driver-javacv/src/example/java/JavaCvDriverExample.java b/webcam-capture-drivers/driver-javacv/src/example/java/JavaCvDriverExample.java new file mode 100644 index 00000000..d73a35fb --- /dev/null +++ b/webcam-capture-drivers/driver-javacv/src/example/java/JavaCvDriverExample.java @@ -0,0 +1,21 @@ +import javax.swing.JFrame; + +import com.github.sarxos.webcam.Webcam; +import com.github.sarxos.webcam.WebcamPanel; +import com.github.sarxos.webcam.ds.javacv.JavaCvDriver; + + +public class JavaCvDriverExample { + + static { + Webcam.setDriver(new JavaCvDriver()); + } + + public static void main(String[] args) { + JFrame frame = new JFrame("LTI-CIVIL Webcam Capture Driver Example"); + frame.add(new WebcamPanel(Webcam.getDefault())); + frame.pack(); + frame.setVisible(true); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +} diff --git a/webcam-capture-drivers/driver-javacv/src/main/java/com/github/sarxos/webcam/ds/javacv/JavaCvDevice.java b/webcam-capture-drivers/driver-javacv/src/main/java/com/github/sarxos/webcam/ds/javacv/JavaCvDevice.java index e0bacb3e..2d4e94b9 100644 --- a/webcam-capture-drivers/driver-javacv/src/main/java/com/github/sarxos/webcam/ds/javacv/JavaCvDevice.java +++ b/webcam-capture-drivers/driver-javacv/src/main/java/com/github/sarxos/webcam/ds/javacv/JavaCvDevice.java @@ -2,12 +2,15 @@ import java.awt.Dimension; import java.awt.image.BufferedImage; +import java.io.File; + +import org.bytedeco.javacpp.videoInputLib.videoInput; +import org.bytedeco.javacv.FrameGrabber; import com.github.sarxos.webcam.WebcamDevice; import com.github.sarxos.webcam.WebcamException; -import com.googlecode.javacv.FrameGrabber; -import com.googlecode.javacv.FrameGrabber.Exception; -import com.googlecode.javacv.cpp.videoInputLib.videoInput; +import com.github.sarxos.webcam.WebcamResolution; +import com.github.sarxos.webcam.util.OsUtils; /** @@ -18,6 +21,8 @@ public class JavaCvDevice implements WebcamDevice { private int address = -1; + private File vfile = null; + private String name = null; private FrameGrabber grabber = null; @@ -28,22 +33,37 @@ public JavaCvDevice(int address) { this.address = address; } + public JavaCvDevice(File vfile) { + this.vfile = vfile; + } + @Override public String getName() { if (name == null) { - name = videoInput.getDeviceName(address); + switch (OsUtils.getOS()) { + case WIN: + name = videoInput.getDeviceName(address).getString(); + break; + case NIX: + name = vfile.getAbsolutePath(); + break; + case OSX: + throw new UnsupportedOperationException("Mac OS is not supported"); + } } return name; } @Override public Dimension[] getResolutions() { + // grabber.get + throw new WebcamException("Not implemented"); } @Override public Dimension getResolution() { - throw new WebcamException("Not implemented"); + return WebcamResolution.VGA.getSize(); } @Override @@ -65,6 +85,22 @@ public BufferedImage getImage() { } } + private FrameGrabber buildGrabber() throws FrameGrabber.Exception { + switch (OsUtils.getOS()) { + case WIN: + return FrameGrabber.createDefault(address); + case NIX: + return FrameGrabber.createDefault(vfile); + case OSX: + default: + throw new UnsupportedOperationException("Current OS is not supported"); + } + } + + public FrameGrabber getGrabber() { + return grabber; + } + @Override public void open() { @@ -72,15 +108,14 @@ public void open() { return; } - // CvCapture capture = - // opencv_highgui.cvCreateCameraCapture(opencv_highgui.CV_CAP_DSHOW); - // IplImage image = opencv_highgui.cvQueryFrame(capture); - try { - grabber = FrameGrabber.createDefault(address); + + grabber = buildGrabber(); grabber.start(); + open = true; - } catch (com.googlecode.javacv.FrameGrabber.Exception e) { + + } catch (FrameGrabber.Exception e) { release(); throw new WebcamException(e); } @@ -90,7 +125,7 @@ private void release() { if (grabber != null) { try { grabber.release(); - } catch (com.googlecode.javacv.FrameGrabber.Exception e) { + } catch (FrameGrabber.Exception e) { throw new WebcamException(e); } } @@ -105,7 +140,7 @@ public void close() { try { grabber.stop(); - } catch (com.googlecode.javacv.FrameGrabber.Exception e) { + } catch (FrameGrabber.Exception e) { throw new WebcamException(e); } finally { dispose(); @@ -121,4 +156,9 @@ public void dispose() { public boolean isOpen() { return open; } + + @Override + public String toString() { + return getClass().getName() + "#address=" + address + "#vfile=" + vfile; + } } diff --git a/webcam-capture-drivers/driver-javacv/src/main/java/com/github/sarxos/webcam/ds/javacv/JavaCvDriver.java b/webcam-capture-drivers/driver-javacv/src/main/java/com/github/sarxos/webcam/ds/javacv/JavaCvDriver.java index f015feea..965d2567 100644 --- a/webcam-capture-drivers/driver-javacv/src/main/java/com/github/sarxos/webcam/ds/javacv/JavaCvDriver.java +++ b/webcam-capture-drivers/driver-javacv/src/main/java/com/github/sarxos/webcam/ds/javacv/JavaCvDriver.java @@ -1,12 +1,15 @@ package com.github.sarxos.webcam.ds.javacv; +import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.bytedeco.javacpp.videoInputLib.videoInput; + import com.github.sarxos.webcam.WebcamDevice; import com.github.sarxos.webcam.WebcamDriver; -import com.googlecode.javacv.cpp.videoInputLib.videoInput; +import com.github.sarxos.webcam.util.NixVideoDevUtils; /** @@ -21,34 +24,41 @@ */ public class JavaCvDriver implements WebcamDriver { - private static List devices = null; - - @Override - public List getDevices() { - if (devices == null) { - devices = new ArrayList(); - int n = videoInput.listDevices(); - if (n > 0) { - for (int i = 0; i < n; i++) { - devices.add(new JavaCvDevice(i)); - } - } else { - devices = Collections.emptyList(); + private List getDevicesWindows() { + List devices = new ArrayList(); + int n = videoInput.listDevices(); + if (n > 0) { + for (int i = 0; i < n; i++) { + devices.add(new JavaCvDevice(i)); } + } else { + devices = Collections.emptyList(); } return devices; } - public static void main(String[] args) { - new JavaCvDriver().getDevices(); + private List getDevicesLinux() { + List devices = new ArrayList(); + for (File vfile : NixVideoDevUtils.getVideoFiles()) { + devices.add(new JavaCvDevice(vfile)); + } + return devices; + } - int n = videoInput.listDevices(); - if (n > 0) { - for (int i = 0; i < n; i++) { - System.out.println(videoInput.getDeviceName(i)); - } + @Override + public List getDevices() { + boolean linux = System.getProperty("os.name").toLowerCase().indexOf("linux") != -1; + if (linux) { + return getDevicesLinux(); + } else { + return getDevicesWindows(); } + } + public static void main(String[] args) { + for (WebcamDevice d : new JavaCvDriver().getDevices()) { + System.out.println(d); + } } @Override diff --git a/webcam-capture-drivers/driver-lti-civil/src/example/resources/logback.xml b/webcam-capture-drivers/driver-lti-civil/src/example/resources/logback.xml new file mode 100644 index 00000000..2bb01a64 --- /dev/null +++ b/webcam-capture-drivers/driver-lti-civil/src/example/resources/logback.xml @@ -0,0 +1,10 @@ + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + +