import java.awt.Robot; import java.awt.event.KeyEvent; import processing.video.*; Robot robot; boolean robotOK = false; Capture cam; long lastCapture = 0; boolean readyToProcess = false; int warmupFrames = 0; int pos = 25; int greenx; int greeny; char symbol = ' '; int symbolx, symboly; PImage photo; int k; float r, g, b; int x, y, maxx, maxy, minx, miny, centerx, centery; int kx[] ={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int ky[] ={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; char ks[] ={ 'A', 'E', 'I', 'O', 'Y', 'B', 'C', 'D', 'H', 'G', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'Z'}; int keysize = 112; int bluex, bluey; boolean redFound = false; boolean blueFound = false; boolean greenFound = false; boolean setupOK = false; void setup() { size(640, 480); symbolx = 25; symboly= 70; try { robot = new Robot(); robotOK = true; } catch (Exception e) { e.printStackTrace(); } String[] cameras = Capture.list(); if (cameras.length == 0) { println("There are no cameras available for capture."); exit(); } else { println("Available cameras:"); for (int i = 0; i < cameras.length; i++) println(cameras[i]); } cam = new Capture(this, cameras[0]); // edo htan cameras[8] alla ebgaze erroropote mallon einai to 1 cam.start(); } void draw() { if (millis() - lastCapture >= 5000) { lastCapture = millis(); if (readyToProcess) { readyToProcess = false; photo = cam.get(); image(photo, 0, 0); photo.loadPixels(); if (!setupOK) { blueFound = false; findBluePoint(); findgreenPoint(); createKeyboard(); //displayKeyboard(); setupOK = true; } redFound = false; symbol=' '; findRedPoint(); findSymbol(); println("SYMBOL: ", symbol); printSymbol(); if (symbol == ' ') symbol = '\n'; if (robotOK) sendKey(symbol); } // endif readyToProcess } // endif 5 sec } void printSymbol() { fill(0); textSize(50); text(symbol, pos, 70); pos = pos + 35; } void mousePressed() { k = mouseY * width + mouseX + 1; r = red(photo.pixels[k]); g = green(photo.pixels[k]); b = blue(photo.pixels[k]); println("red:", r); println("green:", g); println("blue:", b); println(mouseX, "-", mouseY); } void findRedPoint() { maxx = -1; maxy = -1; minx = height+1; miny = width+1; for (y=0; y60 && b<40 && g<40) // αν το pixel είναι κόκκινο { if (x>maxx) maxx = x; // από που μέχρι που στον άξονα x if (xmaxy) maxy = y; // υπάρχει κόκκινο χρώμα (όχι συνεχόμενα) if (y100 && g<90) // αν το pixel είναι κόκκινο { if (x>maxx) maxx = x; // από που μέχρι που στον άξονα x if (xmaxy) maxy = y; // υπάρχει κόκκινο χρώμα (όχι συνεχόμενα) if (y100) // αν το pixel είναι κόκκινο { if (x>maxx) maxx = x; // από που μέχρι που στον άξονα x if (xmaxy) maxy = y; // υπάρχει κόκκινο χρώμα (όχι συνεχόμενα) if (y kx[i] && centerx < kx[i] + keysize && centery > ky[i] && centery < ky[i] + keysize ) symbol = ks[i]; } } void sendKey(char k) { int code = KeyEvent.getExtendedKeyCodeForChar(k); robot.keyPress(code); robot.keyRelease(code); } void captureEvent(Capture c) { c.read(); readyToProcess = true; if (warmupFrames < 2) { readyToProcess = false; warmupFrames++; } } void displayKeyboard() { for (int i=0; i<=19; i++ ) println("X: ", kx[i], " Y: ", ky[i], " SYMBOL: ", ks[i]); }