Aide : Détection de mouvement - PHP - Programmation
Marsh Posté le 04-05-2005 à 13:33:01
2h après.
50 Lectures, 0 réponse.
Je m'en doutais un peu quelque part...
90% n'ont pas lu jusqu'au bout je pense.
Enfin, j'en profite au passage pour faire un petit UP!
Merci à vous.
Marsh Posté le 04-05-2005 à 13:35:02
moi aussi j ai tout lu je peux même dire cela:
for ($y=0; $y<$laTaille[1]; $y = $y+1)
peut etre ecrit comme cela :
for ($y=0; $y<$laTaille[1]; $y++)
Marsh Posté le 04-05-2005 à 13:37:47
oui lol
sinon sympa le truc que tu as fait ... mais je n'ai pas la solution a ton probleme...
Marsh Posté le 04-05-2005 à 13:39:42
Citation : Moi j'ai tout lu |
Je n'en doute pas. Tu rentres dans la tranche des 10%.
Pour faire plus simple pour ma requête.
J'ai deux iframes.
Sais tu comment stocker une valeur affectée à une variable lors de l'appel de la première iframe, de manière à s'en servir dans la deuxième iframe?
Les variables $_SESSION ne semblent pas fonctionner, de même que pour les $GLOBALS.
Quand je fais mon test dans ma deuxième iframe pour récupérer une valeur que j'ai censé stocker dans la première iframe :
Code :
|
Je rentre direct dans le ELSE. La variable n'est pas défini en fait.
Merci.
Et ReMerci d'avoir lu entièrement mon post
EDIT :
Citation : moi aussi j ai tout lu je peux même dire cela: |
Oui j'ai laissé $y = $y+1, car j'incrémente parfois de +5, car la comparaison des pixels un par un prend du temps.
Marsh Posté le 04-05-2005 à 13:42:43
tu peux pas les faire passer en get?
genre
<iframe src="fonc_detection_img_origine.php?variable=$variable" width="500" height="500" name="zone_img_origine" frameborder="0" id="zone_img_origine"></iframe>
Marsh Posté le 04-05-2005 à 13:55:06
Citation : tu peux pas les faire passer en get? |
Je viens d'essayer, et je me doutais bien que ça n'allait pas marcher.
Ceci est dû au fait que la variable n'existe pas quand je la récupère par la méthode GET ou REQUEST.
Pourtant, si je suis la logique de mon programme, la première iframe appelée est celle de l'image d'origine.
Bref, je vais tenter de ne faire qu'une iframe en bidouillant un peu.
N'hésitez pas si vous avez des idées.
Si je fais ça dans une seule iframe qui appelle sans cesse le fichier fonc_detection_img_temp.php, et si j'incrémente de 5 à chaque fois une variable. Je pense pouvoir appelée par la suite le fichier fonc_detection_img_origine.php lorsque la variable atteindra la valeur 60 (correspondant à la prise d'une nouvelle image de référence).
Espérons ou du moins j'espère que ca va marcher.
Marsh Posté le 04-05-2005 à 14:01:10
ca fait quoi si la variable recupere existe pas ? tu as cas faire un test non? car aprés elle existe?
sinon pourquoi tu ne fais pas une seule page avec "fonc_detection_img_temp.php" et au bout de x seconde tu lance
"fonc_detection_img_origine.php"
Marsh Posté le 04-05-2005 à 14:01:18
Si tu veux utiliser les mêmes données dans les 2 parties de ta page, n'utilise pas de frames.
Si le chargement de la page complète réexécute des portions de code que tu ne veux pas réexécuter, utilise une variable de session (ou GET ou POST) pour tester si tu dois ou non réexécuter ces portions de code.
Marsh Posté le 04-05-2005 à 14:17:45
Ok ok, merci dedefou et skeye.
Je suis en train de réadapter ça dans une seule iframe.
Le truc, c'est que je veux lancer les deux codes dès que l'utilisateur clique sur Activer détection automatique, puis pendant 60s lancer qu'un seul code (pour l'image temp).
Au bout de 60s, je relance un coup les deux codes, et puis à nouveau pendant 60s le code pour l'image temp. etc...
EDIT : j'ai l'impression qu'à chaque fois que ma fonction Javascript réactualise mon code contenu dans l'iframe, les variables de SESSION sont alors deletées. . Et donc pour la première comparaison ça marche car les deux codes sont exécutés. (A ce moment là je stocke des valeurs dans les variables de SESSION).
Or quand la fonction Javascript relance l'iframe, alors mes variables de SESSION sont nulles, et donc mon image d'origine est irrécupérable.
Merci à vous en tous les cas.
Sympathique de m'aider.
Fiiies.
Marsh Posté le 04-05-2005 à 14:20:49
eh bien comme le dit skeye tu mets uen variable à 1 pendant 60s et à 0 ensuite ainsi de suite.
Marsh Posté le 04-05-2005 à 14:33:12
Citation : eh bien comme le dit skeye tu mets uen variable à 1 pendant 60s et à 0 ensuite ainsi de suite. |
EDIT : j'ai l'impression qu'à chaque fois que ma fonction Javascript réactualise mon code contenu dans l'iframe, les variables de SESSION sont alors deletées. . Et donc pour la première comparaison ça marche car les deux codes sont exécutés. (A ce moment là je stocke des valeurs dans les variables de SESSION).
Or quand la fonction Javascript relance l'iframe, alors mes variables de SESSION sont nulles, et donc mon image d'origine est irrécupérable.
Merci à vous en tous les cas.
Sympathique de m'aider.
Et également, je suis obligé (enfin je pense) de passer par une iframe car je ne souhaite pas réactualiser la page principale où il y a le flux vidéo (voir screen shot), et je veux afficher dans la fenêtre principale des valeurs obtenues par le code exécuté dans l'iframe.
J'ai mis des tests de partout, lorsque la fonction JS réactualise ma page fonc_detection_img_temp.php, ça semble bien effacer mes variables de SESSIOn.
Grrr, ça m'agace cette histoire.
Merci à vous.
Fiiies
Marsh Posté le 04-05-2005 à 14:36:38
tiens voila une petite function que je faite pour gardes ces variable get lorsque la page se recharge en js:
Code :
|
code php qui appel cette function
Code :
|
Marsh Posté le 04-05-2005 à 14:47:28
J'ai pas tout lu, mais je me dis que comparer l'image actuelle avec l'image d'origine n'est pas une bonne idee : si la nuit tombe, tot ou tard ca sera considere comme une detection de mouvement, et ca sera le cas pour chaque image.
Mieux vaut comparer l'image actuelle a l'image precedente
Marsh Posté le 04-05-2005 à 14:48:28
Code :
|
Je suppose que c'est plus :
location.href = location.pathname + "?user=" + user; ???
Je vais tester ça, même si à première vue je n'ai pas capté grand chose.
Code :
|
onclick ?
Si je comprends bien, tu rappelles ta fonction permettant de garder tes variables lorsque tu cliques sur le lien?
Moi, ce que je souhaite, c'est pouvoir récupérer mes variables par la méthode GET ou POST, au début de mon script, à chaque réactualisation de la page engendrée par la fonction JS.
J'espère me faire comprendre et ne pas être HS.
Merci.
Citation : J'ai pas tout lu, mais je me dis que comparer l'image actuelle avec l'image d'origine n'est pas une bonne idee : si la nuit tombe, tot ou tard ca sera considere comme une detection de mouvement, et ca sera le cas pour chaque image. |
Effectivement, tu n'as pas tout lu .
Je change l'image d'origine toutes les 60s, voir moins si je souhaite.
La nuit ne tombe pas en 60s, donc je doute avoir des problèmes de ce coté là.
Marsh Posté le 04-05-2005 à 14:54:22
oui pour le "&" c'est parce que j'ai racourci la function.
Sinon dans ton js tu fais passer tes variables comme je l'ai fait dans ma function. non?
Marsh Posté le 04-05-2005 à 14:56:21
Citation : La nuit ne tombe pas en 60s, donc je doute avoir des problèmes de ce coté là. |
Et si près de l'endroit où tu surveille, y'a une lampe qui s'allume à partir d'un certain degré d'ombre, t'a pas peur que ca change entre les 60secondes?
Pareil, si y'a du soleil et que entre les 60s y'a un nuage...
Marsh Posté le 04-05-2005 à 15:01:17
Citation : oui pour le "&" c'est parce que j'ai racourci la function. |
Pas de problèmes, j'ai vu que tu as modifié la fonction entre temps.
Citation : Sinon dans ton js tu fais passer tes variables comme je l'ai fait dans ma function. non? |
Le JS, je ne connais pas du tout. Ca va être un bon moyen de me "plonger" un peu dedans.
Il est donc possible de passer des paramètres à Javascript permettant de les récupérer lors de chaque réactualisation, si j'ai bien compris?
J'ai modifié ta fonction de manière à l'adapter à mon code, ce qui me donne :
Code :
|
Pour l'appel :
Code :
|
Je n'ai pas encore testé, j'ai comme l'impression que ça ne va pas marcher.
J'essaie de suite... mais ce onClick me chagrine. onRefresh, ça n'existe pas (je n'ai pas pris le temps de regarder dsl)?
Citation : Et si près de l'endroit où tu surveille, y'a une lampe qui s'allume à partir d'un certain degré d'ombre, t'a pas peur que ca change entre les 60secondes? |
Bon, admettons que je réactualise l'image d'origine toutes les 5s. Il n'y a plus trop de problèmes non?
Marsh Posté le 04-05-2005 à 15:06:31
oui voila ca permt de garder les variable apres réactualisation.
sinon oui ca devrait marcher n'oublie pas les $_GET['variable']
Marsh Posté le 04-05-2005 à 15:09:58
Citation : Bon, admettons que je réactualise l'image d'origine toutes les 5s. Il n'y a plus trop de problèmes non? |
Imagine un oiseau passe entre les 2 secondes où tu prends la photo et déclenche une lampe à détécteurs de mouvement...il se passe quoi là?
Marsh Posté le 04-05-2005 à 15:21:02
Citation : Imagine un oiseau passe entre les 2 secondes où tu prends la photo et déclenche une lampe à détécteurs de mouvement...il se passe quoi là? |
T'en as d'autres des comme ça?
On peut tourner en rond longtemps avec tes suppositions .
Bref, je réalise ça dans le cadre de mon stage de 2ème Année de DUT Info, donc je ne vais pas non plus surveiller le Louvres ou autres.
Pour dedefou :
j'ai testé, j'ai appelé la fonction au début du fichier fonc_detection_img_temp.php, et j'ai plusieurs vilains messages d'erreur :
Code :
|
Qui correspondent à ces 4 premières lignes :
Code :
|
Marsh Posté le 04-05-2005 à 15:23:59
euh si tu envoie les variable par :
recharge_page('recup_img_origine','$recup_taille','$recup_nom_complet','$recup_creation_nouvelle_img_origine');
c est $recup_taille = $_GET['taille'] qui faut mettre
Marsh Posté le 04-05-2005 à 15:30:26
Citation : T'en as d'autres des comme ça? |
Moi aussi je suis en stage de DUT info.
Mais si je te pose des questions comme ca, c'est parce que vaut mieux que ce soit moi qui te les posent maintenant que tes profs lors de la soutenance.
Marsh Posté le 04-05-2005 à 15:31:13
Citation : Ta pas de session_start() ?? |
Si si, au tout début du fichier : detection_mouvements.php
Citation : euh si tu envoie les variable par : |
En fait, si je fais ça, j'ai des messages d'erreurs, comme quoi les variables sont nulles.
En gros, j'essaie de récupérer des valeurs passées en paramètres alors que je ne suis pas encore passé dans le script, et qu'il n'a par conséquent pas encore envoyé de valeur en paramètre.
J'vous avouerai que c'est en train de me retourner la tête, et que je serai soulagé quand mon script fonctionnera correctement!
Citation : Mais si je te pose des questions comme ca, c'est parce que vaut mieux que ce soit moi qui te les posent maintenant que tes profs lors de la soutenance. |
+1.
Marsh Posté le 04-05-2005 à 15:34:53
euh pour l'histoire des variables qui n'existent pas tu fais un test avec isset()
Marsh Posté le 04-05-2005 à 15:47:16
Citation : euh pour l'histoire des variables qui n'existent pas tu fais un test avec isset() |
Pas de problèmes, je l'utilise souvent, tout comme empty qui ressemble quelque peu.
Je suis en train de tout relire et refaire mon script.
Concrètement, là il me faudrait pouvoir récupérer une seule variable lors de la réactualisation de la page par le JS.
Si j'arrive à récupérer la valeur du compteur, permettant de savoir quand est ce qu'il faut que j'exécute le code pour obtenir une nouvelle image d'origine, alors je pense que je pourrai me débrouiller.
La fonction que tu m'as proposé dedefou, tu l'appellerai où?
Pour le moment je l'appelle dans fonc_detection_img_temp.php à la fin.
La fonction, je l'ai déclaré dans : detection_mouvements.php.
Merci, bien cool de votre part .
Fiiies.
Marsh Posté le 04-05-2005 à 15:51:07
ouaip ca vas bien comme ca ... essai avec les isset et tiens au jus
Marsh Posté le 04-05-2005 à 16:09:31
Citation : ouaip ca vas bien comme ca ... essai avec les isset et tiens au jus |
Ok, donc ça ne marche toujours pas.
Je vais expliquer mon problème :
Voici mon script contenu dans le fichier fonc_detection_img_temp.php(ne prenez pas peur) :
Code :
|
Ne vous occupez pas du code sous :
/* ---------------------------------------- */
/* --- CREATION DE L'IMAGE TEMPORAIRE --- */
/* ---------------------------------------- */
Dans :
/* ----------------------------------------------------- */
/* --- GESTION DE LA CREATION DE L'IMAGE D'ORIGINE --- */
/* ----------------------------------------------------- */
Je vous décris l'algo rapidement pour vous simplifier :
Si la variable $creation_nouvelle_img_origine est définie, alors
Si $creation_nouvelle_img_origine = 60, Alors,
Je crée une image d'origine (équivalent au fait que j'arrive au bout de ma durée de mon image d'origine, donc j'en recrée une).
Sinon
J'incrémente $creation_nouvelle_img_origine de 5.
Sinon (Dans le cas où la variable $creation_nouvelle_img_origine n'est pas définie, le cas du commencement), Alors
Je crée une image d'origine.
J'initialise $creation_nouvelle_img_origine à 0.
Dans mon cas actuel, je boucle dans le cas où la variable n'est pas définie.
Donc, la valeur de ma variable n'est donc pas stockée, ou n'a pas pu être récupérée.
Bref, j'en suis toujours au même point.
Merci.
Fiiies.
Marsh Posté le 04-05-2005 à 16:10:34
Ta quand même pas de bol, y'a toujours un truc qui merde.
Marsh Posté le 04-05-2005 à 16:25:15
euh le lien qui active ta function javascript c est quand que tu clique desus?
Marsh Posté le 04-05-2005 à 17:17:43
Citation : euh le lien qui active ta function javascript c est quand que tu clique desus? |
J'ai une fonction qui rappelle automatiquement l'iframe toutes les X secondes. X secondes paramétrables :
Code :
|
Bon, là je rame encore.
J'arrive enfin à rentrer dans mes tests qui sont en gras ci dessous :
-----------------------------------------------
Si la variable $creation_nouvelle_img_origine est définie, alors
Si $creation_nouvelle_img_origine = 60, Alors,
Je crée une image d'origine (équivalent au fait que j'arrive au bout de ma durée de mon image d'origine, donc j'en recrée une).
Sinon
J'incrémente $creation_nouvelle_img_origine de 5.
Sinon (Dans le cas où la variable $creation_nouvelle_img_origine n'est pas définie, le cas du commencement), Alors
Je crée une image d'origine.
J'initialise $creation_nouvelle_img_origine à 0.
-----------------------------------------------
Mais par contre, je n'arrive toujours pas à récupérer mon image d'origine lors de la comparaison.
Erreur au niveau de la récupération des couleurs. Les arguments $img_origine, $img_temp :
Code :
|
Bref, je galère, je galère...
Merci.
Fiiies.
Marsh Posté le 11-05-2005 à 12:02:48
Citation : ouaip ca vas bien comme ca ... essai avec les isset et tiens au jus |
Comme prévu, je te tiens au jus .
Donc pour le moment, ma détection de mouvement marche impeccable. Comparaison au maximum toutes les 2s avec l'image d'origine.
S'il y a mouvement, alors les images détectées sont stockées dans un répertoire de cette manière :
/Detection/Date (ex : 2005-05-11)/Créneau horaire (ex : 09H-10H)
Je gère le changement de jour, ainsi que le changement d'heure.
Si je débute une séquence à 23h59 le 2005-05-15, automatiquement ca va me créer un répertoire :
2005-05-16/00H-01H pour les images qui seront détectées dès minuit. (j'espère me faire comprendre).
Bref, tout ceci marche impeccable.
Egalement, j'ai géré un journal.
Lorsque je désactive cette détection de mouvement, automatiquement, un fichier est généré ayant pour nom :
journal_datedebut_heuredebut___datefin_heurefin.txt (ex : journal_2005-05-11_11-04-19_au_2005-05-11_11-05-30.txt)
Ce fichier contient le début de la détection (date + heure), le nombre d'images enregistrées durant cette détection, les noms des images, la taille qu'occupent ces images, la fin de détection (date + heure).
En voici un exemple :
Code :
|
Bon, j'ai bien galéré, mais au final je suis assez satisfait.
Là, je suis en train de créer une page qui me proposera de télécharger le journal une fois que l'on termine la détection de mouvement.
Bref, si tu as des questions, n'hésite pas.
@+
Fiiies
Marsh Posté le 04-05-2005 à 11:30:37
Bonjour à tous,
Je suis bloqué depuis 3 4 jours sur un problème qui commence à m'inquiéter...
Je vais tenter de décrire au mieux mon problème, et ma requête.
Ne vous faites pas de soucis, la compréhension de ce post est aisée.
Je dois développer une application permettant de détecter les mouvements du flux vidéo d'une Caméra sur IP.
Voici le principe que j'applique, que j'ai rédigé sous word (je le mets en citation pour mieux le distinguer) :
Pour détecter un mouvement, il suffit de comparer les couleurs des pixels de limage actuelle avec les couleurs des pixels de limage précédente (limage précédente étant à X secondes avant, X étant réglé par le développeur).
Si la couleur du pixel ne fait pas partie de lintervalle [CouleurRef 100000, CouleurRef + 100000], alors cela incrémente le compteur derreur.
Si le rapport entre le nombre derreurs et le nombre de pixels présents dans limage, est supérieur à Y% (Y étant paramétrable), alors on considère quil y a eu un mouvement.
Sil y a eu détection de mouvement, alors on prend une image Z secondes après la détection de ce mouvement. Z étant également paramétrable.
Bref, pour réaliser ceci, j'ai choisi une méthode qui me semble réalisable, bien que ce ne soit pas forcément la plus logique :
Tout d'abord, lorsque l'utilisateur clique sur Activer la détection de mouvement, je stocke l'image au moment où il clique et celle ci fera office d'image de référence ou d'origine. Les autres images que je vais capturer seront comparées à celle ci.
Puis, selon l'interval que l'utilisateur choisit, toutes les X secondes, je compare l'image d'origine avec ces nouvelles images.
Exemple : sur 30s, si l'utilisateur choisit un interval de 2s pour la comparaison d'image, il y aura une image de référence stockée et 15 images (30/2) à comparer avec cette image de référence. (Par défaut, je change l'image d'origine toutes les 60s).
Voici comment je procède pour réaliser ceci :
J'ai plusieurs fichiers :
- detection_mouvements.php : fichier principale où je vais appeler mes autres fichiers qui vont suivre.
- fonc_detection_img_origine.php : fichier qui permet de récupérer et stocker une image d'origine.
- fonc_detection_img_temp.php : fichier qui permet de récupérer et stocker une image temporaire.
- fonc_detection_traitement.php : fichier où l'algorithme de comparaison des deux fichiers s'exécute.
J'ai deux iframes :
Pour rappeler ces deux iframes qui appellent les deux fonctions permettant de stocker les images, j'ai deux fonctions Javascript :
J'espère que jusque là, vous comprenez.
Concrètement, je passe par des iframes pour m'éviter de rappeler toute la page d'origine [b]detection_mouvements.php qui elle appelle la fonction permettant de récupérer le flux vidéo de la caméra.
Si je ne passe pas par des iframes, ça rafraichit toute la page, et ça rame de trop.
Voici le code de mon fichier fonc_detection_img_temp.php :
Voici le code de mon fichier fonc_detection_img_temp.php :
Voici le code de mon fichier fonc_detection_traitement.php :
Bref, le gros problème, c'est que lorsque j'appelle l'iframe contenant le fichier permettant de créer une image d'origine, ça marche.
Mais lorsque j'appelle l'iframe contenant le fichier permettant de créer une image temporaire, ça ne marche pas, car ça n'arrive pas à trouver l'image d'origine. Donc forcément, lors de l'appel du traitement, ça compare l'image temporaire à rien du tout.
Il m'est impossible de récupérer l'image d'origine et de la stocker quelque part.
J'ai beau essayer avec des variables de Session, des $GLOBALS, rien n'y fait.
Ci dessous, un screen shot de mon appli :
Merci bien, vous verrez, ce n'est pas si compliqué que ça .
Bonne lecture et réflexion.
Thanks.
Fiiies.
Message édité par Fiiies1 le 04-05-2005 à 13:42:37