[RESOLU] Coordonnées dans une détection de mouvement
Modérateur : Francois
-
- Messages : 9
- Enregistré le : lun. 5 janv. 2015 12:12
[RESOLU] Coordonnées dans une détection de mouvement
Bonsoir à tous.
J'ai un mouton à 5 pattes à vous soumettre (un de plus dans la communauté).
Je dispose d'un pi B+ avec une caméra NoIR et une distri Raspbian. Je cherche à exécuter une détection de mouvement en tâche de fond (par exemple par "motion"), MAIS je ne cherche pas à diffuser en streaming (du moins, pas pour le moment). Je cherche à récupérer des coordonnées "globales" de la zone en mouvement sur l'ensemble de l'image.
Le projet final, c'est que je souhaite asservir une tourelle automatique à une reconnaissance de mouvement par camera, en somme, fabriquer une tourelle automatique de défense (je pratique l'airsoft, n'appelez pas le FBI . C'est ces fameuses coordonnées qui me servirons de mire de référence pour la visée.
Pour aller plus loin, je compte connecter mon raspi à un arduino qui s'occupera de contrôler les deux axes (horizontal et vertical) et la détente de tir.
Mais procédons par étape, je me concentre d'abord sur la détection de mouvement.
Je ne vous cache pas que c'est plus le défi de la fabrication de la tourelle que son utilisation qui me motive
Je suis tout ouïe à vos propositions, n’hésitez pas à me demander plus d'explication si je n'ai pas été clair.
Je ne savais pas si je devais poster dans cette rubrique ou dans la rubrique Robots, n'hésitez pas à déplacer mon post si besoin est.
Merci par avance
J'ai un mouton à 5 pattes à vous soumettre (un de plus dans la communauté).
Je dispose d'un pi B+ avec une caméra NoIR et une distri Raspbian. Je cherche à exécuter une détection de mouvement en tâche de fond (par exemple par "motion"), MAIS je ne cherche pas à diffuser en streaming (du moins, pas pour le moment). Je cherche à récupérer des coordonnées "globales" de la zone en mouvement sur l'ensemble de l'image.
Le projet final, c'est que je souhaite asservir une tourelle automatique à une reconnaissance de mouvement par camera, en somme, fabriquer une tourelle automatique de défense (je pratique l'airsoft, n'appelez pas le FBI . C'est ces fameuses coordonnées qui me servirons de mire de référence pour la visée.
Pour aller plus loin, je compte connecter mon raspi à un arduino qui s'occupera de contrôler les deux axes (horizontal et vertical) et la détente de tir.
Mais procédons par étape, je me concentre d'abord sur la détection de mouvement.
Je ne vous cache pas que c'est plus le défi de la fabrication de la tourelle que son utilisation qui me motive
Je suis tout ouïe à vos propositions, n’hésitez pas à me demander plus d'explication si je n'ai pas été clair.
Je ne savais pas si je devais poster dans cette rubrique ou dans la rubrique Robots, n'hésitez pas à déplacer mon post si besoin est.
Merci par avance
Modifié en dernier par inthebelouze le sam. 4 avr. 2015 12:17, modifié 1 fois.
- 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
Bonjour.
A la lecture rapide du man de motion, on trouve une option on_motion_detected. Les valeurs suivantes pourraient vous être utiles !
A la lecture rapide du man de motion, on trouve une option on_motion_detected. Les valeurs suivantes pourraient vous être utiles !
Cdt.%K : X coordinate in pixels of the center point of motion. Origin is upper left corner.
%L : Y coordinate in pixels of the center point of motion. Origin is upper left corner and number is positive moving downwards (I may change this soon).
Cordialement,
Vague Nerd
Vague Nerd
-
- Messages : 9
- Enregistré le : lun. 5 janv. 2015 12:12
Re: Coordonnées dans une détection de mouvement
Bonsoir
Effectivement, je vient de regarder plus en détail le fichier motion.conf, et oui à priori motion est capable de renvoyer plusieurs informations (si je comprends tout bien), comme des coordonnées ou autres variables internes.
Je suis débutant sur debian et en prog en pyton. Je continu de gratter pour voir comment je peux maintenant récupérer ces données dans un programme.
Si quelqu'un à déjà fait ou à une idée sur la façon dont je doit m'y prendre, ça sera avec plaisir
Merci
Effectivement, je vient de regarder plus en détail le fichier motion.conf, et oui à priori motion est capable de renvoyer plusieurs informations (si je comprends tout bien), comme des coordonnées ou autres variables internes.
Je suis débutant sur debian et en prog en pyton. Je continu de gratter pour voir comment je peux maintenant récupérer ces données dans un programme.
Si quelqu'un à déjà fait ou à une idée sur la façon dont je doit m'y prendre, ça sera avec plaisir
Merci
-
- Messages : 9
- Enregistré le : lun. 5 janv. 2015 12:12
Re: Coordonnées dans une détection de mouvement
Re-bonsoir à tous.
J'ai avancé sur mon sujet. dans le fichier config de motion, le paramètre "on_motion_detected" peut être suivi d'une commande (comme me l'a suggéré vague nerd). J'ai essayé "echo %K" et "echo %L", et ça marche très bien. motion me revoie dans la console (où je l'ai exécuté) une valeur seulement sur une détection de mouvement (en pixel, respectivement sur les X, puis sur les Y).
SAUF QUE imaginons que je fasse un script "coordonnées" qui serai exécute par motion avec les arguments %k et %L. Comment / où puis-je stocker ces coordonnées pour que je puisse les récupérées dans une autre processus (dans mon script "maitre".)
Je le répète, je débute en programmation python et sur un environnement linux
Merci pour votre aide
a bientôt
J'ai avancé sur mon sujet. dans le fichier config de motion, le paramètre "on_motion_detected" peut être suivi d'une commande (comme me l'a suggéré vague nerd). J'ai essayé "echo %K" et "echo %L", et ça marche très bien. motion me revoie dans la console (où je l'ai exécuté) une valeur seulement sur une détection de mouvement (en pixel, respectivement sur les X, puis sur les Y).
SAUF QUE imaginons que je fasse un script "coordonnées" qui serai exécute par motion avec les arguments %k et %L. Comment / où puis-je stocker ces coordonnées pour que je puisse les récupérées dans une autre processus (dans mon script "maitre".)
Je le répète, je débute en programmation python et sur un environnement linux
Merci pour votre aide
a bientôt
Re: Coordonnées dans une détection de mouvement
Bonjour,
comment fonctionne ton script "maitre" ? Est-ce un processus qui tourne en permanence en fond, ou un script appelé dès que besoin ?
1. Si c'est le premier cas, je pense que le plus simple est d'utiliser les "named pipes".
C'est un peu compliqué à appréhender, mais en gros, c'est un fichier linux qui est lu en permanence par un processus (ici une boucle infinie dans ton script maitre), et qui en même peut peut-être écrit par un ou plusieurs autres processus.
Quand un processus écrit dans le fichier, il est immédiatement lu par le processus lecteur.
C'est parfait pour une communication unilatérale, et demande peu de ressources.
S'il faut une communication bilatérale, il me semble que les named pipes peuvent être aussi utilisés, mais personnellement je préfère utiliser un client/server tcp dans ce cas là.
2. Si c'est le deuxième cas, il suffirait juste d’appeler le script en question dans l'event généré par motion, et de lire les paramètres en entrées.[/list]
Je connais très mal le python, mais suivant ta réponse je pourrais peut-être déjà t'aider à définir les algorithmes.
comment fonctionne ton script "maitre" ? Est-ce un processus qui tourne en permanence en fond, ou un script appelé dès que besoin ?
1. Si c'est le premier cas, je pense que le plus simple est d'utiliser les "named pipes".
C'est un peu compliqué à appréhender, mais en gros, c'est un fichier linux qui est lu en permanence par un processus (ici une boucle infinie dans ton script maitre), et qui en même peut peut-être écrit par un ou plusieurs autres processus.
Quand un processus écrit dans le fichier, il est immédiatement lu par le processus lecteur.
C'est parfait pour une communication unilatérale, et demande peu de ressources.
S'il faut une communication bilatérale, il me semble que les named pipes peuvent être aussi utilisés, mais personnellement je préfère utiliser un client/server tcp dans ce cas là.
2. Si c'est le deuxième cas, il suffirait juste d’appeler le script en question dans l'event généré par motion, et de lire les paramètres en entrées.[/list]
Je connais très mal le python, mais suivant ta réponse je pourrais peut-être déjà t'aider à définir les algorithmes.
-
- Messages : 9
- Enregistré le : lun. 5 janv. 2015 12:12
Re: Coordonnées dans une détection de mouvement
Bonjour,
Désolé pour l'absence, j’étais loin de toute civilisation ce weekend.
La structure de mon script maitre est le suivant :
Exécution du script maitre au démarrage de debian
>exécution de "motion" (motion -n -c fichier_de_config_perso.conf)
>attente de coordonnées dans une variable X et Y
>suite du programme, j'en suis pas encore là
...sachant que sur une détection, motion m’exécute un script qui est censé récupérer les variables internes de motion pour les rendre disponible à mon script maitre. C'est ce passage qui me bloque (les rendre disponible à mon script maitre).
Je vais chercher du côté des "named pipes" (je ne connais pas) mais vu la description que Korhm en fait, ça pourrais correspondre.
Je continu mon enquête, merci
Désolé pour l'absence, j’étais loin de toute civilisation ce weekend.
La structure de mon script maitre est le suivant :
Exécution du script maitre au démarrage de debian
>exécution de "motion" (motion -n -c fichier_de_config_perso.conf)
>attente de coordonnées dans une variable X et Y
>suite du programme, j'en suis pas encore là
...sachant que sur une détection, motion m’exécute un script qui est censé récupérer les variables internes de motion pour les rendre disponible à mon script maitre. C'est ce passage qui me bloque (les rendre disponible à mon script maitre).
Je vais chercher du côté des "named pipes" (je ne connais pas) mais vu la description que Korhm en fait, ça pourrais correspondre.
Je continu mon enquête, merci
-
- Messages : 9
- Enregistré le : lun. 5 janv. 2015 12:12
Re: Coordonnées dans une détection de mouvement
Bonsoir a tous,
bon, j'ai fouillé un petit peut partout, la solution du named pipe (unilatéral) me convient très bien. J'ai compris le principe sauf que je n'ai pas compris comme le mettre en œuvre.
Si quelqu'un à un exemple ou un tuto à m'indiquer pour me mettre sur la voie... parce que là, je sèche
Merci à tous
bon, j'ai fouillé un petit peut partout, la solution du named pipe (unilatéral) me convient très bien. J'ai compris le principe sauf que je n'ai pas compris comme le mettre en œuvre.
Si quelqu'un à un exemple ou un tuto à m'indiquer pour me mettre sur la voie... parce que là, je sèche
Merci à tous
- 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
Bonjour.
Plutôt que de me lancer dans un long discourt incompréhensible, je tente une démo ! Commencez par jeter un oeuil au manuel de fifo (first in frist out).
Démonstration !
Création du named pipe :
Dans un premier terminal :
Dans un second terminal :
Désormais, tapez quelque chose dans le premier terminal, et observez que cela est reproduit dans le second.
Remarquez aussi que si vous quittez le processus dans le premier terminal, cela rompt le pipe (processus quitté aussi dans le deuxième terminal).
N'hésitez pas à poser des questions !
Cdt.
Plutôt que de me lancer dans un long discourt incompréhensible, je tente une démo ! Commencez par jeter un oeuil au manuel de fifo (first in frist out).
Code : Tout sélectionner
man fifo
Création du named pipe :
Code : Tout sélectionner
mkfifo fifo
Code : Tout sélectionner
cat > fifo
Code : Tout sélectionner
cat fifo
Remarquez aussi que si vous quittez le processus dans le premier terminal, cela rompt le pipe (processus quitté aussi dans le deuxième terminal).
N'hésitez pas à poser des questions !
Cdt.
Cordialement,
Vague Nerd
Vague Nerd
-
- Messages : 9
- Enregistré le : lun. 5 janv. 2015 12:12
Re: Coordonnées dans une détection de mouvement
Bonsoir,
C'est exactement ce que je cherche. J'essaye de l'adapter en python. J'ai déjà une bout de code prometteur (je pense) de mon script appelé par motion
A la réflexion, je doit peut-être ouvrir mon tunnel par mon script maitre, ce qui permettrais de le laisser ouvert en continu.
de plus, dans mon 2eme script (pour le test)
Je continu à chercher les pièces du puzzle sur le net... Suis-je dans la bonne direction ou je vais dans le mur ?
Merci à tous
C'est exactement ce que je cherche. J'essaye de l'adapter en python. J'ai déjà une bout de code prometteur (je pense) de mon script appelé par motion
Code : Tout sélectionner
#!/usr/bin/python
import os
fifo = 'coord'
# si le fichier coord n'existe pas
os.mkfifo(fifo)
descr = os.open(fifo, os.O_WRONLY)
#récupération des arguments du script, je l'ai vu qque part, mais je ne sais plus comment on fait. Pour l'exemple :
coord_x = 20
coord_y = 80
#c'est la que je doute
os.write(desc, str(coord_x))
#...et je doit quitter sans fermer le tunnel pour pouvoir re-causer dedans au prochain appel de mon script par motion
de plus, dans mon 2eme script (pour le test)
Code : Tout sélectionner
import os
fifo = 'coord'
descr = os.open(fifo, os.O_WRONLY) #a ce moment, je débloque l'autre script
os.read(descr, xx) #(pour l'instant, xx = 10, j'ai pas encore ajuster) je récupère "b'20'". C'est que déjà, ça cause et c'est déjà pas mal
Merci à tous
- 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
Bonsoir.
Appelons le script appelé par motion l'"émetteur", et l'autre le "consommateur".
L’émetteur écrit comme bon lui semble dans le pipe, le consommateur fait une boucle sans fin de consommation (avec une temporisation pour ne pas surcharger le cpu).
Cordialement.
La pille fifo n'a pas besoin d'être recrée. On la crée une bonne fois et c'est bon, non ? Une bonne raison de vouloir la recréer ?#...et je doit quitter sans fermer le tunnel pour pouvoir re-causer dedans au prochain appel de mon script par motion
A la réflexion, je doit peut-être ouvrir mon tunnel par mon script maitre, ce qui permettrais de le laisser ouvert en continu.
Appelons le script appelé par motion l'"émetteur", et l'autre le "consommateur".
L’émetteur écrit comme bon lui semble dans le pipe, le consommateur fait une boucle sans fin de consommation (avec une temporisation pour ne pas surcharger le cpu).
Cordialement.
Cordialement,
Vague Nerd
Vague Nerd