diff --git a/.gitignore b/.gitignore index 6e47a406..1b9e01e6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -/target/ -/platform/target/ +**/target/** # Mac .DS_Store diff --git a/README.md b/README.md index f4ef0309..2035100a 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ To use JavaCV, you will first need to download and install the following softwar Further, although not always required, some functionality of JavaCV also relies on: * CL Eye Platform SDK (Windows only) http://codelaboratories.com/downloads/ - * Android SDK API 14 or newer http://developer.android.com/sdk/ + * Android SDK API 21 or newer http://developer.android.com/sdk/ * JOCL and JOGL from JogAmp http://jogamp.org/ Finally, please make sure everything has the same bitness: **32-bit and 64-bit modules do not mix under any circumstances**. @@ -89,7 +89,7 @@ Eclipse (Java SE 7 or newer): 1. Navigate to Project > Properties > Java Build Path > Libraries and click "Add External JARs...". 2. Locate the JAR files, select them, and click OK. -IntelliJ IDEA (Android 4.0 or newer): +IntelliJ IDEA (Android 5.0 or newer): 1. Follow the instructions on this page: http://developer.android.com/training/basics/firstapp/ 2. Copy all the JAR files into the `app/libs` subdirectory. @@ -107,9 +107,11 @@ Sample Usage The class definitions are basically ports to Java of the original header files in C/C++, and I deliberately decided to keep as much of the original syntax as possible. For example, here is a method that tries to load an image file, smooth it, and save it back to disk: ```java -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; public class Smoother { public static void smooth(String filename) { @@ -130,10 +132,14 @@ import java.net.URL; import org.bytedeco.javacv.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.indexer.*; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_calib3d.*; -import static org.bytedeco.javacpp.opencv_objdetect.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_calib3d.*; +import org.bytedeco.opencv.opencv_objdetect.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_calib3d.*; +import static org.bytedeco.opencv.global.opencv_objdetect.*; public class Demo { public static void main(String[] args) throws Exception { @@ -146,9 +152,6 @@ public class Demo { classifierName = file.getAbsolutePath(); } - // Preload the opencv_objdetect module to work around a known bug. - Loader.load(opencv_objdetect.class); - // We can "cast" Pointer objects by instantiating a new object of the desired class. CascadeClassifier classifier = new CascadeClassifier(classifierName); if (classifier == null) { @@ -157,7 +160,7 @@ public class Demo { } // The available FrameGrabber classes include OpenCVFrameGrabber (opencv_videoio), - // DC1394FrameGrabber, FlyCaptureFrameGrabber, OpenKinectFrameGrabber, OpenKinect2FrameGrabber, + // DC1394FrameGrabber, FlyCapture2FrameGrabber, OpenKinectFrameGrabber, OpenKinect2FrameGrabber, // RealSenseFrameGrabber, PS3EyeFrameGrabber, VideoInputFrameGrabber, and FFmpegFrameGrabber. FrameGrabber grabber = FrameGrabber.createDefault(0); grabber.start(); @@ -264,7 +267,7 @@ Furthermore, after creating a `pom.xml` file with the following content: 4.0.0 org.bytedeco.javacv demo - 1.4.4 + 1.5-SNAPSHOT 1.7 1.7 @@ -273,13 +276,16 @@ Furthermore, after creating a `pom.xml` file with the following content: org.bytedeco javacv-platform - 1.4.4 + 1.5-SNAPSHOT + + . + ``` -And by placing the source code above in `src/main/java/Demo.java`, we can use the following command to have everything first installed automatically and then executed by Maven: +And by placing the source code above in `Demo.java`, or similarly for other classes found in the [`samples`](samples), we can use the following command to have everything first installed automatically and then executed by Maven: ```bash $ mvn compile exec:java -Dexec.mainClass=Demo ``` @@ -291,8 +297,8 @@ Build Instructions If the binary files available above are not enough for your needs, you might need to rebuild them from the source code. To this end, the project files were created for: * Maven 3.x http://maven.apache.org/download.html - * JavaCPP 1.4.4 https://github.com/bytedeco/javacpp - * JavaCPP Presets 1.4.4 https://github.com/bytedeco/javacpp-presets + * JavaCPP 1.5 https://github.com/bytedeco/javacpp + * JavaCPP Presets 1.5 https://github.com/bytedeco/javacpp-presets Once installed, simply call the usual `mvn install` command for JavaCPP, its Presets, and JavaCV. By default, no other dependencies than a C++ compiler for JavaCPP are required. Please refer to the comments inside the `pom.xml` files for further details. diff --git a/samples/BioInspiredRetina.java b/samples/BioInspiredRetina.java index 7b441096..547d0322 100644 --- a/samples/BioInspiredRetina.java +++ b/samples/BioInspiredRetina.java @@ -1,18 +1,19 @@ -package net.betzel.bytedeco.javacv.bioinspired; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import javax.imageio.ImageIO; import org.bytedeco.javacpp.tools.Slf4jLogger; import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.javacv.Java2DFrameConverter; import org.bytedeco.javacv.OpenCVFrameConverter; -import javax.imageio.ImageIO; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.File; - -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_bioinspired.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_bioinspired.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_bioinspired.*; /** diff --git a/samples/BlobDemo.java b/samples/BlobDemo.java index 6d6d2448..aa25f496 100644 --- a/samples/BlobDemo.java +++ b/samples/BlobDemo.java @@ -2,9 +2,11 @@ import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.javacv.OpenCVFrameConverter; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; /////////////////////////////////////////////////////////////////// //* *// diff --git a/samples/CaffeGooglenet.java b/samples/CaffeGooglenet.java index 630d95cb..06627c6c 100644 --- a/samples/CaffeGooglenet.java +++ b/samples/CaffeGooglenet.java @@ -5,12 +5,6 @@ * Paolo Bolettieri */ -import static org.bytedeco.javacpp.opencv_core.minMaxLoc; -import static org.bytedeco.javacpp.opencv_dnn.blobFromImage; -import static org.bytedeco.javacpp.opencv_dnn.readNetFromCaffe; -import static org.bytedeco.javacpp.opencv_imgcodecs.imread; -import static org.bytedeco.javacpp.opencv_imgproc.resize; - import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -18,10 +12,13 @@ import java.util.ArrayList; import java.util.List; -import org.bytedeco.javacpp.opencv_core.Mat; -import org.bytedeco.javacpp.opencv_core.Point; -import org.bytedeco.javacpp.opencv_core.Size; -import org.bytedeco.javacpp.opencv_dnn.Net; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_dnn.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_dnn.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; public class CaffeGooglenet { diff --git a/samples/ColoredObjectTrack.java b/samples/ColoredObjectTrack.java index b8efdd03..9ad1383c 100644 --- a/samples/ColoredObjectTrack.java +++ b/samples/ColoredObjectTrack.java @@ -14,9 +14,11 @@ import org.bytedeco.javacv.Java2DFrameConverter; import org.bytedeco.javacv.OpenCVFrameConverter; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; public class ColoredObjectTrack implements Runnable { diff --git a/samples/DeepLearningFaceDetection.java b/samples/DeepLearningFaceDetection.java index 35bd8ebd..4b820fdc 100644 --- a/samples/DeepLearningFaceDetection.java +++ b/samples/DeepLearningFaceDetection.java @@ -1,21 +1,16 @@ import org.bytedeco.javacpp.indexer.FloatIndexer; -import static org.bytedeco.javacpp.opencv_core.CV_32F; -import org.bytedeco.javacpp.opencv_core.Mat; -import org.bytedeco.javacpp.opencv_core.Point; -import org.bytedeco.javacpp.opencv_core.Rect; -import org.bytedeco.javacpp.opencv_core.Scalar; -import org.bytedeco.javacpp.opencv_core.Size; -import org.bytedeco.javacpp.opencv_dnn.Net; -import static org.bytedeco.javacpp.opencv_dnn.blobFromImage; -import static org.bytedeco.javacpp.opencv_dnn.readNetFromCaffe; -import static org.bytedeco.javacpp.opencv_imgproc.rectangle; -import static org.bytedeco.javacpp.opencv_imgproc.resize; -import static org.bytedeco.javacpp.opencv_videoio.CAP_PROP_FRAME_HEIGHT; -import static org.bytedeco.javacpp.opencv_videoio.CAP_PROP_FRAME_WIDTH; -import org.bytedeco.javacpp.opencv_videoio.VideoCapture; import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.javacv.OpenCVFrameConverter; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_dnn.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_videoio.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_dnn.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_videoio.*; + /** * Created on Jul 28, 2018 * diff --git a/samples/DeinterlacedVideoPlayer.java b/samples/DeinterlacedVideoPlayer.java index 1c48e458..40317dc4 100644 --- a/samples/DeinterlacedVideoPlayer.java +++ b/samples/DeinterlacedVideoPlayer.java @@ -1,9 +1,4 @@ -import static org.bytedeco.javacpp.opencv_core.cvClearMemStorage; - import org.bytedeco.javacpp.Loader; -import org.bytedeco.javacpp.avutil; -import org.bytedeco.javacpp.opencv_core.CvMemStorage; -import org.bytedeco.javacpp.opencv_objdetect; import org.bytedeco.javacv.FFmpegFrameFilter; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.FrameFilter; @@ -11,6 +6,8 @@ import org.bytedeco.javacv.FrameGrabber.Exception; import org.bytedeco.javacv.OpenCVFrameGrabber; +import org.bytedeco.ffmpeg.global.avutil; + public class DeinterlacedVideoPlayer { private static final int DEVICE_ID = 0; @@ -25,15 +22,12 @@ public class DeinterlacedVideoPlayer { public DeinterlacedVideoPlayer() {} public void start() { - Loader.load(opencv_objdetect.class); FrameFilter filter = null; try { startFrameGrabber(); - CvMemStorage storage = CvMemStorage.create(); Frame frame = null; while ((frame = grabber.grab()) != null) { - cvClearMemStorage(storage); if (filter == null) { filter = new FFmpegFrameFilter(ffmpegString, frame.imageWidth, frame.imageHeight); filter.setPixelFormat(PIXEL_FORMAT); diff --git a/samples/Demo.java b/samples/Demo.java index 5718a932..9e2026e8 100644 --- a/samples/Demo.java +++ b/samples/Demo.java @@ -25,10 +25,14 @@ import org.bytedeco.javacv.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.indexer.*; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_calib3d.*; -import static org.bytedeco.javacpp.opencv_objdetect.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_calib3d.*; +import org.bytedeco.opencv.opencv_objdetect.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_calib3d.*; +import static org.bytedeco.opencv.global.opencv_objdetect.*; public class Demo { public static void main(String[] args) throws Exception { @@ -41,9 +45,6 @@ public static void main(String[] args) throws Exception { classifierName = file.getAbsolutePath(); } - // Preload the opencv_objdetect module to work around a known bug. - Loader.load(opencv_objdetect.class); - // We can "cast" Pointer objects by instantiating a new object of the desired class. CascadeClassifier classifier = new CascadeClassifier(classifierName); if (classifier == null) { @@ -52,7 +53,7 @@ public static void main(String[] args) throws Exception { } // The available FrameGrabber classes include OpenCVFrameGrabber (opencv_videoio), - // DC1394FrameGrabber, FlyCaptureFrameGrabber, OpenKinectFrameGrabber, OpenKinect2FrameGrabber, + // DC1394FrameGrabber, FlyCapture2FrameGrabber, OpenKinectFrameGrabber, OpenKinect2FrameGrabber, // RealSenseFrameGrabber, PS3EyeFrameGrabber, VideoInputFrameGrabber, and FFmpegFrameGrabber. FrameGrabber grabber = FrameGrabber.createDefault(0); grabber.start(); diff --git a/samples/FFmpegStreamingTimeout.java b/samples/FFmpegStreamingTimeout.java index eff08135..24b5089e 100644 --- a/samples/FFmpegStreamingTimeout.java +++ b/samples/FFmpegStreamingTimeout.java @@ -1,12 +1,13 @@ - import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import org.bytedeco.javacpp.Pointer; -import org.bytedeco.javacpp.avformat; import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.FrameGrabber; +import org.bytedeco.ffmpeg.avformat.*; +import static org.bytedeco.ffmpeg.global.avformat.*; + /** * * @author Dmitriy Gerashenko @@ -108,7 +109,7 @@ private static void testWithCallback() { grabber.start(); final AtomicBoolean interruptFlag = new AtomicBoolean(false); - avformat.AVIOInterruptCB.Callback_Pointer cp = new avformat.AVIOInterruptCB.Callback_Pointer() { + AVIOInterruptCB.Callback_Pointer cp = new AVIOInterruptCB.Callback_Pointer() { @Override public int call(Pointer pointer) { // 0 - continue, 1 - exit @@ -118,12 +119,12 @@ public int call(Pointer pointer) { } }; - avformat.AVFormatContext oc = grabber.getFormatContext(); - avformat.avformat_alloc_context(); - avformat.AVIOInterruptCB cb = new avformat.AVIOInterruptCB(); + AVFormatContext oc = grabber.getFormatContext(); + avformat_alloc_context(); + AVIOInterruptCB cb = new AVIOInterruptCB(); cb.callback(cp); oc.interrupt_callback(cb); - new Thread(() -> { + new Thread(new Runnable() { public void run() { try { TimeUnit.SECONDS.sleep(TIMEOUT); interruptFlag.set(true); @@ -131,7 +132,7 @@ public int call(Pointer pointer) { } catch (InterruptedException ex) { System.out.println("exception in interruption thread: " + ex); } - }).start(); + }}).start(); Frame frame = null; /** diff --git a/samples/FaceApplet.java b/samples/FaceApplet.java index ade6f0a7..58669de1 100644 --- a/samples/FaceApplet.java +++ b/samples/FaceApplet.java @@ -7,16 +7,18 @@ import java.io.File; import java.io.IOException; import org.bytedeco.javacpp.Loader; -import org.bytedeco.javacpp.opencv_objdetect; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.Java2DFrameConverter; import org.bytedeco.javacv.OpenCVFrameConverter; import org.bytedeco.javacv.OpenCVFrameGrabber; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_objdetect.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_objdetect.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_objdetect.*; /** * diff --git a/samples/FacePreview.java b/samples/FacePreview.java index d70eb552..7ad6805f 100644 --- a/samples/FacePreview.java +++ b/samples/FacePreview.java @@ -71,8 +71,10 @@ import java.util.List; import org.bytedeco.javacpp.Loader; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_objdetect.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_objdetect.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_objdetect.*; // ---------------------------------------------------------------------- @@ -151,7 +153,7 @@ protected void processImage(byte[] data, int width, int height) { int imageWidth = grayImage.cols(); int imageHeight = grayImage.rows(); int dataStride = f*width; - int imageStride = grayImage.step(0); + int imageStride = (int)grayImage.step(0); ByteBuffer imageBuffer = grayImage.createBuffer(); for (int y = 0; y < imageHeight; y++) { int dataLine = y*dataStride; diff --git a/samples/FaceRecognizerInVideo.java b/samples/FaceRecognizerInVideo.java index 3991d2a5..9576426f 100644 --- a/samples/FaceRecognizerInVideo.java +++ b/samples/FaceRecognizerInVideo.java @@ -1,4 +1,3 @@ - import java.io.File; import org.bytedeco.javacpp.IntPointer; @@ -9,11 +8,16 @@ import org.bytedeco.javacv.OpenCVFrameConverter; import org.bytedeco.javacv.OpenCVFrameGrabber; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_face.*; -import static org.bytedeco.javacpp.opencv_highgui.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_objdetect.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_face.*; +import org.bytedeco.opencv.opencv_highgui.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_objdetect.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_face.*; +import static org.bytedeco.opencv.global.opencv_highgui.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_objdetect.*; /** * This is an example how to detect face in a video file with javacv diff --git a/samples/HoughLines.java b/samples/HoughLines.java index 7567020f..5552d759 100644 --- a/samples/HoughLines.java +++ b/samples/HoughLines.java @@ -1,9 +1,12 @@ import javax.swing.JFrame; import org.bytedeco.javacpp.*; import org.bytedeco.javacv.*; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; + +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; /** * C to Java translation of the houghlines.c sample provided in the c sample directory of OpenCV 2.1, diff --git a/samples/ImageSegmentation.java b/samples/ImageSegmentation.java index b82470de..fa49431e 100644 --- a/samples/ImageSegmentation.java +++ b/samples/ImageSegmentation.java @@ -8,49 +8,22 @@ * Paolo Bolettieri */ -import static org.bytedeco.javacpp.helper.opencv_core.RGB; -import static org.bytedeco.javacpp.opencv_core.CV_32F; -import static org.bytedeco.javacpp.opencv_core.CV_32SC1; -import static org.bytedeco.javacpp.opencv_core.CV_8U; -import static org.bytedeco.javacpp.opencv_core.CV_8UC1; -import static org.bytedeco.javacpp.opencv_core.CV_8UC3; -import static org.bytedeco.javacpp.opencv_core.NORM_MINMAX; -import static org.bytedeco.javacpp.opencv_core.bitwise_not; -import static org.bytedeco.javacpp.opencv_core.multiply; -import static org.bytedeco.javacpp.opencv_core.normalize; -import static org.bytedeco.javacpp.opencv_core.subtract; -import static org.bytedeco.javacpp.opencv_core.theRNG; -import static org.bytedeco.javacpp.opencv_imgcodecs.imread; -import static org.bytedeco.javacpp.opencv_imgproc.CV_BGR2GRAY; -import static org.bytedeco.javacpp.opencv_imgproc.CV_CHAIN_APPROX_SIMPLE; -import static org.bytedeco.javacpp.opencv_imgproc.CV_DIST_L2; -import static org.bytedeco.javacpp.opencv_imgproc.CV_RETR_EXTERNAL; -import static org.bytedeco.javacpp.opencv_imgproc.CV_THRESH_BINARY; -import static org.bytedeco.javacpp.opencv_imgproc.CV_THRESH_OTSU; -import static org.bytedeco.javacpp.opencv_imgproc.circle; -import static org.bytedeco.javacpp.opencv_imgproc.cvtColor; -import static org.bytedeco.javacpp.opencv_imgproc.dilate; -import static org.bytedeco.javacpp.opencv_imgproc.distanceTransform; -import static org.bytedeco.javacpp.opencv_imgproc.drawContours; -import static org.bytedeco.javacpp.opencv_imgproc.filter2D; -import static org.bytedeco.javacpp.opencv_imgproc.findContours; -import static org.bytedeco.javacpp.opencv_imgproc.threshold; -import static org.bytedeco.javacpp.opencv_imgproc.watershed; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.bytedeco.javacpp.opencv_core.Mat; -import org.bytedeco.javacpp.opencv_core.MatVector; -import org.bytedeco.javacpp.opencv_core.Point; -import org.bytedeco.javacpp.opencv_core.Scalar; import org.bytedeco.javacpp.indexer.FloatIndexer; import org.bytedeco.javacpp.indexer.IntIndexer; import org.bytedeco.javacpp.indexer.UByteIndexer; import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.javacv.OpenCVFrameConverter; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; + public class ImageSegmentation { private static final int[] WHITE = {255, 255, 255}; private static final int[] BLACK = {0, 0, 0}; diff --git a/samples/JavaFxPlayVideoAndAudio.java b/samples/JavaFxPlayVideoAndAudio.java index 3e68551f..f3e5abe8 100644 --- a/samples/JavaFxPlayVideoAndAudio.java +++ b/samples/JavaFxPlayVideoAndAudio.java @@ -35,35 +35,35 @@ public static void main(String[] args) { } @Override - public void start(Stage primaryStage) throws Exception { - StackPane root = new StackPane(); - ImageView imageView = new ImageView(); + public void start(final Stage primaryStage) throws Exception { + final StackPane root = new StackPane(); + final ImageView imageView = new ImageView(); root.getChildren().add(imageView); imageView.fitWidthProperty().bind(primaryStage.widthProperty()); imageView.fitHeightProperty().bind(primaryStage.heightProperty()); - Scene scene = new Scene(root, 640, 480); + final Scene scene = new Scene(root, 640, 480); primaryStage.setTitle("Video + audio"); primaryStage.setScene(scene); primaryStage.show(); - playThread = new Thread(() -> { + playThread = new Thread(new Runnable() { public void run() { try { - String videoFilename = getParameters().getRaw().get(0); - FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFilename); + final String videoFilename = getParameters().getRaw().get(0); + final FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFilename); grabber.start(); primaryStage.setWidth(grabber.getImageWidth()); primaryStage.setHeight(grabber.getImageHeight()); - AudioFormat audioFormat = new AudioFormat(grabber.getSampleRate(), 16, grabber.getAudioChannels(), true, true); + final AudioFormat audioFormat = new AudioFormat(grabber.getSampleRate(), 16, grabber.getAudioChannels(), true, true); - DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat); - SourceDataLine soundLine = (SourceDataLine) AudioSystem.getLine(info); + final DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat); + final SourceDataLine soundLine = (SourceDataLine) AudioSystem.getLine(info); soundLine.open(audioFormat); soundLine.start(); - Java2DFrameConverter converter = new Java2DFrameConverter(); + final Java2DFrameConverter converter = new Java2DFrameConverter(); ExecutorService executor = Executors.newSingleThreadExecutor(); @@ -73,15 +73,15 @@ public void start(Stage primaryStage) throws Exception { break; } if (frame.image != null) { - Image image = SwingFXUtils.toFXImage(converter.convert(frame), null); - Platform.runLater(() -> { + final Image image = SwingFXUtils.toFXImage(converter.convert(frame), null); + Platform.runLater(new Runnable() { public void run() { imageView.setImage(image); - }); + }}); } else if (frame.samples != null) { - ShortBuffer channelSamplesShortBuffer = (ShortBuffer) frame.samples[0]; + final ShortBuffer channelSamplesShortBuffer = (ShortBuffer) frame.samples[0]; channelSamplesShortBuffer.rewind(); - ByteBuffer outBuffer = ByteBuffer.allocate(channelSamplesShortBuffer.capacity() * 2); + final ByteBuffer outBuffer = ByteBuffer.allocate(channelSamplesShortBuffer.capacity() * 2); for (int i = 0; i < channelSamplesShortBuffer.capacity(); i++) { short val = channelSamplesShortBuffer.get(i); @@ -93,10 +93,10 @@ public void start(Stage primaryStage) throws Exception { * interruptions during writing. */ try { - executor.submit(() -> { + executor.submit(new Runnable() { public void run() { soundLine.write(outBuffer.array(), 0, outBuffer.capacity()); outBuffer.clear(); - }).get(); + }}).get(); } catch (InterruptedException interruptedException) { Thread.currentThread().interrupt(); } @@ -112,7 +112,7 @@ public void start(Stage primaryStage) throws Exception { LOG.log(Level.SEVERE, null, exception); System.exit(1); } - }); + }}); playThread.start(); } diff --git a/samples/KazemiFacemarkExample.java b/samples/KazemiFacemarkExample.java index 2577fe5a..44c58157 100644 --- a/samples/KazemiFacemarkExample.java +++ b/samples/KazemiFacemarkExample.java @@ -9,21 +9,18 @@ import java.io.IOException; import java.net.URISyntaxException; -import org.bytedeco.javacpp.opencv_core.Mat; -import org.bytedeco.javacpp.opencv_core.Point2fVector; -import org.bytedeco.javacpp.opencv_core.Point2fVectorVector; -import org.bytedeco.javacpp.opencv_core.RectVector; -import org.bytedeco.javacpp.opencv_core.Scalar; -import org.bytedeco.javacpp.opencv_face.FacemarkKazemi; -import static org.bytedeco.javacpp.opencv_face.drawFacemarks; -import static org.bytedeco.javacpp.opencv_highgui.cvWaitKey; -import static org.bytedeco.javacpp.opencv_highgui.imshow; -import static org.bytedeco.javacpp.opencv_imgcodecs.imread; -import static org.bytedeco.javacpp.opencv_imgcodecs.imwrite; -import static org.bytedeco.javacpp.opencv_imgproc.COLOR_BGR2GRAY; -import static org.bytedeco.javacpp.opencv_imgproc.cvtColor; -import static org.bytedeco.javacpp.opencv_imgproc.equalizeHist; -import org.bytedeco.javacpp.opencv_objdetect.CascadeClassifier; + +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_face.*; +import org.bytedeco.opencv.opencv_highgui.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_objdetect.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_face.*; +import static org.bytedeco.opencv.global.opencv_highgui.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_objdetect.*; public class KazemiFacemarkExample { diff --git a/samples/LBFFacemarkExampleWithVideo.java b/samples/LBFFacemarkExampleWithVideo.java index cb9381c7..32d4b96b 100644 --- a/samples/LBFFacemarkExampleWithVideo.java +++ b/samples/LBFFacemarkExampleWithVideo.java @@ -9,22 +9,19 @@ import java.io.IOException; import java.net.URISyntaxException; -import org.bytedeco.javacpp.opencv_core.Mat; -import org.bytedeco.javacpp.opencv_core.Point2fVector; -import org.bytedeco.javacpp.opencv_core.Point2fVectorVector; -import org.bytedeco.javacpp.opencv_core.RectVector; -import org.bytedeco.javacpp.opencv_core.Scalar; -import org.bytedeco.javacpp.opencv_core.UMat; -import org.bytedeco.javacpp.opencv_face.Facemark; -import org.bytedeco.javacpp.opencv_face.FacemarkLBF; -import static org.bytedeco.javacpp.opencv_face.drawFacemarks; -import static org.bytedeco.javacpp.opencv_highgui.imshow; -import static org.bytedeco.javacpp.opencv_highgui.waitKey; -import static org.bytedeco.javacpp.opencv_imgproc.COLOR_BGR2GRAY; -import static org.bytedeco.javacpp.opencv_imgproc.cvtColor; -import static org.bytedeco.javacpp.opencv_imgproc.equalizeHist; -import org.bytedeco.javacpp.opencv_objdetect.CascadeClassifier; -import org.bytedeco.javacpp.opencv_videoio.VideoCapture; + +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_face.*; +import org.bytedeco.opencv.opencv_highgui.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_objdetect.*; +import org.bytedeco.opencv.opencv_videoio.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_face.*; +import static org.bytedeco.opencv.global.opencv_highgui.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_objdetect.*; +import static org.bytedeco.opencv.global.opencv_videoio.*; public class LBFFacemarkExampleWithVideo { diff --git a/samples/MotionDetector.java b/samples/MotionDetector.java index 0f528e20..e44c7a62 100644 --- a/samples/MotionDetector.java +++ b/samples/MotionDetector.java @@ -12,8 +12,11 @@ import org.bytedeco.javacpp.*; import org.bytedeco.javacv.*; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; + +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; public class MotionDetector { public static void main(String[] args) throws Exception { diff --git a/samples/OpenCVFaceRecognizer.java b/samples/OpenCVFaceRecognizer.java index dee0a64e..e3eb81d8 100644 --- a/samples/OpenCVFaceRecognizer.java +++ b/samples/OpenCVFaceRecognizer.java @@ -2,20 +2,15 @@ import java.io.FilenameFilter; import java.nio.IntBuffer; -import static org.bytedeco.javacpp.opencv_core.CV_32SC1; -import static org.bytedeco.javacpp.opencv_core.CV_8UC1; -import static org.bytedeco.javacpp.opencv_imgcodecs.imread; -import static org.bytedeco.javacpp.opencv_imgcodecs.IMREAD_GRAYSCALE; - import org.bytedeco.javacpp.BytePointer; import org.bytedeco.javacpp.IntPointer; import org.bytedeco.javacpp.DoublePointer; -import org.bytedeco.javacpp.opencv_face.FaceRecognizer; -import org.bytedeco.javacpp.opencv_face.FisherFaceRecognizer; -import org.bytedeco.javacpp.opencv_face.EigenFaceRecognizer; -import org.bytedeco.javacpp.opencv_face.LBPHFaceRecognizer; -import org.bytedeco.javacpp.opencv_core.Mat; -import org.bytedeco.javacpp.opencv_core.MatVector; + +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_face.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_face.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; /** * I couldn't find any tutorial on how to perform face recognition using OpenCV and Java, diff --git a/samples/OpenCVFeatures2dSerialization.java b/samples/OpenCVFeatures2dSerialization.java index c54824d5..f1865e91 100644 --- a/samples/OpenCVFeatures2dSerialization.java +++ b/samples/OpenCVFeatures2dSerialization.java @@ -1,19 +1,18 @@ -import org.bytedeco.javacpp.BytePointer; -import org.bytedeco.javacpp.opencv_core; -import org.bytedeco.javacv.Java2DFrameConverter; -import org.bytedeco.javacv.OpenCVFrameConverter; - -import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; +import javax.imageio.ImageIO; + +import org.bytedeco.javacpp.BytePointer; +import org.bytedeco.javacv.Java2DFrameConverter; +import org.bytedeco.javacv.OpenCVFrameConverter; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_features2d.AKAZE; -import static org.bytedeco.javacpp.opencv_core.read; -import static org.bytedeco.javacpp.opencv_core.write; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_features2d.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_features2d.*; /** * (De)serialize OpenCV structures using XML to files and memory @@ -92,4 +91,4 @@ private static void deserializeMemory(String serialized) { } } -} \ No newline at end of file +} diff --git a/samples/OpticalFlowDense.java b/samples/OpticalFlowDense.java index 992a5630..a91b87ad 100644 --- a/samples/OpticalFlowDense.java +++ b/samples/OpticalFlowDense.java @@ -1,9 +1,12 @@ - import java.nio.FloatBuffer; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; -import static org.bytedeco.javacpp.opencv_optflow.*; -import static org.bytedeco.javacpp.opencv_video.*; + +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_optflow.*; +import org.bytedeco.opencv.opencv_video.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; +import static org.bytedeco.opencv.global.opencv_optflow.*; +import static org.bytedeco.opencv.global.opencv_video.*; /** * This code will calculate the optical flow for every pixel using DenseOpticalFlow between two images (Frame-1 & diff --git a/samples/OpticalFlowTracker.java b/samples/OpticalFlowTracker.java index 48dc94d7..9f1564f8 100644 --- a/samples/OpticalFlowTracker.java +++ b/samples/OpticalFlowTracker.java @@ -1,93 +1,85 @@ -/* - * Because I believe that examples are the easiest way how to use JavaCV, I am - * sending a sample based on http://dasl.mem.drexel.edu/~noahKuntz/openCVTut9.html - * - * burgetrm@gmail.com - */ - -import org.bytedeco.javacpp.BytePointer; -import org.bytedeco.javacpp.FloatPointer; -import org.bytedeco.javacpp.IntPointer; -import org.bytedeco.javacpp.Loader; -import org.bytedeco.javacv.*; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_video.*; -import static org.bytedeco.javacpp.opencv_highgui.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; - -public class OpticalFlowTracker { - private static final int MAX_CORNERS = 500; - - public static void main(String[] args) { - // Load two images and allocate other structures - IplImage imgA = cvLoadImage( - "image0.png", - CV_LOAD_IMAGE_GRAYSCALE); - IplImage imgB = cvLoadImage( - "image1.png", - CV_LOAD_IMAGE_GRAYSCALE); - - CvSize img_sz = cvGetSize(imgA); - int win_size = 15; - - // IplImage imgC = cvLoadImage("OpticalFlow1.png", - // CV_LOAD_IMAGE_UNCHANGED); - IplImage imgC = cvLoadImage( - "image0.png", - CV_LOAD_IMAGE_UNCHANGED); - // Get the features for tracking - IplImage eig_image = cvCreateImage(img_sz, IPL_DEPTH_32F, 1); - IplImage tmp_image = cvCreateImage(img_sz, IPL_DEPTH_32F, 1); - - IntPointer corner_count = new IntPointer(1).put(MAX_CORNERS); - CvPoint2D32f cornersA = new CvPoint2D32f(MAX_CORNERS); - - CvArr mask = null; - cvGoodFeaturesToTrack(imgA, eig_image, tmp_image, cornersA, - corner_count, 0.05, 5.0, mask, 3, 0, 0.04); - - cvFindCornerSubPix(imgA, cornersA, corner_count.get(), - cvSize(win_size, win_size), cvSize(-1, -1), - cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03)); - - // Call Lucas Kanade algorithm - BytePointer features_found = new BytePointer(MAX_CORNERS); - FloatPointer feature_errors = new FloatPointer(MAX_CORNERS); - - CvSize pyr_sz = cvSize(imgA.width() + 8, imgB.height() / 3); - - IplImage pyrA = cvCreateImage(pyr_sz, IPL_DEPTH_32F, 1); - IplImage pyrB = cvCreateImage(pyr_sz, IPL_DEPTH_32F, 1); - - CvPoint2D32f cornersB = new CvPoint2D32f(MAX_CORNERS); - cvCalcOpticalFlowPyrLK(imgA, imgB, pyrA, pyrB, cornersA, cornersB, - corner_count.get(), cvSize(win_size, win_size), 5, - features_found, feature_errors, - cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.3), 0); - - // Make an image of the results - for (int i = 0; i < corner_count.get(); i++) { - if (features_found.get(i) == 0 || feature_errors.get(i) > 550) { - System.out.println("Error is " + feature_errors.get(i) + "/n"); - continue; - } - System.out.println("Got it/n"); - cornersA.position(i); - cornersB.position(i); - CvPoint p0 = cvPoint(Math.round(cornersA.x()), - Math.round(cornersA.y())); - CvPoint p1 = cvPoint(Math.round(cornersB.x()), - Math.round(cornersB.y())); - cvLine(imgC, p0, p1, CV_RGB(255, 0, 0), - 2, 8, 0); - } - - cvSaveImage( - "image0-1.png", - imgC); - cvNamedWindow( "LKpyr_OpticalFlow", 0 ); - cvShowImage( "LKpyr_OpticalFlow", imgC ); - cvWaitKey(0); - } -} +/* + * Because I believe that examples are the easiest way how to use JavaCV, I am + * sending a sample based on http://dasl.mem.drexel.edu/~noahKuntz/openCVTut9.html + * + * burgetrm@gmail.com + */ + +import org.bytedeco.javacv.*; +import org.bytedeco.javacpp.*; +import org.bytedeco.javacpp.indexer.*; + +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_highgui.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_video.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_highgui.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_video.*; + +public class OpticalFlowTracker { + private static final int MAX_CORNERS = 500; + private static final int win_size = 15; + + public static void main(String[] args) { + // Load two images and allocate other structures + Mat imgA = imread( + "image0.png", + IMREAD_GRAYSCALE); + Mat imgB = imread( + "image1.png", + IMREAD_GRAYSCALE); + + // Mat imgC = imread("OpticalFlow1.png", + // IMREAD_UNCHANGED); + Mat imgC = imread( + "image0.png", + IMREAD_UNCHANGED); + + // Get the features for tracking + Mat cornersA = new Mat(); + goodFeaturesToTrack(imgA, cornersA, MAX_CORNERS, + 0.05, 5.0, null, 3, false, 0.04); + + cornerSubPix(imgA, cornersA, + new Size(win_size, win_size), new Size(-1, -1), + new TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03)); + + // Call Lucas Kanade algorithm + Mat features_found = new Mat(); + Mat feature_errors = new Mat(); + + Mat cornersB = new Mat(); + calcOpticalFlowPyrLK(imgA, imgB, cornersA, cornersB, + features_found, feature_errors, new Size(win_size, win_size), 5, + new TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.3), 0, 1e-4); + + // Make an image of the results + FloatIndexer cornersAidx = cornersA.createIndexer(); + FloatIndexer cornersBidx = cornersB.createIndexer(); + UByteIndexer features_found_idx = features_found.createIndexer(); + FloatIndexer feature_errors_idx = feature_errors.createIndexer(); + for (int i = 0; i < cornersAidx.size(0); i++) { + if (features_found_idx.get(i) == 0 || feature_errors_idx.get(i) > 550) { + System.out.println("Error is " + feature_errors_idx.get(i) + "/n"); + continue; + } + System.out.println("Got it/n"); + Point p0 = new Point(Math.round(cornersAidx.get(i, 0)), + Math.round(cornersAidx.get(i, 1))); + Point p1 = new Point(Math.round(cornersBidx.get(i, 0)), + Math.round(cornersBidx.get(i, 1))); + line(imgC, p0, p1, RGB(255, 0, 0), + 2, 8, 0); + } + + imwrite( + "image0-1.png", + imgC); + namedWindow("LKpyr_OpticalFlow", 0); + imshow("LKpyr_OpticalFlow", imgC); + waitKey(0); + } +} diff --git a/samples/PacketRecorderTest.java b/samples/PacketRecorderTest.java index 62d1427a..d2d68d95 100644 --- a/samples/PacketRecorderTest.java +++ b/samples/PacketRecorderTest.java @@ -1,10 +1,9 @@ -package org.bytedeco.javacv; - -import org.bytedeco.javacpp.avcodec; - import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; +import org.bytedeco.javacv.*; + +import org.bytedeco.ffmpeg.avcodec.AVPacket; public class PacketRecorderTest { @@ -60,7 +59,7 @@ public static void packetRecord(String inputFile, String outputFile) throws Fram grabber.start(); recorder.start(grabber.getFormatContext()); - avcodec.AVPacket packet; + AVPacket packet; long t1 = System.currentTimeMillis(); while ((packet = grabber.grabPacket()) != null) { recorder.recordPacket(packet); diff --git a/samples/PerspectiveWarpDemo.java b/samples/PerspectiveWarpDemo.java index f9520b88..4bac1b91 100644 --- a/samples/PerspectiveWarpDemo.java +++ b/samples/PerspectiveWarpDemo.java @@ -2,10 +2,11 @@ import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.javacv.OpenCVFrameConverter; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; - +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; /** * Created by Johan Swanberg on 2018-09-21 diff --git a/samples/PrincipalComponentAnalysis.java b/samples/PrincipalComponentAnalysis.java index 795917ba..d95793a8 100644 --- a/samples/PrincipalComponentAnalysis.java +++ b/samples/PrincipalComponentAnalysis.java @@ -1,18 +1,19 @@ +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.ArrayList; +import javax.imageio.ImageIO; + import org.bytedeco.javacpp.indexer.DoubleIndexer; import org.bytedeco.javacpp.indexer.IntIndexer; -import org.bytedeco.javacpp.opencv_core.*; import org.bytedeco.javacpp.tools.Slf4jLogger; import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.javacv.Java2DFrameConverter; import org.bytedeco.javacv.OpenCVFrameConverter; -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; -import java.io.File; -import java.util.ArrayList; - -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; /** * PrincipalComponentAnalysis with JavaCV @@ -179,4 +180,4 @@ public static void printMat(Mat mat) { System.out.println("Depth: " + mat.depth()); } -} \ No newline at end of file +} diff --git a/samples/RLSA.java b/samples/RLSA.java index 3e6de1c5..0a8b5919 100644 --- a/samples/RLSA.java +++ b/samples/RLSA.java @@ -5,8 +5,10 @@ import org.bytedeco.javacv.Java2DFrameConverter; import org.bytedeco.javacv.OpenCVFrameConverter; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; /** * Based on "Implementation Run Length Smoothing Algorithm in C++": diff --git a/samples/RecordActivity.java b/samples/RecordActivity.java index 0acd733c..42e7be90 100644 --- a/samples/RecordActivity.java +++ b/samples/RecordActivity.java @@ -90,7 +90,7 @@ import java.util.Comparator; import java.util.List; -import org.bytedeco.javacpp.avutil; +import org.bytedeco.ffmpeg.global.avutil; import org.bytedeco.javacv.FFmpegFrameFilter; import org.bytedeco.javacv.FFmpegFrameRecorder; import org.bytedeco.javacv.Frame; @@ -228,19 +228,6 @@ private void initRecorder() { Log.w(LOG_TAG,"init recorder"); - if (RECORD_LENGTH > 0) { - imagesIndex = 0; - images = new Frame[RECORD_LENGTH * frameRate]; - timestamps = new long[images.length]; - for (int i = 0; i < images.length; i++) { - images[i] = new Frame(imageWidth, imageHeight, Frame.DEPTH_UBYTE, 2); - timestamps[i] = -1; - } - } else if (yuvImage == null) { - yuvImage = new Frame(imageWidth, imageHeight, Frame.DEPTH_UBYTE, 2); - Log.i(LOG_TAG, "create yuvImage"); - } - Log.i(LOG_TAG, "ffmpeg_url: " + ffmpeg_link); recorder = new FFmpegFrameRecorder(ffmpeg_link, imageWidth, imageHeight, 1); recorder.setFormat("flv"); @@ -250,12 +237,25 @@ private void initRecorder() { // The filterString is any ffmpeg filter. // Here is the link for a list: https://ffmpeg.org/ffmpeg-filters.html - filterString = "transpose=0"; + filterString = "transpose=2,crop=w=200:h=200:x=0:y=0"; filter = new FFmpegFrameFilter(filterString, imageWidth, imageHeight); //default format on android filter.setPixelFormat(avutil.AV_PIX_FMT_NV21); + if (RECORD_LENGTH > 0) { + imagesIndex = 0; + images = new Frame[RECORD_LENGTH * frameRate]; + timestamps = new long[images.length]; + for (int i = 0; i < images.length; i++) { + images[i] = new Frame(imageWidth, imageHeight, Frame.DEPTH_UBYTE, 2); + timestamps[i] = -1; + } + } else if (yuvImage == null) { + yuvImage = new Frame(imageWidth, imageHeight, Frame.DEPTH_UBYTE, 2); + Log.i(LOG_TAG, "create yuvImage"); + } + Log.i(LOG_TAG, "recorder initialize success"); audioRecordRunnable = new AudioRecordRunnable(); diff --git a/samples/Smoother.java b/samples/Smoother.java index 6bfae9d2..74f68699 100644 --- a/samples/Smoother.java +++ b/samples/Smoother.java @@ -20,9 +20,11 @@ * limitations under the License. */ -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; public class Smoother { public static void smooth(String filename) { diff --git a/samples/Square.java b/samples/Square.java index 4db17d4d..58651d90 100644 --- a/samples/Square.java +++ b/samples/Square.java @@ -3,9 +3,11 @@ import org.bytedeco.javacpp.*; import org.bytedeco.javacv.*; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; /** * I was unable to find the OpenCV squares.c translated into JavaCV, so this diff --git a/samples/TemplateMatching.java b/samples/TemplateMatching.java index 8b3754b8..de2c174b 100644 --- a/samples/TemplateMatching.java +++ b/samples/TemplateMatching.java @@ -1,18 +1,22 @@ -package matching; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; + import org.bytedeco.javacv.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.indexer.FloatIndexer; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_imgproc.*; -import static org.bytedeco.javacpp.opencv_highgui.*; -import static org.bytedeco.javacpp.opencv_imgcodecs.*; -import static org.bytedeco.javacpp.opencv_calib3d.*; -import static org.bytedeco.javacpp.opencv_objdetect.*; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ThreadLocalRandom; +import org.bytedeco.opencv.opencv_calib3d.*; +import org.bytedeco.opencv.opencv_core.*; +import org.bytedeco.opencv.opencv_highgui.*; +import org.bytedeco.opencv.opencv_imgproc.*; +import org.bytedeco.opencv.opencv_objdetect.*; +import static org.bytedeco.opencv.global.opencv_calib3d.*; +import static org.bytedeco.opencv.global.opencv_core.*; +import static org.bytedeco.opencv.global.opencv_highgui.*; +import static org.bytedeco.opencv.global.opencv_imgcodecs.*; +import static org.bytedeco.opencv.global.opencv_imgproc.*; +import static org.bytedeco.opencv.global.opencv_objdetect.*; /** * Example of template javacv (opencv) template matching using the last java build diff --git a/samples/WebcamAndMicrophoneCapture.java b/samples/WebcamAndMicrophoneCapture.java index 35f3513f..dd0e6b11 100644 --- a/samples/WebcamAndMicrophoneCapture.java +++ b/samples/WebcamAndMicrophoneCapture.java @@ -23,7 +23,7 @@ import javax.sound.sampled.Mixer; import javax.sound.sampled.TargetDataLine; -import org.bytedeco.javacpp.avcodec; +import org.bytedeco.ffmpeg.global.avcodec; import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.javacv.FFmpegFrameRecorder; import org.bytedeco.javacv.Frame; @@ -43,13 +43,13 @@ public class WebcamAndMicrophoneCapture public static void main(String[] args) throws Exception, org.bytedeco.javacv.FrameGrabber.Exception { - int captureWidth = 1280; - int captureHeight = 720; + final int captureWidth = 1280; + final int captureHeight = 720; // The available FrameGrabber classes include OpenCVFrameGrabber (opencv_videoio), - // DC1394FrameGrabber, FlyCaptureFrameGrabber, OpenKinectFrameGrabber, + // DC1394FrameGrabber, FlyCapture2FrameGrabber, OpenKinectFrameGrabber, // PS3EyeFrameGrabber, VideoInputFrameGrabber, and FFmpegFrameGrabber. - OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(WEBCAM_DEVICE_INDEX); + final OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(WEBCAM_DEVICE_INDEX); grabber.setImageWidth(captureWidth); grabber.setImageHeight(captureHeight); grabber.start(); @@ -62,7 +62,7 @@ public static void main(String[] args) throws Exception, org.bytedeco.javacv.Fra // imageWidth = width we specified for the grabber // imageHeight = height we specified for the grabber // audioChannels = 2, because we like stereo - FFmpegFrameRecorder recorder = new FFmpegFrameRecorder( + final FFmpegFrameRecorder recorder = new FFmpegFrameRecorder( "rtmp://my-streaming-server/app_name_here/instance_name/stream_name", captureWidth, captureHeight, 2); recorder.setInterleaved(true); @@ -125,16 +125,16 @@ public void run() // Open and start capturing audio // It's possible to have more control over the chosen audio device with this line: // TargetDataLine line = (TargetDataLine)mixer.getLine(dataLineInfo); - TargetDataLine line = (TargetDataLine)AudioSystem.getLine(dataLineInfo); + final TargetDataLine line = (TargetDataLine)AudioSystem.getLine(dataLineInfo); line.open(audioFormat); line.start(); - int sampleRate = (int) audioFormat.getSampleRate(); - int numChannels = audioFormat.getChannels(); + final int sampleRate = (int) audioFormat.getSampleRate(); + final int numChannels = audioFormat.getChannels(); // Let's initialize our audio buffer... - int audioBufferSize = sampleRate * numChannels; - byte[] audioBytes = new byte[audioBufferSize]; + final int audioBufferSize = sampleRate * numChannels; + final byte[] audioBytes = new byte[audioBufferSize]; // Using a ScheduledThreadPoolExecutor vs a while loop with // a Thread.sleep will allow @@ -188,7 +188,7 @@ public void run() }).start(); // A really nice hardware accelerated component for our preview... - CanvasFrame cFrame = new CanvasFrame("Capture Preview", CanvasFrame.getDefaultGamma() / grabber.getGamma()); + final CanvasFrame cFrame = new CanvasFrame("Capture Preview", CanvasFrame.getDefaultGamma() / grabber.getGamma()); Frame capturedFrame = null; diff --git a/samples/pom.xml b/samples/pom.xml new file mode 100644 index 00000000..dd0b9907 --- /dev/null +++ b/samples/pom.xml @@ -0,0 +1,32 @@ + + 4.0.0 + org.bytedeco.javacv + demo + 1.5-SNAPSHOT + + 1.7 + 1.7 + + + + org.bytedeco + javacv-platform + 1.5-SNAPSHOT + + + + . + + + maven-compiler-plugin + + + FaceApplet.java + FacePreview.java + RecordActivity.java + + + + + +