Processing/JS

Vídeo

Es necesario tener instalado el QuickTime y el los ordenadores con SO windows es necesario instalar VDIG
http://www.eden.net.nz/7/20071008/

Primeros pasos.

Leer y mostrar una imagen capturada desde una cámara, con capture, usaremos capture.list () para mostrar los nombres de los dispositivos conectados.

import processing.video.*;
Capture cam;

void setup() {
size(640, 480);

String[] cameras = Capture.list();

if (cameras.length == 0) {
println("No hay cámara disponible");
exit();
} else {
println("Cámara disponible");
for (int i = 0; i < cameras.length; i++) {
println(cameras[i]);
}

// Puede usarse una de las cámaras inicializando directamente llamando u a un elemento del array list():
cam = new Capture(this, cameras[0]);
cam.start();
}
}

void draw() {
if (cam.available() == true) {
cam.read();
}
image(cam, 0, 0);
// puede escribirse también como:
//set(0, 0, cam);
// si no usamos manipulación de la imagen o tint.-
}

 

Clase: Capture
tiene los,siguientes métodos:

available() Devuelve "true" cuando cuando nuevo frame del vídeo estaría disponible
start() Comienza a capturar frames del dispositivo seleccionado
stop() parar la captura
read() Leer el frame actual
list() lista de los dispositivos de captura disponibles

Nombre:  read()

Ejemplo

import processing.video.*;
Capture cam;

void setup() {
size(200, 200);
cam = new Capture(this);
cam.start();
}

void draw() {
if (cam.available()) {
// Reads the new frame
cam.read();
}
image(cam, 0, 0);
}

Descripción: Lee el el frame actual.

Sintaxis:
cam.read()

Parámetros :       
cam        Variable del tipo de Capture

 

Nombre:  available()

Ejemplo

import processing.video.*;
Capture cam;


void setup() {
size(200, 200);
cam = new Capture(this);
cam.start();
}

void draw() {
if (cam.available()) {
// Reads the new frame
cam.read();
}
image(cam, 0, 0);
}

Descripción: Devuelve "true" cuando un Nuevo frame está disponible para ser leído.

Sintaxis:
vid.read()

Parámetros :       
mov        Variable del tipo de Capture

Nombre list()

Ejemplo:

import processing.video.*;
Capture cam;
void setup() {
size(640, 480);
String[] cameras = Capture.list();
if (cameras.length == 0) {
println("No hay cámaras disponibles.");
exit();
} else {
println("Cámaras disponibles:");
for (int i = 0; i < cameras.length; i++) {
println(cameras[i]);
}
}
}

Sintaxis: .list()

Devuelve String[]

Nombre start() stop()

import processing.video.*;
Capture cam;

void setup() {
size(200, 200);
cam = new Capture(this);
cam.start();
}

void draw() {
if (cam.available()) {
// Reads the new frame
cam.read();
}
image(cam, 0, 0);
}

void mousePressed() {
cam.stop();
}

Sintaxis: .list() .stop()

Devuelve void

Play()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
myMovie = new Movie(this, "ozone.mov");
myMovie.play();
}

void draw() {
image(myMovie, 0, 0);
}

void movieEvent(Movie m) {
m.read();
}

play(), pone en play la película y para en el último frame

pause()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
background(0);
myMovie = new Movie(this, "totoro.mov");
myMovie.loop();
}

void draw() {
background(255);
image(myMovie, 0, 0);
}

void movieEvent(Movie m) {
m.read();
}

void mousePressed() {
myMovie.pause();
}

void mouseReleased() {
myMovie.play();
}

con pause() se para la película y con play() continuara donde se ha parado

stop()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
background(0);
myMovie = new Movie(this, "totoro.mov");
myMovie.play();
}

void draw() {
background(255);
image(myMovie, 0, 0);
}

void movieEvent(Movie m) {
m.read();
}

// Se para la película al presionar
void mousePressed() {
myMovie.stop();
}

con stop() se para la película y con play() la película empezará en el inicio.

loop()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
myMovie = new Movie(this, "ozone.mov");
myMovie.loop();
}

void draw() {
image(myMovie, 0, 0);
}

void movieEvent(Movie m) {
m.read();
}

La película comienza de nuevo cuando termina.

noLoop()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
myMovie = new Movie(this, "ozone.mov");
myMovie.loop();
}

void draw() {
image(myMovie, 0, 0);
}

void movieEvent(Movie m) {
m.read();
}

void mousePressed() {
myMovie.noLoop();
}

Con noLoop() se para la película al terminar, en el último frame

jump()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
frameRate(30);
myMovie = new Movie(this, "totoro.mov");
myMovie.loop();
}

void draw() {
if (myMovie.available()) {
myMovie.read();
}
image(myMovie, 0, 0);
}

void mousePressed() {
myMovie.jump(random(myMovie.duration()));
}

Con .jump(where) salta la película a una posición determinada en segundos de la película.

duration()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
frameRate(30);
myMovie = new Movie(this, "totoro.mov");
// Prints the duration of the movie
println(myMovie.duration());
myMovie.play();
}

void draw() {
if (myMovie.available()) {
myMovie.read();
}
image(myMovie, 0, 0);
}

.duration() devuelve la longitud de la película en segundos. Si la película dura 1 minuto y 20 segundos el valor que se devuelve es de 80.0.

time()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
frameRate(30);
myMovie = new Movie(this, "totoro.mov");
myMovie.loop();
}

void draw() {
background(255);
if (myMovie.available()) {
myMovie.read();
}
image(myMovie, 0, 0);
// Draws a line on the screen
// when the movie half-finished
float md = myMovie.duration();
float mt = myMovie.time();
if (mt > md/2.0) {
line(0, 0, width, height);
}
}

.time() devuelve la localización del punto de lectura de la película.

speed()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
frameRate(30);
myMovie = new Movie(this, "totoro.mov");
myMovie.speed(4.0);
myMovie.loop();
}

void draw() {
if (myMovie.available()) {
myMovie.read();
}
image(myMovie, 0, 0);
}

.speed(irate) describe la velocidad de reproducción de la película. Con un valor 2 la película se reproducira al doble de velocidad, con 0.5 será a la mitad de la velocidad, y con -1 la película se ejecuta al revés a velocidad normal.

frameRate()

import processing.video.*;
Movie myMovie;

void setup() {
size(200, 200);
frameRate(30);
myMovie = new Movie(this, "totoro.mov");
myMovie.frameRate(2);
myMovie.loop();
}

void draw() {
if (myMovie.available()) {
myMovie.read();
}
image(myMovie, 0, 0);
}

.frameRate(ifps) Número de frame por segundos

Detectar cámaras disponibles

import processing.video.*;
Capture cam;

void setup() {
size(640, 480);
String[] cameras = Capture.list();
if (cameras.length == 0) {
println("no hay cámara disponible.");
exit();
} else {
println("Cámaras disponibles:");
for (int i = 0; i < cameras.length; i++) {
println(cameras[i]);
}
// La cámara se inicializa con un elemento de la lista de disponibles
cam = new Capture(this, cameras[0]);
cam.start();
}
}
void draw() {
if (cam.available() == true) {
cam.read();
}
image(cam, 0, 0);
}