<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?action=history&amp;feed=atom&amp;title=GMU%3ASensor_Hacklab%2FRachel_Smith%2FLink_to_processing_code</id>
	<title>GMU:Sensor Hacklab/Rachel Smith/Link to processing code - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?action=history&amp;feed=atom&amp;title=GMU%3ASensor_Hacklab%2FRachel_Smith%2FLink_to_processing_code"/>
	<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=GMU:Sensor_Hacklab/Rachel_Smith/Link_to_processing_code&amp;action=history"/>
	<updated>2026-08-31T07:58:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=GMU:Sensor_Hacklab/Rachel_Smith/Link_to_processing_code&amp;diff=83699&amp;oldid=prev</id>
		<title>Rachel: Created page with &quot;import gab.opencv.*; import processing.video.*; import java.awt.*; import processing.serial.*;  Serial myPort;  // Create object from Serial class  Capture video; OpenCV opencv; ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=GMU:Sensor_Hacklab/Rachel_Smith/Link_to_processing_code&amp;diff=83699&amp;oldid=prev"/>
		<updated>2016-06-10T12:58:05Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;import gab.opencv.*; import processing.video.*; import java.awt.*; import processing.serial.*;  Serial myPort;  // Create object from Serial class  Capture video; OpenCV opencv; ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;import gab.opencv.*;&lt;br /&gt;
import processing.video.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
import processing.serial.*;&lt;br /&gt;
&lt;br /&gt;
Serial myPort;  // Create object from Serial class&lt;br /&gt;
&lt;br /&gt;
Capture video;&lt;br /&gt;
OpenCV opencv;&lt;br /&gt;
color one;&lt;br /&gt;
color two;&lt;br /&gt;
color three;&lt;br /&gt;
color yes;&lt;br /&gt;
int trigger;&lt;br /&gt;
boolean selectMode = true;&lt;br /&gt;
boolean recording = false;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(640, 360);&lt;br /&gt;
   String portName = Serial.list()[1]; //set up for arduino&lt;br /&gt;
  myPort = new Serial(this, portName, 9600);&lt;br /&gt;
  video = new Capture(this, 640, 360);&lt;br /&gt;
  opencv = new OpenCV(this, 640, 360);&lt;br /&gt;
  opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);&lt;br /&gt;
  frameRate(30);&lt;br /&gt;
  video.start();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  &lt;br /&gt;
  //read the colour at the middle of the target&lt;br /&gt;
  &lt;br /&gt;
 color right = get(width-100, height/2);&lt;br /&gt;
 color left = get(150, height/2);&lt;br /&gt;
 color down = get(width/2, height - 100);&lt;br /&gt;
 &lt;br /&gt;
// println(red(right));&lt;br /&gt;
// println(green(left));&lt;br /&gt;
// println(blue(down));&lt;br /&gt;
 &lt;br /&gt;
    &lt;br /&gt;
  if (red(right)&amp;lt;=245 &amp;amp;&amp;amp; green(left) &amp;gt;245 &amp;amp;&amp;amp; blue(down) &amp;gt;245) {                            &lt;br /&gt;
  trigger = 10;  &lt;br /&gt;
  myPort.write(trigger);&lt;br /&gt;
  }   &lt;br /&gt;
  else if (green(left) &amp;lt;=245 &amp;amp;&amp;amp; red(right) &amp;gt;245  &amp;amp;&amp;amp; blue(down) &amp;gt;245) {&lt;br /&gt;
    trigger = 20;&lt;br /&gt;
    myPort.write(trigger);&lt;br /&gt;
  }&lt;br /&gt;
  else if (blue(down) &amp;lt;=245 &amp;amp;&amp;amp; green(left) &amp;gt;245 &amp;amp;&amp;amp; red(right) &amp;gt;245) {&lt;br /&gt;
    trigger = 30;&lt;br /&gt;
    myPort.write(trigger);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
println(trigger);&lt;br /&gt;
  &lt;br /&gt;
  //draw the &amp;#039;targets&amp;#039;&lt;br /&gt;
  &lt;br /&gt;
  //right&lt;br /&gt;
  fill(255, 0, 0);&lt;br /&gt;
  rect(width-100, height/2, 20, 20);&lt;br /&gt;
  &lt;br /&gt;
  //left&lt;br /&gt;
  fill(0, 255, 0);&lt;br /&gt;
  rect(150, height/2, 20, 20);&lt;br /&gt;
  &lt;br /&gt;
  //down&lt;br /&gt;
  fill(0, 0, 255);&lt;br /&gt;
  rect(width/2, height -100, 20, 20);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  if (selectMode) {&lt;br /&gt;
    //create mirror image and scale&lt;br /&gt;
    pushMatrix();&lt;br /&gt;
    scale(-1.5, 1.5);&lt;br /&gt;
    translate(40, -80);&lt;br /&gt;
    image(video, -width, 0, width, height);&lt;br /&gt;
    popMatrix();&lt;br /&gt;
    fill(#FAFC6B);&lt;br /&gt;
    rect(0, 25, 640, 20);&lt;br /&gt;
    fill(#212E9D);&lt;br /&gt;
    text(&amp;quot;Select three points on eye - hover mouse over and select using up, left and right. When finished, press down.&amp;quot;, 7, 40);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  //extract rgb vals from selected colours&lt;br /&gt;
  float r1 = red(one);&lt;br /&gt;
  float r2 = red(two);&lt;br /&gt;
  float r3 = red(three);&lt;br /&gt;
  float g1 = green(one);&lt;br /&gt;
  float g2 = green(two);&lt;br /&gt;
  float g3 = green(three);&lt;br /&gt;
  float b1 = blue(one);&lt;br /&gt;
  float b2 = blue(two);&lt;br /&gt;
  float b3 = blue(three);&lt;br /&gt;
&lt;br /&gt;
  //find max and min rgb vals&lt;br /&gt;
  float maxr = max(r1, r2, r3);&lt;br /&gt;
  float minr = min(r1, r2, r3);&lt;br /&gt;
  float maxg = max(g1, g2, g3);&lt;br /&gt;
  float ming = min(g1, g2, g3);&lt;br /&gt;
  float maxb = max(b1, b2, b3);&lt;br /&gt;
  float minb = min(b1, b2, b3);&lt;br /&gt;
&lt;br /&gt;
  noStroke();&lt;br /&gt;
  fill(#FAFC6B, 10);&lt;br /&gt;
  rect(0, 0, 640, 360);&lt;br /&gt;
&lt;br /&gt;
  opencv.loadImage(video);&lt;br /&gt;
  Rectangle[] faces = opencv.detect();&lt;br /&gt;
&lt;br /&gt;
  loadPixels();&lt;br /&gt;
  video.loadPixels();&lt;br /&gt;
  if (faces.length !=0) {&lt;br /&gt;
    for ( int i =0; i&amp;lt;faces.length; i++) {&lt;br /&gt;
&lt;br /&gt;
      //get colour information from cam&lt;br /&gt;
      color [] pxls = video.pixels;&lt;br /&gt;
      int count = 0;&lt;br /&gt;
      int xsum = 0;&lt;br /&gt;
      int ysum = 0;&lt;br /&gt;
&lt;br /&gt;
      //only use data within upper half of face&lt;br /&gt;
      for (int y = faces[i].y +int(0.15*(faces[i].y+faces[i].height)); y &amp;lt; faces[i].y+int(0.3*(faces[i].y+faces[i].height)); y++) {&lt;br /&gt;
        for (float x =faces[i].x+20; x&amp;lt; faces[i].x+faces[i].width-20; x++) {&lt;br /&gt;
          int loc = int(x + y*width);&lt;br /&gt;
          if (loc &amp;lt; pxls.length) {&lt;br /&gt;
            float r = red(pxls[loc]);&lt;br /&gt;
            float g = green(pxls[loc]);&lt;br /&gt;
            float b = blue(pxls[loc]);&lt;br /&gt;
            if ( r&amp;gt;minr &amp;amp;&amp;amp; r&amp;lt;maxr &amp;amp;&amp;amp; g &amp;gt;ming &amp;amp;&amp;amp; g&amp;lt;maxg &amp;amp;&amp;amp; b&amp;gt;minb &amp;amp;&amp;amp; b&amp;lt;maxb) {&lt;br /&gt;
&lt;br /&gt;
              // sum the values for x and y&lt;br /&gt;
              count = count + 1;&lt;br /&gt;
              xsum = xsum + int(x);&lt;br /&gt;
              ysum = ysum + y;&lt;br /&gt;
              //fill(r, g, b);&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      //draw ellipse at average point of eyes &lt;br /&gt;
      if (count !=0) {&lt;br /&gt;
        int xmean = xsum/count;&lt;br /&gt;
        int ymean = ysum/count;&lt;br /&gt;
&lt;br /&gt;
        translate(60, 0);&lt;br /&gt;
        fill(50, 50, 50);&lt;br /&gt;
        ellipse(width-xmean, ymean, 17, 17);&lt;br /&gt;
&lt;br /&gt;
       // println(xmean, ymean);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
    if (recording) {&lt;br /&gt;
&lt;br /&gt;
    saveFrame(&amp;quot;frames-#####.png&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void captureEvent(Capture c) {&lt;br /&gt;
  c.read();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//takes colour at mouse position&lt;br /&gt;
void keyPressed() {&lt;br /&gt;
  if (key == CODED) {&lt;br /&gt;
    if (keyCode == UP) {&lt;br /&gt;
      one = get(mouseX, mouseY);&lt;br /&gt;
      //creates visual feedback&lt;br /&gt;
      fill(#FAFC6B);&lt;br /&gt;
      ellipse(mouseX, mouseY, 10, 10);&lt;br /&gt;
    } &lt;br /&gt;
    else if (keyCode == LEFT) {&lt;br /&gt;
      two = get(mouseX, mouseY);&lt;br /&gt;
      fill(#FAFC6B);&lt;br /&gt;
      ellipse(mouseX, mouseY, 10, 10);&lt;br /&gt;
    } &lt;br /&gt;
    else if (keyCode == RIGHT) {&lt;br /&gt;
      three = get(mouseX, mouseY);&lt;br /&gt;
      fill(#FAFC6B);&lt;br /&gt;
      ellipse(mouseX, mouseY, 10, 10);&lt;br /&gt;
    }&lt;br /&gt;
    else if (keyCode == DOWN) {&lt;br /&gt;
      selectMode = !selectMode;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void mousePressed() {&lt;br /&gt;
  recording = !recording;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rachel</name></author>
	</entry>
</feed>