Accueil

Comment créer d'incroyables effets de webcam avec Java et le traitement

Added 2019-03-20


Le traitement est un outil puissant qui permet la création d’art par le code. C'est la combinaison d'une bibliothèque Java permettant de travailler avec des graphiques et d'un environnement de développement intégré (IDE) qui vous permet d'écrire et d'exécuter du code facilement.

De nombreux projets pour débutants graphiques et d'animation utilisent le traitement, mais il est également capable de manipuler la vidéo en direct.

Aujourd'hui, vous allez réaliser un diaporama vidéo en direct de différents effets contrôlés par la souris, à l'aide de la bibliothèque vidéo Processing. En plus de retourner la vidéo en direct, vous apprendrez à la redimensionner, la colorier et à la faire suivre le curseur de la souris.

Configuration du projet

Pour commencer, télécharger Traitement  et ouvrez un croquis vierge. Ce didacticiel est basé sur un système Windows, mais il devrait fonctionner sur n’importe quel ordinateur doté d’une webcam.

Un croquis de traitement vide

Vous devrez peut-être installer la bibliothèque Processing Video, accessible sous Esquisse>  Bibliothèque d'importation>  Ajouter une bibliothèque . Rechercher Vidéo  dans la zone de recherche et installez la bibliothèque à partir de La base de traitement .

En traitement's Library Manager
Une fois installé, vous êtes prêt à partir. Si vous voulez ignorer le codage, vous pouvez télécharger le croquis complet . Il est toutefois préférable de le fabriquer soi-même à partir de rien!

Utiliser une webcam avec traitement

Commençons par importer la bibliothèque et créer un installer  une fonction. Entrez les informations suivantes dans l'esquisse de traitement vide:


import processing.video. *;

Capture cam;

void setup(){
  taille (640 480);
  cam = nouvelle capture (this, 640, 480);
  cam.start ();
}

Après avoir importé la vidéothèque, vous créez un Capturer  instance appelée came  pour stocker les données de la webcam. Dans installer , la Taille  fonction met en place un 640 × 480  Fenêtre de taille pixel pour travailler.

La ligne suivante affecte came  à une nouvelle instance de Capturer , pour ce  esquisse, de la même taille que la fenêtre, avant de dire à la caméra de s’allumer avec cam.start () .

Ne vous inquiétez pas si vous ne comprenez pas toutes les parties pour le moment. En bref, nous avons demandé à Processing de créer une fenêtre, de trouver notre appareil photo et de l'allumer! Pour l'afficher nous avons besoin d'un dessiner  une fonction. Entrez ceci sous le code ci-dessus, en dehors des accolades.


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

le dessiner  la fonction s'appelle chaque image. Cela signifie que plusieurs fois par seconde, si  la caméra a des données disponible  vous lis  les données de celui-ci.

Ces données sont ensuite affichées sous forme de image , à la position 0, 0 , qui est en haut à gauche de la fenêtre.

Enregistrez votre croquis et appuyez sur le bouton de lecture en haut de l'écran.

Afficher la webcam en traitement

Succès! Les données stockées par came  est correctement imprimé à l'écran chaque image. Si vous rencontrez des problèmes, vérifiez soigneusement votre code. Java a besoin de tous les crochets et points-virgules au bon endroit! Le traitement peut également nécessiter quelques secondes pour accéder à la webcam. Si vous pensez que cela ne fonctionne pas, attendez quelques secondes après le lancement du script.

Retourner l'image

Maintenant que vous avez une image webcam en direct, laissez-la manipuler. Dans la fonction draw, remplacez image (came, 0,0);  avec ces deux lignes de code.


échelle (-1,1);
image (cam, -width, 0);

Enregistrez et réexécutez l'esquisse. Pouvez-vous voir la différence? En utilisant un négatif échelle  valeur, tous les X  les valeurs (les pixels horizontaux) sont maintenant inversées. Pour cette raison, nous devons utiliser la valeur négative de la fenêtre largeur  pour positionner l'image correctement.

Inverser l'image ne nécessite que quelques modifications mineures.


échelle (-1, -1);
image (cam, -width, -height);

Inverser la vidéo en direct avec Processing

Cette fois, les deux X  et y  les valeurs sont inversées, ce qui retourne l'image de la caméra en direct. Jusqu'ici, vous avez codé une image normale, une image inversée horizontalement et une image inversée verticalement. Mettons en place un moyen de passer d’un cycle à l’autre.

Faire le cycle

Au lieu de réécrire votre code à chaque fois, nous pouvons utiliser des nombres pour les parcourir. Créer un nouveau entier  en haut de votre code appelé commutateur .


import processing.video. *;

commutateur int = 0;
Capture cam;

Nous pouvons utiliser la valeur de switcher pour déterminer l’évolution de l’image de la caméra. Lorsque l’esquisse commence, vous lui attribuez une valeur de 0 . Nous pouvons maintenant utiliser la logique pour changer le sort de l’image. Mettez à jour votre dessiner  méthode pour ressembler à ceci:


void draw () {
  if (cam.available ()) {
    cam.read ();
  }

  si (sélecteur == 0) {
    image (came, 0,0);
  }
  sinon si (sélecteur == 1) {
    échelle (-1,1);
    image (cam, -width, 0);
  }
  sinon si (sélecteur == 2) {
    échelle (-1, -1);
    image (cam, -width, -height);
  }
  autre{
    println ("Switcher = 0 again");
    commutateur = 0;
  }
}

Utiliser la souris

Le traitement comporte des méthodes intégrées pour accéder à la souris. Pour détecter le moment où l'utilisateur clique sur la souris, ajoutez le mousePressed  fonctionne au bas de votre script.


void mousePressed () {
  commutateur ++;
}

Le traitement écoute tous les clics de souris et interrompt le programme pour qu'il exécute cette méthode lorsqu'il en détecte une. Chaque fois que la méthode est appelée, la valeur de switcher augmente d’une unité. Enregistrez et exécutez votre script.

Retourner la vidéo avec traitement

À présent, lorsque vous appuyez sur le bouton de la souris, les différentes orientations des vidéos sont passées en revue avant de revenir à l'original. Jusqu’à présent, vous venez d’inverser la vidéo, faisons maintenant quelque chose d’un peu plus intéressant.

Ajouter plus d'effets

Vidéo en direct quatre couleurs dans Processing

Vous allez maintenant coder un effet d'image en direct quadrichromie semblable aux œuvres d'art célèbres d'Andy Warhol. Ajouter plus d'effets est aussi simple que d'ajouter une autre clause à la logique. Ajoutez ceci à votre script entre le dernier sinon si  déclaration, et autre .


sinon si (sélecteur == 3) {
  teinte (256, 0, 0);
  image (came, 0, 0, largeur / 2, hauteur / 2);

  teinte (0, 256, 0);
  image (came, largeur / 2, 0, largeur / 2, hauteur / 2);

  teinte (0, 0, 256);
  image (came, 0, hauteur / 2, largeur / 2, hauteur / 2);

  teinte (256, 0, 256);
  image (came, largeur / 2, hauteur / 2, largeur / 2, hauteur / 2);
}

Ce code utilise le image  fonction pour créer quatre images de caméra distinctes dans chaque coin de l’écran et les rendre toutes demi-dimensionnées.

le teinte  Cette fonction ajoute de la couleur à chaque image de la caméra. Les chiffres entre parenthèses sont rouge, vert et bleu (RVB)  valeurs. Teinte colore tout le code suivant avec la couleur choisie.

Enregistrez et jouez pour voir le résultat. Essayez de changer les numéros RVB dans chaque teinte  fonction pour changer les couleurs!

Le faire suivre la souris

Enfin, faisons en sorte que l’image en direct suive la position de la souris à l’aide des fonctions utiles de la bibliothèque de traitement. Ajoutez ceci au-dessus du autre  une partie de votre logique.


sinon si (sélecteur == 4) {
  image (cam, mouseX, mouseY, width / 2, height / 2);
}

Ici, vous positionnez l’image de votre appareil photo à mouseX  et souris . Celles-ci sont intégrées dans les valeurs de traitement qui renvoient le pixel pointé par la souris.

C'est tout! Cinq variations de la vidéo en direct par le code. Toutefois, lorsque vous exécutez le code, vous remarquerez quelques problèmes.

Finition du code

Travailler, mais avec quelques problèmes

Le code que vous avez créé jusqu’à présent fonctionne, mais vous remarquerez deux problèmes. Tout d’abord, une fois que la variation à quatre couleurs apparaît, tout est ensuite teinté de violet. Deuxièmement, lorsque vous déplacez la vidéo avec la souris, cela laisse une trace. Vous pouvez résoudre ce problème en ajoutant quelques lignes en haut de la fonction de dessin.


void draw () {
  teinte (256,256,256);
  fond (0);

  // La fonction draw continue normalement ici!

Au début de chaque image, ce code réinitialise la couleur de teinte en blanc et ajoute une couleur d'arrière-plan noire pour arrêter la vidéo laissant des traces. Maintenant, lorsque vous testez le programme, tout fonctionne parfaitement!

Le croquis fini

Effets Webcame: Art From Code

Le traitement est très puissant, et vous pouvez l'utiliser pour faire beaucoup de choses. C’est une excellente plate-forme pour créer de l’art avec du code, mais elle convient également au contrôle de robots. !

Crédit d'image: Syda_Productions / Depositphotos






Nuage de tags

Choix de L'éditeur


Thomas Becket

Je suis un écrivain indépendant qui couvre la programmation et les logiciels.
Je suis étudiant en informatique et je m'intéresse à la programmation, aux logiciels et à la technologie
Gadgets technologiques et critiques 2019