IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Aide projet sur Processing


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut Aide projet sur Processing
    Bonjour à tous, je suis membre d'un groupe de 5 étudiants en terminale scientifique spécialité sciences de l'ingénieur, nous avons à réaliser le projet suivant avant la fin de l'année : Un club de tir nous a sollicité afin de créer un prototype de lunette de visée pour malvoyant car ce n'est actuellement plus produit et commercialisé. Après plusieurs pistes écartés, voici comment nous voulons procéder : une caméra est placée vers la cible, un laser est placé sur la lunette et dirigé vers la cible, en fonction de l'endroit où se trouve le laser sur la cible un son est émis dans un casque porté par le tireur. Je passe pour les détails techniques qui n'ont pas de rapport avec notre problème.

    Voici ce que nous avons fait sur Processing :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import processing.video.*;
     
     
    Capture cam;
     
    void setup() {
      size(640, 480);
     
     
      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]);
        }
     
        // The camera can be initialized directly using an 
        // element from the array returned by list():
        cam = new Capture(this, cameras[0]);
        cam.start();     
      }      
    }
     
    void draw() {
      if (cam.available() == true) {
        cam.read();
     
     
      }
      image(cam, 0, 0);
     
      color a = get(100,100);
    float c = red(a);
    float d = blue(a);
    float e = green(a);
     
     
     
    println(c);
     
    if (c > 230) {
     
    println("Rouge détecté");
        }
     
     
    //println(couleur_image);
    fill(255,255,255); 
    ellipse(100, 100, 10, 10);
     
      // The following does the same, and is faster when just drawing the image
      // without any additional resizing, transformations, or tint.
      //set(0, 0, cam);
    }
    Le programme fonctionne : 1 pixel détecte le rouge du laser, un cercle blanc indique son emplacement pour pouvoir tester le programme.
    Ma question est la suivante : comment peut-on détecter le rouge du laser sur tout le champ de la caméra ? Nous avons essayé d'attribuer 5 pixel de plus à chaque fois que l'action a été effectuée, le tout sur chaque ligne du champ mais le tout est beaucoup trop lent. Je précise que nous sommes novices, seul l'un de nous connaît quelques bases en java.

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Il faudrait voir si le fait de récupérer l'image de la camera est lent, ou si c'est l'analyse de l'image en elle même qui est lente.

    Car au vu du code a part la lecture de l'image de la camera, son affichage dans le buffer et un test sur un pixel située a la coordonée 100, 100 je doute que ca soit la lecture du pixel et la condition qui pose problème mais difficile a dire sans pouvoir faire tourner le tout.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Il faudrait voir si le fait de récupérer l'image de la camera est lent, ou si c'est l'analyse de l'image en elle même qui est lente.

    Car au vu du code a part la lecture de l'image de la camera, son affichage dans le buffer et un test sur un pixel située a la coordonée 100, 100 je doute que ca soit la lecture du pixel et la condition qui pose problème mais difficile a dire sans pouvoir faire tourner le tout.
    Salut, sur ce code ce que nous avions fait pour répéter l'action et donc détecter le rouge sur toute une ligne n'apparaît pas. On voyait que le point de repère du pixel détecteur s'affichait lentement pixel après pixel et en saccadé. C'était trop lent donc on a abandonné cette idée. C'est donc plus ou moins l'analyse qui est lente.

    Merci

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Certes, mais je ne vois pas comment ce tout petit bout de code pourrait être lent entre nous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     color a = get(100,100);
    float c = red(a);
    float d = blue(a);
    float e = green(a);
     
    println(c);
     
    if (c > 230) {...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut Solution trouvée
    Salut, désolé pour le délai de réponse, on a finalement opté pour ceci et tout fonctionne, merci !

    On capture le flux d'une cam, plus le laser s'approche du centre plus le son est aigu, on a utilisé pythagore pour le faire sur toute la cible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    /*
     * Traqueur de luminosité  
     */
     
     
    import processing.video.*;
    import processing.sound.*;
     
    SinOsc sine;
     
    int bx;
    int by;
    float d;
    float freq=400;
    float amp=0.5;
    float pos;
    Capture video;
     
    void setup() {
      size(640, 480);
      video = new Capture(this, width, height);
      video.start();  
      noStroke();
      smooth();
     
        sine = new SinOsc(this);
     
        //Start the Sine Oscillator. 
        sine.play();
    }
     
    void draw() {
      if (video.available()) {
        video.read();
        image(video, 0, 0, width, height); 
        int brightestX = 0; 
        int brightestY = 0; 
        float brightestValue = 0; 
     
        video.loadPixels();
        int index = 0;
        for (int y = 0; y < video.height; y++) {
          for (int x = 0; x < video.width; x++) {
            int pixelValue = video.pixels[index];
            float pixelBrightness = brightness(pixelValue);
            if (pixelBrightness > brightestValue) {
              brightestValue = pixelBrightness;
              brightestY = y;
              brightestX = x;
            }
            index++;
          }
        }
        fill(255, 0, 0, 128);
        ellipse(brightestX, brightestY, 10, 10);
        fill(0, 0, 0, 128);
        ellipse(290, 295, 10, 10);   
     
        if (brightestX > 290) {
        bx = brightestX - 290;
        fill(0);
        text("X =  : " + bx, 10, 20);
        } else {
        bx = 290 - brightestX;
        fill(0);
        text("X =  : " + bx, 10, 20);
        }
     
         if (brightestY > 295) {
        by = brightestX - 295;
        fill(0);
        text("Y =  : " + by, 10, 40);
        } else {
        by = 295 - brightestY;
        fill(0);
        text("X =  : " + by, 10, 40);
        }
     
     
      amp=map(100, 0, height, 1.0, 0.0);
      sine.amp(amp);
      d= sqrt((bx*bx)+(by*by));
              fill(0);
        text("distance =  : " + d, 10, 60);
      freq=map((400-d)*2, 0, width, 80.0, 1000.0);
      sine.freq(freq);
     
      }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide projet sur accèsx
    Par billionaire2008 dans le forum Access
    Réponses: 1
    Dernier message: 27/06/2016, 12h35
  2. Aide sur Process.destroy()
    Par rampageXT dans le forum Langage
    Réponses: 4
    Dernier message: 28/05/2007, 14h38
  3. Besoin d'aide projet d'info : la bonne paye sur C++ Builder.
    Par timsupra dans le forum C++Builder
    Réponses: 18
    Dernier message: 25/04/2006, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo