Aide : Détection de mouvement

Aide : Détection de mouvement - PHP - Programmation

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

Citation :

Pour détecter un mouvement, il suffit de comparer les couleurs des pixels de l’image actuelle avec les couleurs des pixels de l’image précédente (l’image 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 l’intervalle [CouleurRef –100000, CouleurRef + 100000], alors cela incrémente le compteur d’erreur.
 
Si le rapport entre le nombre d’erreurs et le nombre de pixels présents dans l’image, est supérieur à Y% (Y étant paramétrable), alors on considère qu’il y a eu un mouvement.
 
S’il 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 :

Code :
  1. <iframe src="fonc_detection_img_origine.php" width="500" height="500" name="zone_img_origine" frameborder="0" id="zone_img_origine"></iframe>
  2. <iframe src="fonc_detection_img_temp.php" width="500" height="500" name="zone_img_temp" frameborder="0" id="zone_img_temp"></iframe>


 
• Pour rappeler ces deux iframes qui appellent les deux fonctions permettant de stocker les images, j'ai deux fonctions Javascript :

Code :
  1. function Rafraichir_image_temp() {
  2.   setTimeout("Rafraichir_image_temp()",5000);
  3.   document.frames["zone_img_temp"].location.reload();
  4. }
  5. function Rafraichir_image_origine() {
  6.   setTimeout("Rafraichir_image_origine()",60000);
  7.   document.frames["zone_img_origine"].location.reload();
  8. }


 
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 :
 

Code :
  1. <?php
  2. function creation_image_origine()
  3. {
  4.  $aujourdhui = date('Y-m-d'); // Format AAAA-MM-JJ
  5.  $heure = date('G-i-s'); // Format HH-MN-SS
  6.  // Nom donné à l'image    
  7.  $new_nom = 'temp_'.$aujourdhui.'_'.$heure;
  8.  // Chemin où sera placée temporairement l'image
  9.  $chemin_temp = 'camera/images/detection/temp_detection/'.$new_nom.'jpg';
  10.  // Copie de l'image dans un répertoire temporaire
  11.  if (!copy ("http://admin:admin@192.168.0.99/cgi-bin/video.jpg", 'camera/images/detection/temp_detection/origine_'.$new_nom.'.jpg'))
  12.   echo "<b><center>Problème au niveau du stockage temporaire de la photo !</center></b>";
  13.  $nom_complet = 'camera/images/detection/temp_detection/origine_'.$new_nom.'.jpg';
  14.  return ($nom_complet);
  15. }
  16. // Appel de la fonction qui stocke l'image et retourne son nom complet  
  17. $nom_complet_img_origine = creation_image_origine();
  18. // Récupération de la taille (Largeur, Hauteur & co) de l'image à comparer
  19. $_SESSION['taille'] = getimagesize($nom_complet_img_origine);
  20. // Création de l'image avec la fonction ImageCreateFromJpeg de la librairie GD  
  21. $_SESSION['image_origine'] = ImageCreateFromJpeg($nom_complet_img_origine);
  22. if (isset($_SESSION['appel']))
  23. {
  24.  if (($_SESSION['appel']) == 1)
  25.  {
  26.   $_SESSION['appel'] = 0;
  27.  }
  28.  else
  29.  {
  30.   include_once ('fonc_detection_img_temp.php');
  31.   $_SESSION['appel'] = 0;
  32.  }
  33. }
  34. else
  35. {
  36.  include_once ('fonc_detection_img_temp.php');
  37.  $_SESSION['appel'] = 0;
  38. }
  39. ?>


 
Voici le code de mon fichier fonc_detection_img_temp.php :
 

Code :
  1. <?php
  2. function creation_image_temp()
  3. {
  4.  $aujourdhui = date('Y-m-d'); // Format AAAA-MM-JJ
  5.  $heure = date('G-i-s'); // Format HH-MN-SS
  6.  // Nom donné à l'image    
  7.  $new_nom = 'temp_'.$aujourdhui.'_'.$heure;
  8.  // Chemin où sera placée temporairement l'image
  9.  $chemin_temp = 'camera/images/detection/temp_detection/'.$new_nom.'jpg';
  10.  // Copie de l'image dans un répertoire temporaire
  11.  if (!copy ("http://admin:admin@192.168.0.99/cgi-bin/video.jpg", 'camera/images/detection/temp_detection/'.$new_nom.'.jpg'))
  12.   echo "<b><center>Problème au niveau du stockage temporaire de la photo !</center></b>";
  13.  $nom_complet = 'camera/images/detection/temp_detection/'.$new_nom.'.jpg';
  14.  return ($nom_complet);
  15. }
  16. // Mêmes opérations qu'avec l'image à comparer ($nom_complet_img_origine)
  17. $nom_complet_img_temp = creation_image_temp();
  18. $_SESSION['image_temp'] = ImageCreateFromJpeg($nom_complet_img_temp);
  19. $_SESSION['appel'] = 1;
  20. include_once ('fonc_detection_img_origine.php');
  21. include_once ('fonc_detection_traitement.php');
  22. traitement();
  23. ?>


 
Voici le code de mon fichier fonc_detection_traitement.php :
 

Code :
  1. <?php
  2. function traitement()
  3. {
  4.  $erreur = 0;
  5.  $x = 0;
  6.  $y = 0;
  7.  // Récupération de la taille OK
  8.  $laTaille = $_SESSION['taille'];
  9.  // Récupération de l'image créée par createImageFromJpeg OK
  10.  $img_origine = $_SESSION['image_origine'];
  11.  $img_temp = $_SESSION['image_temp'];
  12.  echo "SESSION = <br />";
  13.  foreach($_SESSION AS $key=>$val) {
  14.   echo "$key = $val<br />";
  15.  }
  16.  $temp1 = microtime();
  17.  for ($x=0; $x<$laTaille[0]; $x = $x+1)
  18.  {
  19.   for ($y=0; $y<$laTaille[1]; $y = $y+1)
  20.   {
  21.    $couleur_img_origine = imagecolorat($img_origine, $x, $y);
  22.    $couleur_img_temp = imagecolorat($img_temp, $x, $y);
  23.    if (($couleur_img_temp > $couleur_img_origine + 500000) || ($couleur_img_temp < $couleur_img_origine - 500000))
  24.    {
  25.     $erreur++;
  26.    }
  27.   }
  28.  }
  29.  $temp2 = microtime();
  30.  // Calcul du temps d'execution pour la comparaison des deux images (double boucle "FOR" imbriquée)
  31.  $temp_execution = $temp2 - $temp1;
  32.  echo "<br><center><b>Temps d'exécution total :</b> $temp_execution</center><br>";
  33.  echo "<center><b>Nombre total d'erreurs :</b> $erreur</center><br>";
  34. }
  35. ?>


 
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 :
 
http://fiiies.free.fr/Camera/screen_shot_detection_mouvement2.jpg
 
 
Merci bien, vous verrez, ce n'est pas si compliqué que ça :D .
 
Bonne lecture et réflexion.
 
Thanks.
 
Fiiies.


Message édité par Fiiies1 le 04-05-2005 à 13:42:37
Reply

Marsh Posté le 04-05-2005 à 11:30:37   

Reply

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.

Reply

Marsh Posté le 04-05-2005 à 13:33:32    

Moi j'ai tout lu

Reply

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++)
 
:D


Message édité par dedefou le 04-05-2005 à 13:35:18
Reply

Marsh Posté le 04-05-2005 à 13:36:51    

pareil pour for($x=0; $x<$laTaille[0]; $x+1)

Reply

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

Reply

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 :
  1. if (isset($_SESSION['img_origine']))
  2.    echo "OK";
  3. else
  4.    echo "PAS OK";


 
Je rentre direct dans le ELSE. La variable n'est pas défini en fait. :sarcastic:  
 
Merci.
Et ReMerci d'avoir lu entièrement mon post  :wahoo:
 
EDIT :
 

Citation :

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++)


 
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. ;)


Message édité par Fiiies1 le 04-05-2005 à 13:41:27
Reply

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>

Reply

Marsh Posté le 04-05-2005 à 13:55:06    

Citation :

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>


 
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. ;)

Reply

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"

Reply

Marsh Posté le 04-05-2005 à 14:01:10   

Reply

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.


Message édité par skeye le 04-05-2005 à 14:01:34

---------------
Can't buy what I want because it's free -
Reply

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. :sarcastic:. 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. :sarcastic:   :sarcastic:  
 
Merci à vous en tous les cas.  
Sympathique de m'aider.
 
Fiiies.


Message édité par Fiiies1 le 04-05-2005 à 14:24:24
Reply

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.

Reply

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. :sarcastic:. 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. :sarcastic:   :sarcastic:  
 
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.  :sarcastic:  :sarcastic:  
 
Grrr, ça m'agace cette histoire.
 
Merci à vous.
 
Fiiies


Message édité par Fiiies1 le 04-05-2005 à 14:33:51
Reply

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 :
  1. function recharge_page(user)
  2. {
  3. location.href = location.pathname + "?&user=" + user;
  4. }


 
code php qui appel cette function

Code :
  1. <?
  2. echo "<a href='' onclick=\"recharge_page('$user');\"></A>";
  3. ?>


Message édité par dedefou le 04-05-2005 à 14:38:54
Reply

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 ;)

Reply

Marsh Posté le 04-05-2005 à 14:48:28    

Code :
  1. location.href = location.pathname + "?&user=" + user;


 
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 :
  1. <?
  2. echo "<a href='' onclick=\"recharge_page('$user');\"></A>";
  3. ?>


 
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.  
 
Mieux vaut comparer l'image actuelle a l'image precedente


 
Effectivement, tu n'as pas tout lu :D.
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à.


Message édité par Fiiies1 le 04-05-2005 à 14:49:37
Reply

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?

Reply

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

Reply

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 :
  1. function recharge_page(img_origine, taille, nom_complet, creation_nouvelle_img_origine)
  2. {
  3.    location.href = location.pathname + "?division=" + 1 + "&img_origine=" + img_origine + "&taille=" + taille + "&nom_complet=" + nom_complet + "&creation_nouvelle_img_origine=" + creation_nouvelle_img_origine;
  4. }


 
Pour l'appel :
 

Code :
  1. echo "<a href='' onclick=\"recharge_page('$_SESSION['image_origine']','$_SESSION['taille']','$_SESSION['nom_complet']','$_SESSION['creation_nouvelle_img_origine']');\"></A>";


 
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?  
Pareil, si y'a du soleil et que entre les 60s y'a un nuage...


 
Bon, admettons que je réactualise l'image d'origine toutes les 5s. Il n'y a plus trop de problèmes non?  :pt1cable:


Message édité par Fiiies1 le 04-05-2005 à 15:03:01
Reply

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'] :D

Reply

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


 
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à? :)

Reply

Marsh Posté le 04-05-2005 à 15:14:30    

MDR

Reply

Marsh Posté le 04-05-2005 à 15:16:23    

Il faut imaginer toutes les possibilités

Reply

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? :D
On peut tourner en rond longtemps avec tes suppositions :na:.
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 :
  1. Notice: Undefined variable: _SESSION in c:\program files\easyphp1-8\www\fonc_detection_img_temp.php on line 3
  2. Notice: Undefined variable: _SESSION in c:\program files\easyphp1-8\www\fonc_detection_img_temp.php on line 4
  3. Notice: Undefined variable: _SESSION in c:\program files\easyphp1-8\www\fonc_detection_img_temp.php on line 5
  4. Notice: Undefined variable: _SESSION in c:\program files\easyphp1-8\www\fonc_detection_img_temp.php on line 6


 
Qui correspondent à ces 4 premières lignes :
 

Code :
  1. <?php
  2. $recup_img_origine = $_SESSION['image_origine'];
  3. $recup_taille = $_SESSION['taille'];
  4. $recup_nom_complet = $_SESSION['nom_complet'];
  5. $recup_creation_nouvelle_img_origine = $_SESSION['creation_nouvelle_img_origine'];
  6. echo "<A HREF='' onclick=\"recharge_page('recup_img_origine','$recup_taille','$recup_nom_complet','$recup_creation_nouvelle_img_origine');\"></A>";
  7. ...
  8. ...
  9. ?>


Message édité par Fiiies1 le 04-05-2005 à 15:21:27
Reply

Marsh Posté le 04-05-2005 à 15:23:04    

Ta pas de session_start() ??

Reply

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

Reply

Marsh Posté le 04-05-2005 à 15:30:26    

Citation :

T'en as d'autres des comme ça? :D  
On peut tourner en rond longtemps avec tes suppositions :na:.  
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. ;)  


 
Moi aussi je suis en stage de DUT info.  :hello:  
 
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. :)

Reply

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 :  
recharge_page('recup_img_origine','$recup_taille','$recup_nom_complet','$recup_creation_nouvelle_img_origine');  
c est $recup_taille = $_GET['taille'] qui faut mettre


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

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.


Message édité par Fiiies1 le 04-05-2005 à 15:32:04
Reply

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()


Message édité par dedefou le 04-05-2005 à 15:36:55
Reply

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.


Message édité par Fiiies1 le 04-05-2005 à 15:47:39
Reply

Marsh Posté le 04-05-2005 à 15:51:07    

ouaip ca vas bien comme ca ... essai avec les isset et tiens au jus

Reply

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 :
  1. <?php
  2. /* --------------------------------------------------- */
  3. /* --- GESTION DE LA CREATION DE L'IMAGE D'ORIGINE --- */
  4. /* --------------------------------------------------- */
  5. if (isset($creation_nouvelle_img_origine))
  6. {
  7.  if ($creation_nouvelle_img_origine == 60)
  8.  {
  9.   echo "<center>PASSAGE DANS TEST 60</center>";
  10.   $aujourdhui = date('Y-m-d'); // Format AAAA-MM-JJ
  11.   $heure = date('G-i-s'); // Format HH-MN-SS
  12.   // Nom donné à l'image    
  13.   $new_nom = 'temp_'.$aujourdhui.'_'.$heure;
  14.   // Chemin où sera placée temporairement l'image
  15.   $chemin_temp = 'camera/images/detection/temp_detection/'.$new_nom.'jpg';
  16.   // Copie de l'image dans un répertoire temporaire
  17.   if (!copy ("http://admin:admin@192.168.0.99/cgi-bin/video.jpg", 'camera/images/detection/temp_detection/origine_'.$new_nom.'.jpg'))
  18.    echo "<b><center>Problème au niveau du stockage temporaire de la photo !</center></b>";
  19.   $_SESSION['nom_complet'] = 'camera/images/detection/temp_detection/origine_'.$new_nom.'.jpg';
  20.   // Récupération de la taille (Largeur, Hauteur & co) de l'image à comparer
  21.   $_SESSION['taille'] = getimagesize($_SESSION['nom_complet']);
  22.   // Création de l'image avec la fonction ImageCreateFromJpeg de la librairie GD  
  23.   $_SESSION['image_origine'] = ImageCreateFromJpeg($_SESSION['nom_complet']);
  24.   $_SESSION['creation_nouvelle_img_origine'] = 0;
  25.  }
  26.  else
  27.   $_SESSION['$creation_nouvelle_img_origine'] = $_SESSION['$creation_nouvelle_img_origine'] + 5;
  28. }
  29. else
  30. {
  31.  echo "<center>NON PASSAGE DANS TEST 60</center>";
  32.  $aujourdhui = date('Y-m-d'); // Format AAAA-MM-JJ
  33.  $heure = date('G-i-s'); // Format HH-MN-SS
  34.  // Nom donné à l'image    
  35.  $new_nom = 'temp_'.$aujourdhui.'_'.$heure;
  36.  // Chemin où sera placée temporairement l'image
  37.  $chemin_temp = 'camera/images/detection/temp_detection/'.$new_nom.'jpg';
  38.  // Copie de l'image dans un répertoire temporaire
  39.  if (!copy ("http://admin:admin@192.168.0.99/cgi-bin/video.jpg", 'camera/images/detection/temp_detection/origine_'.$new_nom.'.jpg'))
  40.   echo "<b><center>Problème au niveau du stockage temporaire de la photo !</center></b>";
  41.  $_SESSION['nom_complet'] = 'camera/images/detection/temp_detection/origine_'.$new_nom.'.jpg';
  42.  // Récupération de la taille (Largeur, Hauteur & co) de l'image à comparer
  43.  $_SESSION['taille'] = getimagesize($_SESSION['nom_complet']);
  44.  // Création de l'image avec la fonction ImageCreateFromJpeg de la librairie GD  
  45.  $_SESSION['image_origine'] = ImageCreateFromJpeg($_SESSION['nom_complet']);
  46.  $creation_nouvelle_img_origine = 0;
  47. }
  48. /* -------------------------------------- */
  49. /* --- CREATION DE L'IMAGE TEMPORAIRE --- */
  50. /* -------------------------------------- */
  51. $aujourdhui = date('Y-m-d'); // Format AAAA-MM-JJ
  52. $heure = date('G-i-s'); // Format HH-MN-SS
  53. // Nom donné à l'image    
  54. $new_nom = 'temp_'.$aujourdhui.'_'.$heure;
  55. // Chemin où sera placée temporairement l'image
  56. $chemin_temp = 'camera/images/detection/temp_detection/'.$new_nom.'jpg';
  57. // Copie de l'image dans un répertoire temporaire
  58. if (!copy ("http://admin:admin@192.168.0.99/cgi-bin/video.jpg", 'camera/images/detection/temp_detection/'.$new_nom.'.jpg'))
  59.  echo "<b><center>Problème au niveau du stockage temporaire de la photo !</center></b>";
  60. $nom_complet = 'camera/images/detection/temp_detection/'.$new_nom.'.jpg';
  61. $_SESSION['image_temp'] = ImageCreateFromJpeg($nom_complet);
  62. include_once ('fonc_detection_traitement.php');
  63. traitement();
  64. /*--------------------------------------------------------------------------------- */
  65. /* --- GESTION DE LA RECUPERATION DE VALEURS PAR L'APPEL DE FONCTION JAVASCRIPT --- */
  66. /*--------------------------------------------------------------------------------- */
  67. if (isset($_GET['recup_creation_nouvelle_img_origine']))
  68. {
  69.  $recup_creation_nouvelle_img_origine = $_GET['recup_creation_nouvelle_img_origine'];
  70.  echo "<A HREF='' onclick=\"recharge_page('$recup_creation_nouvelle_img_origine');\"></A>";
  71. }
  72. ?>


 
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.  :sarcastic:  
 
Merci.
 
Fiiies. ;)


Message édité par Fiiies1 le 04-05-2005 à 16:10:50
Reply

Marsh Posté le 04-05-2005 à 16:10:34    

Ta quand même pas de bol, y'a toujours un truc qui merde.

Reply

Marsh Posté le 04-05-2005 à 16:25:15    

euh le lien qui active ta function javascript c est quand que tu clique desus?

Reply

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 :
  1. function Rafraichir_image_temp() {
  2.   setTimeout("Rafraichir_image_temp()",5000);
  3.   document.frames["zone_img_temp"].location.reload(); 
  4. }


 
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 :
  1. for ($x=0; $x<$laTaille[0]; $x = $x+1)
  2.         {
  3.             for ($y=0; $y<$laTaille[1]; $y = $y+1)
  4.             {
  5.                 $couleur_img_origine = imagecolorat($img_origine, $x, $y);
  6.                 $couleur_img_temp = imagecolorat($img_temp, $x, $y);
  7.                
  8.                 if (($couleur_img_temp > $couleur_img_origine + 500000) || ($couleur_img_temp < $couleur_img_origine - 500000))
  9.                 {
  10.                     $erreur++;
  11.                 }
  12.             }
  13.         }


 
Bref, je galère, je galère...
 
Merci.
 
Fiiies.

Reply

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 :
  1. ======================================================
  2. ---===                                          ===---
  3. ---=== Journalisation de détection de mouvement ===---
  4. ---===                                          ===---
  5. ======================================================
  6. Date début : 2005-05-11
  7. ------------------------------------------------------
  8. Heure début : 11-04-19
  9. ======================================================
  10. Nom des images :
  11. 2005-05-11_11-04-24.jpg
  12. 2005-05-11_11-04-26.jpg
  13. 2005-05-11_11-04-27.jpg
  14. 2005-05-11_11-04-29.jpg
  15. 2005-05-11_11-04-31.jpg
  16. 2005-05-11_11-04-32.jpg
  17. 2005-05-11_11-04-34.jpg
  18. 2005-05-11_11-04-36.jpg
  19. 2005-05-11_11-04-37.jpg
  20. 2005-05-11_11-04-39.jpg
  21. 2005-05-11_11-04-41.jpg
  22. 2005-05-11_11-04-42.jpg
  23. 2005-05-11_11-04-44.jpg
  24. 2005-05-11_11-04-45.jpg
  25. 2005-05-11_11-04-47.jpg
  26. 2005-05-11_11-04-49.jpg
  27. 2005-05-11_11-04-50.jpg
  28. 2005-05-11_11-04-52.jpg
  29. 2005-05-11_11-04-54.jpg
  30. 2005-05-11_11-04-56.jpg
  31. 2005-05-11_11-04-57.jpg
  32. 2005-05-11_11-04-59.jpg
  33. 2005-05-11_11-05-01.jpg
  34. 2005-05-11_11-05-02.jpg
  35. 2005-05-11_11-05-04.jpg
  36. 2005-05-11_11-05-05.jpg
  37. 2005-05-11_11-05-07.jpg
  38. 2005-05-11_11-05-09.jpg
  39. 2005-05-11_11-05-10.jpg
  40. 2005-05-11_11-05-12.jpg
  41. 2005-05-11_11-05-14.jpg
  42. 2005-05-11_11-05-17.jpg
  43. 2005-05-11_11-05-19.jpg
  44. 2005-05-11_11-05-20.jpg
  45. 2005-05-11_11-05-22.jpg
  46. 2005-05-11_11-05-23.jpg
  47. 2005-05-11_11-05-25.jpg
  48. 2005-05-11_11-05-27.jpg
  49. 2005-05-11_11-05-29.jpg
  50. Nombre total d'image(s) : 39
  51. ======================================================
  52. Taille totale : 684214 Octets
  53. ------------------------------------------------------
  54. Date fin : 2005-05-11
  55. ------------------------------------------------------
  56. Heure fin : 11-05-30
  57. ------------------------------------------------------


 
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 ;)

Reply

Marsh Posté le 11-05-2005 à 12:05:53    

nikel tout ca.  
 
le but est de etre satisfait

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed