Lektion 5
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_1,
Blobs_2,
Blobs_3