(Java)Membuat Motion WebCam JavaCV

Selamat pagi gan, dari kemaren sampe sekarang ane posting dengan tema images processing, so ane baru memahami konsep yang digunakan untuk beberapa project tersebut, Satu kata buat agan agan yang sangat senang dengan hal yang baru, “Cari lah apa yang ada tidak tau”, suatu saat pasti semuanya akan digunakan walaupun sekarang belum terfikirkan apa yang akan dibuat.

Motion Detection kata sederhananya manipulasi gambar yang ingin kita buat, Biasanya motion ini digunakan oleh beberapa vendor perusahaan di bidang Editing Foto, Seperti Photoshop, Gimp, Inkscape dan sebaginya.

        while (canvasFrame.isVisible() && (frame = grabber.grab()) != null) {
            cvSmooth(frame, frame, CV_GAUSSIAN, 9, 9, 2, 2);

Membuat canvas di belakang layar dengan dari frame yang kita buat

   if (image == null) {
                image = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
                cvCvtColor(frame, image, CV_RGB2GRAY);
            } else {
                prevImage = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
                prevImage = image;
                image = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
                cvCvtColor(frame, image, CV_RGB2GRAY);
            }
 if (diff == null) {
                diff = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
            }

Membaca ukuran foto dari panjang dan lebar yang akan di sesuaikan untuk frame.

  if (prevImage != null) {
                // perform ABS difference
                cvAbsDiff(image, prevImage, diff);
                // Memasukan manipulasi warna untuk motion yang di inginkan
                cvThreshold(diff, diff, 64, 255, CV_BGR2RGBA);

                canvasFrame.showImage(diff);

                // recognize contours
                CvSeq contour = new CvSeq(null);
                cvFindContours(diff, storage, contour, Loader.sizeof(CvContour.class), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);

                while (contour != null && !contour.isNull()) {
                    if (contour.elem_size() > 0) {
                        CvBox2D box = cvMinAreaRect2(contour, storage);
                        // test intersection
                        if (box != null) {
                            CvPoint2D32f center = box.center();
                            CvSize2D32f size = box.size();

                        }
                    }
                    contour = contour.h_next();
                }
            }
        }
        grabber.stop();
        canvasFrame.dispose();

Disini tempat dimana Proses mengubahan gambar dari webcam yang sebenarnya menjadi warna yang agar ke hitam hitaman

Kode Lengkapnya :

 /* 
 * I developed some code for recognize motion detections with JavaCV.
 * Actually, it works with an array of Rect, performing, every cicle, an
 * intersection test with area of difference with the rect of interests
 * (this array is callad "sa", stands for SizedArea). I hope could this
 * helps someone.
 * 
 * Feel free to ask about any question regarding the code above, cheers!
 *
 * Angelo Marchesin 
 */
package sample;
import com.googlecode.javacpp.Loader;
import com.googlecode.javacv.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_calib3d.*;
import static com.googlecode.javacv.cpp.opencv_objdetect.*;

public class MotionDetector {
    public static void main(String[] args) throws Exception {
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        grabber.start();

        IplImage frame = grabber.grab();
        IplImage image = null;
        IplImage prevImage = null;
        IplImage diff = null;

        CanvasFrame canvasFrame = new CanvasFrame("Motion Deteksi");
        canvasFrame.setCanvasSize(frame.width(), frame.height());

        CvMemStorage storage = CvMemStorage.create();

        while (canvasFrame.isVisible() && (frame = grabber.grab()) != null) {
            cvSmooth(frame, frame, CV_GAUSSIAN, 9, 9, 2, 2);
            if (image == null) {
                image = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
                cvCvtColor(frame, image, CV_RGB2GRAY);
            } else {
                prevImage = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
                prevImage = image;
                image = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
                cvCvtColor(frame, image, CV_RGB2GRAY);
            }

            if (diff == null) {
                diff = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
            }

            if (prevImage != null) {
                // perform ABS difference
                cvAbsDiff(image, prevImage, diff);
                // Memasukan manipulasi warna untuk motion yang di inginkan
                cvThreshold(diff, diff, 64, 255, CV_BGR2RGBA);

                canvasFrame.showImage(diff);

                // recognize contours
                CvSeq contour = new CvSeq(null);
                cvFindContours(diff, storage, contour, Loader.sizeof(CvContour.class), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);

                while (contour != null && !contour.isNull()) {
                    if (contour.elem_size() > 0) {
                        CvBox2D box = cvMinAreaRect2(contour, storage);
                        // test intersection
                        if (box != null) {
                            CvPoint2D32f center = box.center();
                            CvSize2D32f size = box.size();

                        }
                    }
                    contour = contour.h_next();
                }
            }
        }
        grabber.stop();
        canvasFrame.dispose();
    }
}

6-8-2014 3-03-36 PM

(Java)Object Tracking Warna _ Mendeteksi Object dan menggambar

 package tracking;

import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;
import static com.googlecode.javacv.cpp.opencv_core.cvCreateImage;
import static com.googlecode.javacv.cpp.opencv_core.cvFlip;
import static com.googlecode.javacv.cpp.opencv_core.cvGetSize;
import static com.googlecode.javacv.cpp.opencv_core.cvInRangeS;
import static com.googlecode.javacv.cpp.opencv_core.cvScalar;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_BGR2GRAY;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_MEDIAN;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvCvtColor;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvEqualizeHist;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvGetCentralMoment;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvGetSpatialMoment;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvMoments;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvSmooth;
import static com.googlecode.javacv.cpp.opencv_highgui.*;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;

import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FrameGrabber;
import com.googlecode.javacv.VideoInputFrameGrabber;
import com.googlecode.javacv.cpp.opencv_core.CvScalar;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import com.googlecode.javacv.cpp.opencv_imgproc.CvMoments;

public class ColorObjectTracking implements Runnable {
    final int INTERVAL = 1000;// 1sec
    final int CAMERA_NUM = 0; // Default camera for this time

    /**
     * Correct the color range- it depends upon the object, camera quality,
     * environment.
     */
    static CvScalar rgba_min = cvScalar(0, 0, 130, 0);// RED wide dabur birko
    static CvScalar rgba_max = cvScalar(80, 80, 255, 0);

    IplImage image;
    CanvasFrame canvas = new CanvasFrame("Web Cam Live");
    CanvasFrame path = new CanvasFrame("Detection");
    int ii = 0;
    JPanel jp = new JPanel();

    public ColorObjectTracking() {
        canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
        path.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
        path.setContentPane(jp);
    }

    public void run() {
        FrameGrabber grabber = new VideoInputFrameGrabber(CAMERA_NUM);
        try {
            grabber.start();
            IplImage img;
            int posX = 0;
            int posY = 0;
            while (true) {
                img = grabber.grab();
                if (img != null) {
                    // show image on window
                    cvFlip(img, img, 1);// l-r = 90_degrees_steps_anti_clockwise
                    canvas.showImage(img);
                    IplImage detectThrs = getThresholdImage(img);

                    CvMoments moments = new CvMoments();
                    cvMoments(detectThrs, moments, 1);
                    double mom10 = cvGetSpatialMoment(moments, 1, 0);
                    double mom01 = cvGetSpatialMoment(moments, 0, 1);
                    double area = cvGetCentralMoment(moments, 0, 0);
                    posX = (int) (mom10 / area);
                    posY = (int) (mom01 / area);
                    // only if its a valid position
                    if (posX > 0 && posY > 0) {
                        paint(img, posX, posY);
                    }
                }
                // Thread.sleep(INTERVAL);
            }
        } catch (Exception e) {
        }
    }

    private void paint(IplImage img, int posX, int posY) {
        Graphics g = jp.getGraphics();
        path.setSize(img.width(), img.height());
        // g.clearRect(0, 0, img.width(), img.height());
        g.setColor(Color.RED); // 
        // g.fillOval(posX, posY, 20, 20);
        g.drawOval(posX, posY, 20, 20);
        System.out.println(posX + " , " + posY);

    }

    private IplImage getThresholdImage(IplImage orgImg) {
        IplImage imgThreshold = cvCreateImage(cvGetSize(orgImg), 8, 1);
        //
        cvInRangeS(orgImg, rgba_min, rgba_max, imgThreshold);// red

        cvSmooth(imgThreshold, imgThreshold, CV_MEDIAN, 15);
        cvSaveImage(++ii + "E:\\a.jpg", imgThreshold);
        return imgThreshold;
    }

    public static void main(String[] args) {
    	ColorObjectTracking cot = new ColorObjectTracking();
        Thread th = new Thread(cot);
        th.start();
    }

    public IplImage Equalize(BufferedImage bufferedimg) {
        IplImage iploriginal = IplImage.createFrom(bufferedimg);
        IplImage srcimg = IplImage.create(iploriginal.width(), iploriginal.height(), IPL_DEPTH_8U, 1);
        IplImage destimg = IplImage.create(iploriginal.width(), iploriginal.height(), IPL_DEPTH_8U, 1);
        cvCvtColor(iploriginal, srcimg, CV_BGR2GRAY);
        cvEqualizeHist(srcimg, destimg);
        return destimg;
    }
}

Referensi
http://opencv.org/

(Java)Deteksi Wajah menggunakan OpenCV

Face Detctio

 package processing;
import gab.opencv.*;

import java.awt.Rectangle;

import processing.core.PApplet;

public class facedetection extends PApplet{
	OpenCV opencv;
	Rectangle[] faces;
	
	//membuat panjang dan lebar diambil dari ukuran gambar
	public void setup() {
		  opencv = new OpenCV(this, "test1.jpg");
		  size(opencv.width, opencv.height);

		  opencv.loadCascade("C:\\Users\\Jarod OD\\Downloads\\haarcascade_frontalface_alt.xml");  
		  faces = opencv.detect();
		}

		
		public void draw() {
		  image(opencv.getInput(), 0, 0);

		  noFill();
		  stroke(0, 255, 0);
		  strokeWeight(3);
		  for (int i = 0; i < faces.length; i++) {
		    rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
		  }
		}

}

https://www.dropbox.com/sm/create/Java/FaceDetection.rar

Java™ SE Development Kit 8 … Apa sih yang baru..??

duke

Siang agan.. baru sempet browsing apa yang baru dari JDK 8, dan teknologi apa lagi yang ditanam di JDK 8.. ini dia..

– Lambda expressions, fitur bahasa baru, memungkinkan Anda untuk menggunakan function sebagai argumen method, atau code sebagai data.

– Perangkat penting lainnya dan perubahan bahasa JAVA dan library standar telah ditambahkan, termasuk method default, paket java.util.stream yang baru, dan Date-Time API.

– Compact Profiles mengandung subset standar dari platform Java SE dan memungkinkan aplikasi yang tidak memerlukan seluruh platform yang akan digunakan dan dijalankan pada perangkat kecil.

– Peningkatan keamanan termasuk update ke Java Cryptography Architecture; limited doPrivileged, mekanisme yang memungkinkan kode untuk menegaskan bagian dari hak-hak istimewanya; SSL/TLS Server Name Indication (SNI) Extension; dan perangkat tambahan keystore.

– Dokumentasi JavaFX telah diperbarui untuk rilis ini.
– Sebuah mesin JavaScript baru, Nashorn, termasuk di dalam JDK 8.
– Java Mission Control 5.3 termasuk dalam JDK 8.

Refensi :
http://www.oracle.com/technetwork/java/javase/8train-relnotes-latest-2153846.html

http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/

(Java)Example Processing Sketch

Create Canvas dengan ukuran 700 500

 	public void setup() {
		size(700,500);
		// Initialize all "stripes"
		for (int i = 0; i < stripes.length; i++) {
			stripes[i] = new Stripe(this);
		}
	}

Create backgroud berjalan dengan warna yang kita inginkan dengan 500000 (Hijau)

public void draw() {
		background(500000);
		// Move and display all "stripes"
		for (int i = 0; i < stripes.length; i++) {
			stripes[i].move();
			stripes[i].display();
		}
	} 

Full Code

 import processing.core.*;

public class MyProcessingSketch extends PApplet {
//	An array of stripes
	Stripe[] stripes = new Stripe[50];

	public void setup() {
		size(700,500);
		// Initialize all "stripes"
		for (int i = 0; i < stripes.length; i++) {
			stripes[i] = new Stripe(this);
		}
	}

	public void draw() {
		background(500000);
		// Move and display all "stripes"
		for (int i = 0; i < stripes.length; i++) {
			stripes[i].move();
			stripes[i].display();
		}
	}
}

Run
5-12-2014 5-49-51 AM

(Java)Example OpenCV Create Manipulasi Canvas dengan Mouse XY

Kita akan membuat Canvas yang kita inginkan dari ukuran panjang dan lebar dengan memasukkan warna HSB dimana kita menggunakan warna yang berurutan sehingga seperti pelangi..

 	public void setup() 
	{
	  size(640, 360);
	  colorMode(HSB, height, height, height);  
	  noStroke();
	  background(0);
	}

Mendeteksi Mouse Curcors

 public void draw() 
	{
	  int whichBar = mouseX / barWidth;
	  if (whichBar != lastBar) {
	    int barX = whichBar * barWidth;
	    fill(mouseY, height, height);
	    rect(barX, 0, barWidth, height);
	    lastBar = whichBar;
	  }
	}

Full Code

import processing.*;
import processing.core.PApplet;
public class A extends PApplet{
	int barWidth = 20;
	int lastBar = -1;

	public void setup() 
	{
	  size(640, 360);
	  colorMode(HSB, height, height, height);  
	  noStroke();
	  background(0);
	}

	public void draw() 
	{
	  int whichBar = mouseX / barWidth;
	  if (whichBar != lastBar) {
	    int barX = whichBar * barWidth;
	    fill(mouseY, height, height);
	    rect(barX, 0, barWidth, height);
	    lastBar = whichBar;
	  }
	}
}
 

Run
5-12-2014 5-22-31 AM

(Java) Library Images Processing _ Xuggle,OpenCV,Processing

xuggle-logo

Salam Smart Agan Agan, sudah lama kita tidak berbincang bincang dengan ane yang super cool dan makin cool, geeerrrrr….. ane fakum di blog ini sudah agak lama ya gan, “Bukan agak lama !!! emang lama”, 3 bulan deh kayaknya ane meniggalkan blog ini, Tau gak gan,,,” ANE GALAU”.. Ech bukan galau karena cinta,perasaan,sedih atau apa. Ane galau skripsi gan, dan beberapa project yang memusingkan kepala termasuk mengenai tema ini… Images Processing, coba siapa yang gak pusing denga namanya Vector, Canvas, Editor Code… wah wah… bisa gila ya kalo di pikirin, tapi gak sesadis itu gan, semuanya bisa kita selesaikan kalau kita niat…

Xuggle merupakan sekumpulan team hebat dan luar biasa, menciptakan sebuah karya yang nyata di depan mata.. “Promosi dikitt…!!!” Xuggler sebenarnya sederhanagan, sebuah library yang diciptakan sama team xuggler yang dapat kita gunakan untuk menyelesaikan sebuah project mengenai Gambar, ane sudah satu bulan bergelut dengan library ini, ane kasih 4 jempol termasuk jempol kaki, dengan library ini kita dapat menciptakan aplikasi photoshop itu lo, wehh kok bisa gan..!! ya lah… kan xugller itu luarbiasa bisa memanipulasi kehidupan yang nyata menjadi tidak nyata hheee…