0Home Page test forums PROGRAMMATION MYROBOTLAB Question sur la nouvelle base

This topic contains 12 replies, has 4 voices, and was last updated by Profile photo of Dominique Dominique 3 months, 3 weeks ago.

  • Author
    Posts
  • #7965
    Profile photo of Dominique
    Dominique
    Participant

    Salut,

    @Anthony: Peut tu me dire où appel tu la fonction:

    def askWiki(particule,query,question,ReturnOk,ReturnNok): # retourne la description du sujet (query)

    dans les AIMLs. J’ai beau chercher, je ne la trouve pas (ou alors j’ouvre pas bien les yeux, les fichiers sont énormes).

    Merci.

  • #7984
    Profile photo of Dominique
    Dominique
    Participant

    Personne pour une idée pourquoi cette fonction ne se trouve pas dans un AIML ?

  • #7986
    Profile photo of anthony
    anthony
    Moderator

    hello de mémoire elle est en test dans deduction.aiml .

  • #8957
    Profile photo of Dominique
    Dominique
    Participant

    Salut,

    Je suis en train de voir comment fonctionne le FaceReconizer. En lisant le code, je tombe sur des trucs bizarres, des fonctions qui font doubles emplois.

    Exemple: dans InMoov.java, je trouve la fonction rest()

    public void rest() {
    log.info(“InMoov Native Rest Gesture Called”);
    if (head != null) {
    head.rest();
    }
    if (rightHand != null) {
    rightHand.rest();
    }
    if (leftHand != null) {
    leftHand.rest();
    }
    if (rightArm != null) {
    rightArm.rest();
    }
    if (leftArm != null) {
    leftArm.rest();
    }
    if (torso != null) {
    torso.rest();
    }
    if (eyelids != null) {
    eyelids.rest();
    }
    }

    Dans le répertoire gestures de la base, on trouve aussi la fonction rest() qui fait exactement le même chose.

    # ##############################################################################
    # ROBOT REST POSITIONS ( minimal )
    # ##############################################################################

    def rest():
    fullspeed()
    if isRightHandActivated:
    i01.rightHand.rest()

    if isLeftHandActivated:
    i01.leftHand.rest()

    if isRightArmActivated:
    i01.rightArm.rest()

    if isLeftArmActivated:
    i01.leftArm.rest()

    # ##############################################################################
    # ROBOT REST POSITIONS ( full )
    # ##############################################################################

    if isHeadActivated:
    i01.head.rest()

    if isTorsoActivated:
    i01.torso.rest()

    if isEyeLidsActivated:
    i01.eyelids.rest()

    Ce n’est pas la seul, il y en a pleins d’autres…

    Bon, ce n’est pas une critique, c’est juste pour optimiser l’histoire, soit vous utilisez entièrement le service InMoov, soit vous enlevez les gestures qui se trouvent dans le service InMoov qui fait double emploi avec ceux de la base.

    Autrement, quelqu’un sait il ce que fait exactement leftHand.save(); ou autre save.
    Sauvegarde de quoi ?

  • #8958
    Profile photo of Gael Langevin
    Gael Langevin
    Keymaster

    Hello Dominique,
    Rest() se trouve dans le service inmoov.java car il peut être appelé avec un simple script comme celui du Finger Starter ou de la tête par exemple. Ces scripts ne passent pas par la base. Il est donc nécessaire de garder cette fonction dans le service InMoov.

    Ensuite dans la base nous avons redéfini Rest() en tant que gestuelle car cela permets de rajouter une couche de fonction telle que:
    fullspeed()
    if isHeadActivated:

    Par contre concernant leftHand.save(), je ne me souviens plus à quoi c’était lié. Tu l’as trouvé dans inmoov.java ou dans inmoovHand.java?

  • #8959
    Profile photo of Dominique
    Dominique
    Participant

    OK OK, je comprends. Cela renforce ma conviction d’utiliser un max de python pour ne pas être bloqué avec les services figés.

    Bon, je viens de tester FaceRecognizer. Effectivement cela a l’air de fonctionner, qu’un instant…

    En effet, au bout d’un certain temps, le training ce fige.
    Je me suis enregistrer, ainsi que mes enfants. Lorsque j’arrête le training, il me reconnais bien… super… Mais lorsque mes enfants regardent la camera, le robot dit toujours que c’est moi…

    Niveau rapidité, j’ai hate de tester avec mon core i3 dernière génération car sur mon portable i7 de 3 ans, ça rame un peu. Comment cela doit être avec une tablette.

    Bon, il y a encore à creuser…

  • #8960
    Profile photo of Gael Langevin
    Gael Langevin
    Keymaster

    J’ai un i7-7700 CPU 3.60Ghz. Il était temps car pour faire de la modélisation 3D, je ramais sérieusement avec mon Pentium 4.
    Le face recognizer est à 32fps sur l’i7 et se fige également.
    Avec la tablette Lenovo le face recognizer descent le fps à 8 et se fige aussi. Mais lorsque cela ne figeait pas, c’était utilisable tout de même. En rajoutant un filtre PyramidDown supplémentaire, le fps remonte à 12, 13.
    Je vais essayer de rajouter un Gray filter pour voir si cela fige encore.

    Le face tracking fonctionne (les 3 filtres sont actifs) mais les servos ne bougent pas, tu as la même chose?

  • #8961
    Profile photo of Dominique
    Dominique
    Participant

    Oui, le face tracking fonctionne, mais tu le sais bien, je fais tout en python. je n’utilise pas :

    i01.headTracking.faceDetect()
    i01.eyesTracking.faceDetect()

    car on ne sais pas ce que cela fait, sauf si on va trifouiller le code java.

    Donc, en python, je récupère le rectangle de “FaceTracking” (onOpenCVData), je cherche le point milieu puis je fais un asservissement sur les servos afin de garder le point milieu au centre de l’image. C’est surement ce qui est fait en java mais lorsque cela bug, on se retrouve coincé.

    Pour le facereconizer, lorsque cela se fige, je doit arrêter et redémarrer la camera.

    Il est possible de mettre un core i7 sur la stx à la place du i3 (toujours avec un tdp de 35W), mais le prix est 300€ plus cher… bon pour cela je verrais plus tard si le besoin sans fait sentir. J’espère que l’on en arrivera pas la.

  • #8962
    Profile photo of BIGIARINI Vincent
    BIGIARINI Vincent
    Participant

    La finalité de la chose de mon côté était de trouver un ordi compact où il serait possible d’ajouter un GPU Nvidia. pour YOLO, DL4J et autres…

    Parce que bon, même OpenCV peut en bénéficier :

    http://opencv.org/platforms/cuda.html

    Regardez les performances…
    Pour vous faire une idée, avec YOLO si on utilise le CPU, il faut 5 à 10 sec pour analyser une image. Avec CUDA, on analyse une video en temps réel.

    Je n’ai pas les compétences pour intégrer ça dans MRL, Je suis un lanceur d’idées ^^
    Ya de quoi libérer le CPU largement tout en étant bien plus performant.

    L’équipe de MRL est en train de bosser sur DL4J, j’espère qu’ils vont utiliser le traitement par GPU.

  • #8963
    Profile photo of Gael Langevin
    Gael Langevin
    Keymaster

    Hello Vincent,
    C’est une belle carte que tu as rajouté sur ton InMoov! Effectivement le processing video sur CUDA sera bénéfique pour le CPU! Bon attention quand même, car on en a jamais assez et rapidement tu peux te retrouver à transporter une valise qui est en fait le cerveau de ton robot.
    J’étais à Bruxelles pour le Makerstown, et à côté de mon stand, il y avait l’équipe iCub (le robot italien)
    Ils étaient six pour gérer le robot, il y avait trois ordinateurs et une batterie qui tenait dans une malle énorme.(50kg)
    iCub est vraiment une super machine, un super robot, mais pas vraiment transportable et finalement pas très autonome car trop encombrant.
    Avec la carte que tu as c’est un bon compromis je pense pour augmenter le potentiel d’InMoov, sans le rendre intransportable.

    Le bug qui freeze face recognizer est lié au sous-dossier du Training je pense. Lorsque je lance pyramideDown et Facerecognizer filters tout seule, ça marche bien mais il n’est pas capable de reconnaitre les visages.
    Des que je lance la fonction, ça bug:

  • #8964
    Profile photo of BIGIARINI Vincent
    BIGIARINI Vincent
    Participant

    Je pense mettre le GPU a la place de la tablette, je verrai quand j’aurai reçu tout le matos. évidemment, on va éviter de faire une usine à gaz, mais je pense que c’est le minimum vital pour faire du traitement vidéo sans mettre à genoux le PC. et si il faut plus puissant, changement de GPU et/ou de CPU, il y a de la marge, c’est évolutif.

    Bruxelles ! J’aurai bien aimé venir mais le boulot a vite fait de me rattraper…

    Le soucis avec ICub si je ne m’abuse, c’est qu’il n’y a même pas de place pour intégrer quoi que ce soit dedans. c’est de la R&D, il sera toujours temps de tout intégrer plus tard dans une autre itération.

  • #8965
    Profile photo of Dominique
    Dominique
    Participant

    Oui voilà. C’est aussi pour cela Gael, que j’essaie d’optimiser et de maîtriser la programmation, surtout pour les éléments de base.

    FaceReconizer en fait partis, pour moi c’est encore plus important que le faceTracking, et l’idéal serait de faire les deux en même temps. Ou peut être voir pour switcher rapidement entre les 2 fonctions.

    Toujours pour FaceReconizer, une fois les photos enregistrer, il faut désactivé la fonction train() sinon il va continuer a enregistrer les photos. J’ai spécifié aussi l’emplacement des photos avec setTrainingDir().

  • #8966
    Profile photo of Dominique
    Dominique
    Participant

    Une autre amélioration du FaceTracking serait de prendre en compte les servos latéraux de la tête.

    Lorsque la tête est suffisamment à gauche ou à droite ce sont les servos latéraux qui doivent prendre le relais et non plus le servo du neck qui lui doit revenir à la position initial. Je vais essayer de m’y atteler en python…

You must be logged in to reply to this topic.