From f800924a7651a218f085cd98a7b7b1611f64585f Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Thu, 10 Jun 2021 16:44:49 +0300 Subject: [PATCH 1/2] BAEL-4329 - Capturing image from webcam in java --- image-processing/pom.xml | 13 ++++++ .../imagefromwebcam/MarvinExample.java | 31 +++++++++++++ .../imagefromwebcam/OpenCVExample.java | 31 +++++++++++++ .../imagefromwebcam/WebcamCaptureExample.java | 43 +++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 image-processing/src/main/java/com/baeldung/imagefromwebcam/MarvinExample.java create mode 100644 image-processing/src/main/java/com/baeldung/imagefromwebcam/OpenCVExample.java create mode 100644 image-processing/src/main/java/com/baeldung/imagefromwebcam/WebcamCaptureExample.java diff --git a/image-processing/pom.xml b/image-processing/pom.xml index ea218356ce..b482aa30c1 100644 --- a/image-processing/pom.xml +++ b/image-processing/pom.xml @@ -82,6 +82,17 @@ MarvinPlugins ${marvin-version} + + org.bytedeco + javacv-platform + ${javacv-platform.version} + + + com.github.sarxos + webcam-capture + ${webcam-capture.version} + + @@ -91,6 +102,8 @@ 4.5.1 4.1.0-1.5.2 3.4.2-0 + 1.5.5 + 0.3.12 4.2 0.4.11 1.5.5 diff --git a/image-processing/src/main/java/com/baeldung/imagefromwebcam/MarvinExample.java b/image-processing/src/main/java/com/baeldung/imagefromwebcam/MarvinExample.java new file mode 100644 index 0000000000..5ec205939c --- /dev/null +++ b/image-processing/src/main/java/com/baeldung/imagefromwebcam/MarvinExample.java @@ -0,0 +1,31 @@ +package com.baeldung.imagefromwebcam; + +import marvin.gui.MarvinImagePanel; +import marvin.image.MarvinImage; +import marvin.io.MarvinImageIO; +import marvin.video.MarvinJavaCVAdapter; +import marvin.video.MarvinVideoInterface; +import marvin.video.MarvinVideoInterfaceException; + +public class MarvinExample { + + public static void main(String[] args) throws MarvinVideoInterfaceException { + MarvinVideoInterface videoAdapter = new MarvinJavaCVAdapter(); + videoAdapter.connect(0); + MarvinImage image = videoAdapter.getFrame(); + MarvinImageIO.saveImage(image, "selfie.jpg"); + } + + public void captureWithPanel() throws MarvinVideoInterfaceException { + MarvinVideoInterface videoAdapter = new MarvinJavaCVAdapter(); + videoAdapter.connect(0); + MarvinImage image = videoAdapter.getFrame(); + + MarvinImagePanel videoPanel = new MarvinImagePanel(); + videoPanel.setImage(image); + + videoPanel.setSize(800,600); + videoPanel.setVisible(true); + } + +} diff --git a/image-processing/src/main/java/com/baeldung/imagefromwebcam/OpenCVExample.java b/image-processing/src/main/java/com/baeldung/imagefromwebcam/OpenCVExample.java new file mode 100644 index 0000000000..8bac78eda5 --- /dev/null +++ b/image-processing/src/main/java/com/baeldung/imagefromwebcam/OpenCVExample.java @@ -0,0 +1,31 @@ +package com.baeldung.imagefromwebcam; + +import org.bytedeco.javacv.*; +import org.bytedeco.opencv.opencv_core.IplImage; +import java.awt.event.WindowEvent; +import javax.swing.JFrame; +import static org.bytedeco.opencv.helper.opencv_imgcodecs.cvSaveImage; + +public class OpenCVExample { + + public static void main(String[] args) throws Exception { + CanvasFrame canvas = new CanvasFrame("Web Cam"); + canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + FrameGrabber grabber = new OpenCVFrameGrabber(0); + OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage(); + + grabber.start(); + Frame frame = grabber.grab(); + + IplImage img = converter.convert(frame); + cvSaveImage("selfie.jpg", img); + + canvas.showImage(converter.convert(img)); + + Thread.sleep(2000); + + canvas.dispatchEvent(new WindowEvent(canvas, WindowEvent.WINDOW_CLOSING)); + } + +} diff --git a/image-processing/src/main/java/com/baeldung/imagefromwebcam/WebcamCaptureExample.java b/image-processing/src/main/java/com/baeldung/imagefromwebcam/WebcamCaptureExample.java new file mode 100644 index 0000000000..80780629ea --- /dev/null +++ b/image-processing/src/main/java/com/baeldung/imagefromwebcam/WebcamCaptureExample.java @@ -0,0 +1,43 @@ +package com.baeldung.imagefromwebcam; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +import javax.imageio.ImageIO; +import javax.swing.JFrame; + +import com.github.sarxos.webcam.Webcam; +import com.github.sarxos.webcam.WebcamPanel; +import com.github.sarxos.webcam.WebcamResolution; +import com.github.sarxos.webcam.util.ImageUtils; + +public class WebcamCaptureExample { + + public static void main(String[] args) throws IOException, Exception { + Webcam webcam = Webcam.getDefault(); + webcam.open(); + + BufferedImage image = webcam.getImage(); + + ImageIO.write(image, ImageUtils.FORMAT_JPG, new File("selfie.jpg")); + + //WebcamUtils.capture(webcam, "selfie1.jpg"); + } + + public void captureWithPanel() { + Webcam webcam = Webcam.getDefault(); + webcam.setViewSize(WebcamResolution.VGA.getSize()); + + WebcamPanel panel = new WebcamPanel(webcam); + panel.setImageSizeDisplayed(true); + + JFrame window = new JFrame("Webcam"); + window.add(panel); + window.setResizable(true); + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + window.pack(); + window.setVisible(true); + } + +} From eb94b5162a6192c793a195ce7a0b5706125ae64c Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 12 Jun 2021 18:29:55 +0300 Subject: [PATCH 2/2] BAEL-4239 - code refactor --- .../java/com/baeldung/imagefromwebcam/MarvinExample.java | 8 ++++---- .../java/com/baeldung/imagefromwebcam/OpenCVExample.java | 2 +- .../baeldung/imagefromwebcam/WebcamCaptureExample.java | 2 -- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/image-processing/src/main/java/com/baeldung/imagefromwebcam/MarvinExample.java b/image-processing/src/main/java/com/baeldung/imagefromwebcam/MarvinExample.java index 5ec205939c..67a46d9d59 100644 --- a/image-processing/src/main/java/com/baeldung/imagefromwebcam/MarvinExample.java +++ b/image-processing/src/main/java/com/baeldung/imagefromwebcam/MarvinExample.java @@ -21,11 +21,11 @@ public class MarvinExample { videoAdapter.connect(0); MarvinImage image = videoAdapter.getFrame(); - MarvinImagePanel videoPanel = new MarvinImagePanel(); - videoPanel.setImage(image); + MarvinImagePanel imagePanel = new MarvinImagePanel(); + imagePanel.setImage(image); - videoPanel.setSize(800,600); - videoPanel.setVisible(true); + imagePanel.setSize(800,600); + imagePanel.setVisible(true); } } diff --git a/image-processing/src/main/java/com/baeldung/imagefromwebcam/OpenCVExample.java b/image-processing/src/main/java/com/baeldung/imagefromwebcam/OpenCVExample.java index 8bac78eda5..3d9d1bcb00 100644 --- a/image-processing/src/main/java/com/baeldung/imagefromwebcam/OpenCVExample.java +++ b/image-processing/src/main/java/com/baeldung/imagefromwebcam/OpenCVExample.java @@ -21,7 +21,7 @@ public class OpenCVExample { IplImage img = converter.convert(frame); cvSaveImage("selfie.jpg", img); - canvas.showImage(converter.convert(img)); + canvas.showImage(frame); Thread.sleep(2000); diff --git a/image-processing/src/main/java/com/baeldung/imagefromwebcam/WebcamCaptureExample.java b/image-processing/src/main/java/com/baeldung/imagefromwebcam/WebcamCaptureExample.java index 80780629ea..8edde2a637 100644 --- a/image-processing/src/main/java/com/baeldung/imagefromwebcam/WebcamCaptureExample.java +++ b/image-processing/src/main/java/com/baeldung/imagefromwebcam/WebcamCaptureExample.java @@ -21,8 +21,6 @@ public class WebcamCaptureExample { BufferedImage image = webcam.getImage(); ImageIO.write(image, ImageUtils.FORMAT_JPG, new File("selfie.jpg")); - - //WebcamUtils.capture(webcam, "selfie1.jpg"); } public void captureWithPanel() {