Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Processing 07 (26.02.2013)

OpenCV

OpenCV ist die Open Source Computer Vision Library von Intel und ist weit verbreitet. Die OpenCV Bibliothek für Processing benutzt Verson 1.0. Aktuell ist die Version 2.1. In der Procesing Bibliothek sind nur grundlegende Operationen wie Gesichtsdetektierung und Blobtracking enthalten.

OpenCV HAAR cascade Files

Ein Haar Cascade File beschreibt die zu suchenden Merkmale in einem Bild. Von der Struktur her ist es ein XML Dokument mit Konstanten.  Info siehe auch: HFG Gmünd Diplom Patrick Gentzcke Bei der Installation von OpenCV für Processing werden ein paar Standard HAAR cascade Files installiert. Wer noch weitere solcher Dokumente dazu installieren will, folge dieser Anleitung:
  • Haar cascade files auf die Festplatte laden, entpacken und in den /data Ordner des Processing Sketches kopieren. Siehe unten für eine Auflistung der Haar cascades.
  • Im Sketch mit folgenden Befehlen das Haar cascade file laden: String path = opencv.absolutePath(“haarcascade_mcs_righteye.xml”); opencv.cascade( path ); Siehe Beispiel CVload_haar
Die Haar cascade Liste: haarcascade_eye_tree_eyeglasses.xml haarcascade_eye.xml haarcascade_frontalface_alt_tree.xml haarcascade_frontalface_alt.xml haarcascade_frontalface_alt2.xml haarcascade_frontalface_default.xml haarcascade_fullbody.xml haarcascade_lefteye_2splits.xml haarcascade_lowerbody.xml haarcascade_mcs_eyepair_big.xml haarcascade_mcs_eyepair_small.xml haarcascade_mcs_lefteye.xml haarcascade_mcs_mouth.xml haarcascade_mcs_nose.xml haarcascade_mcs_righteye.xml haarcascade_mcs_upperbody.xml haarcascade_profileface.xml haarcascade_righteye_2splits.xml haarcascade_upperbody.xml

Beispiel

import java.awt.*;        
import processing.video.*;  // Camera capture
import hypermedia.video.*;  // OpenCV


OpenCV opencv;

// contrast/brightness values
int contrast_value    = 0;
int brightness_value  = 0;

Capture video;

void setup() 
{
    size(640,480);
    
    // init OpenCV    
    opencv = new OpenCV( this );
    // set image buffer size
    opencv.allocate(width,height);     
   
    // setup cascade mode
    opencv.cascade( dataPath("haarcascade/haarcascade_frontalface_alt.xml"));  

    // start camera capturing
//    video = new Capture(this, width,height,"/dev/video1");  // linux
    video = new Capture(this, width,height);
    video.start();

    // print usage
    println( "Drag mouse on X-axis inside this sketch window to change contrast" );
    println( "Drag mouse on Y-axis inside this sketch window to change brightness" );
}

public void stop() 
{
    opencv.stop();
    super.stop();
}

void draw() 
{
    if(!video.available()) 
     return;
     
    video.read();
    
    // copy the cam image to OpenCV
    opencv.copy(video);
   
    // convert to gray
    opencv.convert( GRAY );
    // change contrast
    opencv.contrast( contrast_value );
    // change brightness
    opencv.brightness( brightness_value );

    // detect face
    Rectangle[] faces = opencv.detect( 1.2, 2, OpenCV.HAAR_DO_CANNY_PRUNING, 40, 40 );
   // Rectangle[] faces = opencv.detect();

    // display the image
    image( opencv.image(), 0, 0 );

    // proceed detection    
    // draw face area(s)    
    noFill();
    stroke(255,0,0);
    for( int i=0; i<faces.length; i++ ) 
      rect( faces[i].x, faces[i].y, faces[i].width, faces[i].height ); 
}

void mouseDragged() 
{
    contrast_value   = (int) map( mouseX, 0, width, -128, 128 );
    brightness_value = (int) map( mouseY, 0, width, -128, 128 );
}

FaceCap

Video Capture mit OpenCV

Das Video Capture Objekt der Processing Video Library haben wir schon kennen gelernt. Grundsätzlich hat OpenCV ein eigenes Capture Objekt, welches aber nicht viele Kameras erkennt. Die im Mac eingebaute iSight wird unterstützt. Siehe Beispiel CViSight → Für die Beispiele unten, installiere den Kameratreiber für die Playstation Eye Für die Benutzung einer externen Kamera wie z.B. die Playstation Eye verwenden wir weiterhin das Video Capture Objekt und kopieren anschliessend das Video Bild ins OpenCV Objekt, damit darin das Tracking ausgeführt werden kann. Siehe Beispiel CVcapture.

Video Devices

Sind mehrere Video Kameras angeschlossen (z.B. eingebaute iSight und externe PSP Eye) wird default die iSight ausgewählt. Um eine alternative Kamera auszuwählen können mit Capture.list() alle verfügbaren Devices ausgegeben werden und anschliessend das entsprechende Device ausgewält werden. Beispiel Device_Check

CV Face Detection

Face Detection für die im Mac eingebaute Isight und die Playstation Eye Weitere Haarcascades

CV Blob Tracking

Sogenanntes Blob Tracking erkennt Umrisse von Objekten. Aus diesen Umrissen lassen sich Werte wie das Zentrum, der Umfang, sowie die Fläche in Pixel berechnen. Anbei drei Code Beispiele Blobs_1Blobs_2Blobs_3