Page 2 sur 3

Re: Coordonnées dans une détection de mouvement

Posté : mar. 13 janv. 2015 21:27
par vague nerd
Soit le script consomation.sh :

Code : Tout sélectionner

import os, time, sys
pipe_name = 'fifo'

def consome( ):
    pipein = open(pipe_name, 'r')
    while True:
        time.sleep(1)
        line = pipein.readline()[:-1]
        if line != "":
                print 'Conomation de "%s"' % ( line )

if not os.path.exists(pipe_name):
    os.mkfifo(pipe_name)

consome()
Terminal numéro 1 :

Code : Tout sélectionner

python consomation.sh
Terminal numéro 2 (qui sert à simuler l'emeteur) :

Code : Tout sélectionner

echo 'toto' > fifo
echo 'titi' > fifo
echo 'tata' > fifo
Résultat dans le terminal 1 (dans le bon ordre - fifo):
Conomation de "toto"
Conomation de "titi"
Conomation de "tata"
Sinon, je vous confirme que 'consommation' ne prend qu'un seul 'm'. Si. :D

Ca vous va ?

Cordialement.

Re: Coordonnées dans une détection de mouvement

Posté : mar. 3 févr. 2015 20:05
par inthebelouze
Bonsoir à tous.
Je déterre mon sujet après une pause dans mon projet pour problème personnel (désolé vague nerd de ne pas t'avoir répondu)

Petite évolution. J'ai réussi à créer un pipe (grâce à votre aide), j'arrive à récupérer des coordonnées pendant une détection et à les afficher dans la console (pour l'instant)

2 problème : le processeur du raspy tourne à 100% (motion + la boucle de lecture du pipe) et surtout le renvoie de coordonnées n'est pas assez réactif DU TOUT.
Pour éliminer pour l'instant le problème de surcharge du processeur, j'ai lancer motion tout seul. En surveillance, le processeur est à 40% et sur une détection, il tourne à 80%. MAIS le système n'est toujours pas assez réactif (je rappel que le but final est la fabrication d'une tourelle de défense)
La question final est : il y a-t-il une alternative à motion qui correspondrait à mon besoin (ou il y a-t-il un moyen de "booster" motion en désactivant certaine fonctions)

OU ALORS, si je me lance dans le codage d'un programme de détection de mouvement moi-même, vais-je dans le mur ? :D

Voila voila, si vous avez des pistes... Merci à tous

Re: Coordonnées dans une détection de mouvement

Posté : mer. 4 févr. 2015 07:28
par Korhm
Bonjour,

c'est vrai que motion est particulièrement groumant... Pour ma part il me semble que modifier quelques paramètres de qualité comme "quality" (compression des fichier jpeg qui consomme du processus je pense)
Quand tu dis que tu fais tourner seulement motion, tu "éteinds" aussi la boucle qui lit dans le named pipe ? Je ne pense pas que ça consomme énormément de CPU ce genre de process

Re: Coordonnées dans une détection de mouvement

Posté : mer. 4 févr. 2015 09:34
par vague nerd
Bonjour.

+1 à Korhm : la boucle doit consommer beaucoup pour "rien".
Il faut ajouter une temporisation (endormir le thread) dans la boucle.

Pour illustrer le propos, vous pouvez comparer l'occupation cpu des deux exemples suivant (en shell) :

Code : Tout sélectionner

While True:
     print "."

Code : Tout sélectionner

While True:
     print "."
     time.sleep(0.1)
Dans le premier cas, le thread prend toutes les ressources possibles du pi pour afficher des ".".
Dans le second cas, le thread affichera un '.' toutes les dixièmes de secondes. Le cpu est alors beaucoup moins utilisé.

Evidemment, le premier script affichera beaucoup plus de '.' que le second. Mais si, par contre, l'action "imprime un '.'" est plutôt "lit un capteur et fait quelque chose de la valeur", il n'est pas nécessaire que l'action soit réalisée en temps réel (aussi vite que le peut le pi). On ajoute alors une temporisation, qui soulage le pi, sans impact sur l’ergonomie du programme. Imaginons que le programme consiste à lire un capteur de luminosité pour allumer la lumière en conséquence, une temporisation de 1/10eme de seconde ne sera pas perceptible par l'home, mais divisera drastiquement l'occupation du pi.

D'autre part, si je me souvient bien, je stream du full hd h264 pour 15/20% CPU. Motion n'est pas sensé mettre le tout à genoux !

Re: Coordonnées dans une détection de mouvement

Posté : lun. 9 févr. 2015 18:28
par inthebelouze
Bonsoir,
En dehors du problème de boucle en lecture continue (au passage, j'ai essayé de mettre un sleep() dans ma boucle, et effectivement ça allège un peu le processeur) quand je lance motion seul :

Code : Tout sélectionner

motion -n -c essai.conf
...avec juste un "echo %k %L" sur la ligne "on_motion_detected" du fichier essai.conf, l'enregistrement de photo et de vidéo sur détection désactivé, motion est encore trop long à me renvoyer des coordonnées. Ça manque de réactivité.

C'est pour ça que je cherche une alternative à motion (ou alors une config plus "fine" de motion, peut-être)

Re: Coordonnées dans une détection de mouvement

Posté : sam. 4 avr. 2015 12:13
par inthebelouze
Bonjour à tous,
Je déterre mon sujet. J'ai largement amélioré la réactivité de la détection... a commencer par l'utilisation d'un Pi 2. Plus de problème de possesseur ni de RAM.
Dans le fichier de config de motion, J'ai réduit un peu la résolution (je ne sais pas si ça à un grand effet) et surtout j'ai passé le paramètre pre_capture à 5 (au lieu de 0) et les coordonnée "sortent" quasi instantanément.

Voila, c’était pour info pour ceux que ça intéresserait.

Merci à tous

Re: Coordonnées dans une détection de mouvement

Posté : sam. 11 avr. 2015 08:08
par maupassant
inthebelouze a écrit :Bonjour à tous,

Voila, c’était pour info pour ceux que ça intéresserait.

Merci à tous
Salut inthebelouze et merci pour le partage.
Je suis moi même très interessé par ta réalisation.
J'ai actuellement un truc dans le genre qui tourne chez moi pour protéger ma terrasse de mes 2 canards coureurs. (Ils sont aussi appelés canard indiens) qui vivent en liberté dans notre jardin.
Pour info, c'est une race de canards qui ne touchent pas aux cultures et qui mange limaces et escargots et autres petites bêtes...
Ces deux petites bestioles adorent venir faire leurs besoins sur notre terrasse en bois et j'utilise un détecteur de mouvement avec un arduino pour déclencher un jet d'eau qui les fait fuir.
Comme ils ne sont pas si stupides que ça, ils ont trouvé la parade et contournent le canon à eau :D

Je souhaite donc améliorer le système et piloter mon jet d'eau à l'aide de mon rasp.
J'ignore si il est possible de fignoler le système au point de ne déclencher le jet que sur des cibles noires (les canards sont noirs) mais ça serait un challenge supplémentaire car dans la configuration actuelle, il faut faire attention, le détecteur me confond parfois avec les canards et je prends la sauce :D :D

Je viens de me mettre au python et j'aimerai essayer d'adapter ton code à ma mini tourelle (pour l'instant elle ne fonctionne qu'en X et balaie un certain angle car je n'ai pas besoin d'une grande précision)

Je viens de commander un rasp 2 mais il ne sera pas dispo avant le 17 avril, victime de son succès :roll:

Je trouve ton projet vraiment intéressant et motivant pour apprendre à utiliser concrètement python et raspberry.
Merci de partager ici ton code si tu le souhaites.

Re: [RESOLU] Coordonnées dans une détection de mouvement

Posté : sam. 11 avr. 2015 11:24
par vague nerd
Bonjour.
Voila, c’était pour info pour ceux que ça intéresserait.
Je plusoie maupassant : merci du partage.
le détecteur me confond parfois avec les canards et je prends la sauce
:lol: En plus, les canard ne doivent pas se faire toucher eux ! Non ?

@inthebelouze : pour configurer la "taille" de sleep, poser vous la question "Quelle est la plus grande valeur de pause possible sans impact sur la fonctionnalité ?". Désolé, d'insister, mais un boucle sans fin sans temporisation occupe le cpu à 100%... Doubler un temps de pause peut avoir des conséquence importantes. De plus, si ce que fait la boucle est peu coûteux, les temps système pour gérer les thread et leurs réveil/endormissement/synchronisation finissent par entrer en ligne de compte.
J'ai réduit un peu la résolution (je ne sais pas si ça à un grand effet)
Je pense que si (sans bien comprendre pourquoi). Vous avez testé depuis ?

@maupassant : piloter une tourelle tilt/pan (pour y monter la cam officielle par exemple) est relativement facile.
En gros, il s'agit de piloter des servomoteurs en PWM (ça se fait de manière logicielle sur nos GPIO numérique).
Ce qui sera plus compliqué, c'est :
- la partie logicielle avec les transformations 2d/3d pour tirer au bon endroit (le canon à eau tire droit ? En cloche ? - ni l'un ni l'autre bien sûr :cry: )
- l'étalonnage

Pour la partie pwm, je peux vous guider facilement. N'hésitez pas à me solliciter.

Cdt.

Re: [RESOLU] Coordonnées dans une détection de mouvement

Posté : sam. 11 avr. 2015 11:32
par vague nerd
Je crois que je vais me monter une nouvelle tourelle (la mienne est axée streaming temps réel, sans automatisme pour la tourelle elle même : pour un UGV).

Pourriez-vous me guider en me donnant :
- les versions de composants à installer
- vos fichiers de conf
?

Cdt.

Re: [RESOLU] Coordonnées dans une détection de mouvement

Posté : sam. 11 avr. 2015 12:06
par maupassant
:lol: En plus, les canard ne doivent pas se faire toucher eux ! Non ?
Effectivement, ils sont déjà loin :D

Mais il y a un point positif: j'ai vraiment envie d'apprendre et d'améliorer le système, j'en ai marre d'avoir les bas de pantalon mouillés :lol: