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

Les applications du Raspberry Pi en contrôle d'accès, alarme et vidéosurveillance

Modérateur : Francois

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

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

Message par vague nerd » mar. 13 janv. 2015 21:27

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.
Cordialement,

Vague Nerd

inthebelouze
Messages : 9
Enregistré le : lun. 5 janv. 2015 12:12

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

Message par inthebelouze » mar. 3 févr. 2015 20:05

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

Korhm
Raspinaute
Messages : 232
Enregistré le : ven. 19 sept. 2014 08:13
Localisation : Toulouse

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

Message par Korhm » mer. 4 févr. 2015 07:28

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

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

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

Message par vague nerd » mer. 4 févr. 2015 09:34

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 !
Cordialement,

Vague Nerd

inthebelouze
Messages : 9
Enregistré le : lun. 5 janv. 2015 12:12

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

Message par inthebelouze » lun. 9 févr. 2015 18:28

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)

inthebelouze
Messages : 9
Enregistré le : lun. 5 janv. 2015 12:12

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

Message par inthebelouze » sam. 4 avr. 2015 12:13

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

maupassant
Messages : 3
Enregistré le : sam. 11 avr. 2015 07:49

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

Message par maupassant » sam. 11 avr. 2015 08:08

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.

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

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

Message par vague nerd » sam. 11 avr. 2015 11:24

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.
Cordialement,

Vague Nerd

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

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

Message par vague nerd » sam. 11 avr. 2015 11:32

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.
Cordialement,

Vague Nerd

maupassant
Messages : 3
Enregistré le : sam. 11 avr. 2015 07:49

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

Message par maupassant » sam. 11 avr. 2015 12:06

: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:

Répondre

Retourner vers « Accès, alarme et vidéosurveillance »