Traitement d'information:

 

 

         Le traitement de l'image est effectué par la caméra qui peut même déclencher seule l'alarme en cas de problème. Cette caméra IP prend une photo environ toutes les 30 secondes et la dépose sur le serveurs FTP . L'image est compressée au format jpeg puis au format bmp afin de faciliter le téléchargement . Ensuite , l'image est convertie en noir et blanc par une conversion de pixel . Tout ce protocole est réalisé dans le but de faire facilement la différence entre deux images .

 

 

         En effet , à chaque image , un programme détermine le nombre de pixels noirs présent dans l'image . Ainsi , lors d'une intrusion , la caméra détecte une grande différence de pixels noir entre deux images succéssives et enclenche l'alarme . Il est important que la comparaison se fasse entre deux images continuelles et non avec plusieurs heures d'écart car dans le cas contraire , la caméra ne fait pas la différence entre une intrusion et le coucher ou lever du soleil .


 

 

 

Pour cela , un programme est établie sous forme SOURCE :

 

[PROGRAMME]

 

 

 

SCRIPT DE CAPTURE D'IMAGE

 

#!/bin/bash
ftp -n PC6_2 <<FINREDIR
user invite1 polie32
cd /home/invite1/
get image.jpg
quit
FINREDIR
djpeg -bmp image.jpg

 

 

 

 

SOURCE C++ DE LA DETECTION

 

using namespace std;
#include <iostream>// coout
#include<stdlib.h> // exit
#include<sys/types.h> // open
#include<sys/stat.h> // open
#include<fcntl.h> // open
#include<unistd.h> // read,close


int main ()
{
int fichier,i,j,nbr1,nbr2
int erreur
char chemin[]="/home/tsieri/Projets/Detect/image.bmp";
unsigned char entete[54] ;
unsigned char pixels[921600];
float r,v,b,g;


          do
          {
                  //Capture image par appel script
                  systeme("./capture");
                  // Ouverture du fichier
                  fichier = open(chemin , O_RDONLY);
                  if (fichier == -1)
                  {
                       cout <<"erreur ouverture image couleur"<<endl;
                       exit (0);
                  }
          // Lecture de l'entete et des pixels dans un tableau
                  i = read (fichier,entete ,54) ;
                  if (i !=54)
                  }
                       cout <<"erreur lecture entete image couleur"<<endl;
                       close(fichier);
                       exit (0);
                  }
                  read (fichier,pixels ,921600) ;
                  if (i !=921600)
                  {
                       cout <<"erreur lecture pixels image couleur"<<endl;
                       close(fichier);
                       exit (0);
                  }
                  // Fermeture du fichier
                  close(fichier);
                  //Conversion en Noir et Blanc avec comptage
                  //pixels noirs dans nbr2
                  nbr2=0;//raz comptage
                  j = 0;//pour offset pixels
                  for(i=0;i<(921600/3);i++)
                  {
                       r= (float)pixels[j];
                       v= (float)pixels[j+1];
                       b= (float)pixels[j+2];
                       g=(b*0.114) +(v*0.587) + (r*0.229) ;//niveau de gris
                       if(g<90)
                       {
                              //pixel en noir
                              pixels[j];
                              pixels[j+1];
                              pixels[j+2];
                              nbr2++; //pour compter le nombre de pixels noirs
                       }
                       else
                       {
                              //pixel en blanc
                              pixels[j]=255;
                              pixels[j+1]=255
                              pixels[j+2]=255
                       }
                       j=j+3;
                  }
                  //Creation du fichier imageNB.bmp Noir et Blanc ( entete identique)
                  fichier= open("/home/tsieri/Projets/Detect/imageNB.bmp",O_WRONLY | O_CREAT,S_IRWRXU) ;
                  if (fichier == -1)
                  {
                       cout <<"creation image noir et blanc"<<endl;                 
                       exit (0);
                  }
                  //ecriture entete
                  i = write(fichier,entete,54);
                  if (i !=54)
                  {
                       cout <<"erreur ecriture entete image noir et blanc"<<endl;
                       close(fichier);
                       exit (0);
                  }
                  //ecriture pixels Noirs et blancs
                  i = write(fichier,pixels,921600);
                  if (i !=921600)
                  {
                       cout <<"erreur ecriture pixels image noir et blanc"<<endl;
                       close(fichier);
                       exit (0);
                  }
                  //fermeture fichier
                  close(fichier);
                  //declenchement alarme si nbr2 different de nbr1 a 100pixels pres
                  if ((nbr2 < nbr1 + 1000) && (nbr2 > nbr1 - 1000))
                  {
                       nbr1=nbr2;
                  }
                  else
                  {
                       cout<<"alarme""<<endl;
                       nbr1=nbr2;
                  }
                  sleep(10);
          }while(1);
}
 

 

 


Créer un site internet gratuit Webnode