Melia : Algorithme de détection de mouvement basé sur une prise en rafale de photos

La création de cet algorithme naît de la nécessité d’affiner la détection d’un mouvement à partir d’une prise en rafale déclenchée par un capteur infrarouge. Afin de n’extraire que les clichés résultant d’un mouvement dans une zone précise (Region Of Interest), on se propose d’utiliser Python et la librairie OpenCV.

Pour cela, on se base sur une série de photos prises en rafale et on effectue une comparaison de deux images. Un mouvement a été simulé en bougeant une figurine entre deux clichés successifs. Le script se base sur la différence entre ces deux clichés en utilisant le Structural Similarity Index (SSIM).

Exemple

Les résultats sont les suivants :




Figure 1 – Simulation avec une figurine

Par exemple, entre ces deux clichés, le SSIM est de 0.73. Comme le seuil initial est défini à 0.98, le script perçoit cela comme un mouvement majeur.

À termes, ce script se révèle intéressant pour traiter un grand nombre de données (comme par exemple un ensemble de photos prises par une camera de surveillance à détection infrarouge). Sur un grand nombre de clichés, le script permet de ne garder que ceux présentant un mouvement d’une personne ou d’un véhicule dans une zone donnée.

En exterieur, on peut ainsi s’affranchir des clichés résultant du mouvement de l’environnement (à cause du vent par exemple). Pour faire cela, on réalise une détection de seuil (threshold) qui permet de détourer les zones où un mouvement a été détecté. Si ces zones sont trop nombreuses (fixé arbitairement à 20), on considère que qu’il s’agit de “bruit” du au mouvement de l’environnement.

Versions

Deux versions sont proposées :

  • Melia Console : une version console uniquement qui une fois configurée n’a plus qu’à être exécutée ;
  • Melia GUI : une version GUI qui permet l’affichage des zones où le mouvement est détecté et une configuration simplifiée.


Figure 2 – Environnement GUI

Les chemins sont stockés dans un fichier config.txt. La première ligne correspond à l’emplacement des photos à traiter, la seconde est l’emplacement où seront sauvegardées les photos d’intérêt.

Prérequis

Dans tous les cas, il sera nécessaire d’installer Python 3.7 et de charger les librairies suivantes :

  • scikit-image
  • imutils
  • opencv-python
  • shutil
  • glob
  • os
  • datetime

Remarque : si elle ne sont pas installées par défaut, les charger avec un utilitaire de librairie tel que pip. Dans certains cas sous Windows, des erreurs apparaissent du fait de DLL manquantes. Le problème peut être résolu en installant Visual C++ Redist 2015.

Comment se procurer les scripts ?

Les scripts et l’exemple : en téléchargment direct ou sur GitHub .
Remarque : avant de les exécuter, penser à indiquer les chemins dans le fichier config.txt.

Le détail du fonctionnement du script est donné dans les fichiers py.