Rapport PFA [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Université de Tunis El Manar

Département Physique

Projet de Fin d’Année Système Embarqué De Contrôle D’Accès Par La Reconnaissance Faciale Et Streaming Via Web

Réalisé par : Ouni Houssem

Ben Othman Mohamed

Classe : IE4 Encadrants :

Mr. Chokri Gammoudi Mme. Ibtissem Malouche

Année universitaire 2020/2021

Remerciement Nous tenons tout d’abord à remercier Dieu le tout puissant et miséricordieux, qui nous a donné la force et la patience d’accomplir ce modeste travail. Nos remerciements s’étendent également à nos encadreurs Mr. Chokri Gammoudi Mme. Ibtissem Malouche Pour ses bonnes explications qui nous ont éclairé le chemin de la recherche et ses collaboration avec nous dans l’accomplissement de ce modeste travail. Ainsi que Nos vifs remerciements vont également aux membres du jury pour l’intérêt qu’ils ont porté à notre recherche en acceptant d’examiner notre travail Et de l’enrichir par leurs propositions. Enfin, on remercie tous ceux qui, de près ou de loin, ont contribué à la réalisation de ce travail.

Résumé

Notre projet s'articule autour de la reconnaissance faciale utilisant l'intelligence artificielle et l'Internet des objets.

Abstract Our project revolves around facial recognition using artificial intelligence and the Internet of Things.

‫ملخص‬ .‫مشروعنا يتمحور حول التعرف على الوجوه بإستعمال الذكاء اإلصطناعي و انترنات األشياء‬

Table De Matière Introduction Générale ............................................................................................................. 1 Chapitre1 : Les Systèmes Biométriques 1. Introduction: .................................................................................................................... 2 2.

Les Systèmes Biométriques ............................................................................................. 3

3.

Systèmes biométriques basée sur la réconnaissance des visages .................................... 3

3.1 Principales difficultées de la reconnaissance de visage ................................................... 5 3.2. Variation des Poses .......................................................................................................... 6 3.3. Expression Faciales ......................................................................................................... 6 3.4. Présance ou absencs des composants structurels ............................................................. 6 3.5. Occultations partielles ..................................................................................................... 7 4.

Haar Cascade – Detection des visages et d’Objet ........................................................... 7

5.

Conclusion ....................................................................................................................... 9

Chapitre2 : Discrption et préparation du système embarquée 1.

Introduction: ................................................................................................................. 10

2.

Présentation du Raspberry PI ........................................................................................ 10

2.1 Les caractéristiques du Raspberry Pi ............................................................................. 11 2.2 Accessoires de Raspberry Pi.......................................................................................... 12 2.3 Vue d’ensemble ............................................................................................................. 12 2.4. Domaine d’utilisation .................................................................................................... 12 2.5. Connecteurs et ports disponibles ................................................................................... 13 3.

Unix .............................................................................................................................. 14

3.1. Raspbian ....................................................................................................................... 16 3.2. Raspbian Stretch ........................................................................................................... 16 3.3. Unstallation et démarage de système ............................................................................ 17 3.4. Prendre le controlle de Raspberry PI ............................................................................ 17 3.5 SecureSHell .................................................................................................................. 17 3.6 Virtual Network Computing ......................................................................................... 19 4.

Python ........................................................................................................................... 20

4.1 Point fort de Language ................................................................................................. 21 4.2 Programmation des entrées sorties avec Python........................................................... 21 4.3 Bibliothéques utilisées .................................................................................................. 22 5. Ngrok .............................................................................................................................. 25 6. Apache ............................................................................................................................ 27 7. Conclusion ....................................................................................................................... 16

Chapitre3 : Conception et Prototype 1.

Introduction ...................................................................................................................... 29

2.

Conception ........................................................................................................................ 29

2.1

Composantes ................................................................................................................... 29

2.2

Servomoteur .................................................................................................................... 29

2.3

Buzzer.............................................................................................................................. 32

2.4

Webcam ........................................................................................................................... 32

2.5

Les Leds .......................................................................................................................... 33

3.

Branchement ...................................................................................................................... 34

4.

Réalisation Réelle .............................................................................................................. 35

Listes de figures Figure 1: Caractéristiques biométriques ..................................................................................... 2 Figure 2:Les étapes de la reconnaissance de visage ................................................................... 4 Figure 3:Exemple de variation d’éclairage................................................................................. 5 Figure 4:Exemples de variation de poses ................................................................................... 6 Figure 5:Exemples de variation .................................................................................................. 6 Figure 6:Raspberry pi 3 Model B+........................................................................................... 10 Figure 7: Emplacement des différents composants du Raspberry Pi 3 Modèle B+ ................. 12 Figure 8:Ports GPIO ................................................................................................................. 14 Figure 9: Menu NOOBS........................................................................................................... 15 Figure 10:Raspberry Pi + Debian = Raspbian .......................................................................... 16 Figure 11: Fond d’écran Raspbian ........................................................................................... 16 Figure 12: Activer SSH ............................................................................................................ 18 Figure 13: Interface PuTTY ..................................................................................................... 19 Figure 14: Interface VNC ......................................................................................................... 20 Figure 15: Logo officiel de Python .......................................................................................... 21 Figure 16: Flask Framework Icone .......................................................................................... 22 Figure 17: Open CV icone........................................................................................................ 24 Figure 18: Logo apach .............................................................................................................. 28 Figure 19.1: Un Servomoteur ................................................................................................... 30 Figure 19.2: Un train d’impulsions de période 20ms ............................................................... 30 Figure 20: Rotation du servomoteur ......................................................................................... 31 Figure 21: Dimensions géométrique du servomoteur .............................................................. 31 Figure 22:Les Portes servomoteur ............................................................................................ 32 Figure 23: Un buzzer piézoélectrique ...................................................................................... 32 Figure 24: Webcam Raspberry Pi ............................................................................................ 33 Figure 25: LED ......................................................................................................................... 33 Figure 26: Schéma électrique d’une LED ................................................................................ 34 Figure 27: Schéma électrique du prototype .............................................................................. 34

Introduction Générale

Tout comme notre vie en général, nos maisons se trouvent de plus en plus technologistes. Les habitats du futur répondent à une probable insatisfaction innée de l’homme qui croit augmenter son pouvoir sur les choses par la technique. On voit donc que sa maison « s’adapte » à lui et à ses besoins. Au même titre que nous gérons notre budget, organisons notre temps et nos activités, que nous profitons des équipements perfectionnés de notre voiture (fermeture centralisée, climatisation...), la domotique nous offre la possibilité d'opter pour une maison qui s'adaptera à notre rythme de vie et à nos habitudes, eux-mêmes évolutifs au fil des années. Avec les nouvelles technologies domotiques, l’homme peut quitter son domicile pour le weekend et, avant de fermer la porte, appuyer sur un seul bouton pour éteindre les éclairages oubliés, mettre le chauffage en mode "économie", fermer les volets roulants, mettre en service l'alarme...

Problématique Avec l’augmentation du nombre d’habitants et la propagation du phénomène du vol, notamment le vol de maisons, la maison intelligente ne remplit pas sa fonction si elle n’est pas protégée.

Solution La solution apparait avec des algorithmes implémentés sur un système embarqué qui permet d’identifier les visages au moyen de l’intelligence artificielle.

1

Chapitre 1 : Les systèmes biométriques 1. Introduction La biométrie consiste à identifier une personne à partir d’une ou de plusieurs caractéristiques physiologiques (empreintes digitales, visage, iris, contour de la main, etc.), ou comportementales (signature, démarche, etc.). Etymologiquement, la biométrie humaine est synonyme d’anthropologie physique. Une autre définition de la biométrie est donnée par Roethenbaugh : « La biométrie s'applique à des particularités ou des caractères humains uniques en leur genre et mesurables, permettant de reconnaître ou de vérifier automatiquement l'identité ». Les systèmes biométriques sont de plus en plus utilisés depuis quelques années. L’apparition de l’ordinateur et sa capacité à traiter et à stocker les données ont permis la création des systèmes biométriques informatisés. Il existe plusieurs caractéristiques physiques uniques pour un individu, ce qui explique la diversité des systèmes appliquant la biométrie, selon que l’on prend en compte : L’empreinte digitale La géométrie de la main La rétine Le visage La dynamique de frappe au clavier La reconnaissance vocale La dynamique des signatures L’ADN Figure 1: Caractéristiques biométriques

2

2. Les systèmes biométriques Un système biométrique est essentiellement un système de reconnaissance de formes qui utilise les données biométriques d'un individu. Selon le contexte de l’application, un système biométrique peut fonctionner en mode d’enrôlement ou en mode de vérification ou bien en mode d'identification : Le mode d’enrôlement : est une phase d’apprentissage qui a pour but de recueillir des informations biométriques sur les personnes à identifier. Plusieurs campagnes d’acquisitions de données peuvent être réalisées afin d’assurer une certaine robustesse au système de reconnaissance aux variations temporelles des données. Pendant cette phase, les caractéristiques biométriques des individus sont saisies par un capteur biométrique, puis représentées sous forme numérique (signatures), et enfin stockées dans la base de données. Le traitement lié à l’enrôlement n’a pas de contrainte de temps, puisqu’il s’effectue « hors-ligne ». Le mode de vérification ou authentification : est une comparaison "un à un", dans lequel le système valide l'identité d'une personne en comparant les données biométriques saisie avec le modèle biométrique de cette personne stockée dans la base de données du système. Actuellement la vérification est réalisée via un numéro d'identification personnel, un nom d'utilisateur, ou bien une carte à puce. Le mode d'identification : est une comparaison "un à N", dans lequel le système reconnaît un individu en l’appariant avec un des modèles de la base de données. La personne peut ne pas être dans la base de données.

3. Systèmes biométriques basés sur la reconnaissance de visage : La reconnaissance automatique de visage s’effectue en trois étapes principales : (1) détection de visages, (2) extraction et normalisation des caractéristiques du visage, (3) identification et/ou vérification. Certaines techniques de traitements d’images peuvent être communes à plusieurs étapes. Par exemple, l’extraction des caractéristiques faciales (yeux, nez, bouche) est utilisée aussi bien pour la détection que pour l’identification de visages. Par ailleurs, les étapes de détection de visage et d'extraction de caractéristiques peuvent être exécutées simultanément. Cela dépend notamment de la nature de l'application, de la taille de la base d‘apprentissage, et des conditions 3

de prise de vue (bruit, occultation, etc.). Enfin, les techniques de traitement utilisées dans chaque étape sont très critiques pour les applications biométriques, et doivent, par conséquence, être optimisées pour améliorer les performances du système global.

Figure 2:Les étapes de la reconnaissance de visage

L’efficacité des systèmes biométriques basés sur l’authentification de visage dépend essentiellement de la méthode utilisée pour localiser le visage dans l’image. Dans la littérature scientifique, le problème de localisation de visages est aussi désigné par la terminologie "détection de visages". Plusieurs travaux de recherches ont été effectués dans ce domaine. Ils ont donné lieu au développement d’une multitude de techniques allant de la simple détection du visage, à la localisation précise des régions caractéristiques du visage, tels que les yeux, le nez, les narines, les sourcils, la bouche, les lèvres, les oreilles, etc. Nous détaillerons quelquesunes de ces méthodes dans la section. Cependant, les solutions proposées jusqu’à maintenant sont loin d’être satisfaisantes car elles fonctionnent uniquement dans des environnements contrôlés, et par conséquent elles ne gèrent pas la variabilité des conditions d’acquisition de la vie quotidienne, notamment :

4



La pose :

Où les images d'un visage changent en fonction de l’orientation de ce dernier. ▪

La présence ou absence des composantes structurales :

Les caractéristiques faciales tels que la barbe, la moustache, et les lunettes causent une grande variabilité des composantes structurales du visage, notamment au niveau de la forme, de la couleur, et de la taille. ▪

Les occultations :

Les visages peuvent être partiellement occultés par d'autres objets. En effet, dans une image contenant un groupe de personnes par exemple, des visages peuvent partiellement masquer d'autres visages. ▪

Les conditions d’illumination :

Des facteurs tels que l'éclairage (distribution de la source de lumière, son intensité, son spectre) , et les caractéristiques de l’appareil photographique affectent l'aspect d'un visage dans l’image acquise.

3.1. Principales difficultés de la reconnaissance de visage Pour le cerveau humain, le processus de la reconnaissance de visages est une tâche visuelle de haut niveau. Bien que les êtres humains puissent détecter et identifier des visages dans une scène sans beaucoup de peine, construire un système automatique qui accomplit de telles tâches représente un sérieux défi.

o Changement d’illumination L’apparence d’un visage dans une image varie énormément en fonction de l’illumination de la scène lors de la prise de vue. Les variations d’éclairage rendent la tâche de reconnaissance de visage très difficile. En effet, le changement d’apparence d’un visage du à l'illumination, se révèle parfois plus critique que la différence physique entre les individus, et peut entraîner une mauvaise classification des images d'entrée.

Figure 3:Exemple de variation d’éclairage

5

3.2. Variation de pose La variation de pose est considérée comme un problème majeur pour les systèmes de reconnaissance faciale. Quand le visage est de profil dans le plan image (orientation < 30°), il peut être normalisé en détectant au moins deux traits faciaux (passant par les yeux). Cependant, lorsque la rotation est supérieure à 30°, la normalisation géométrique n'est plus possible.

Figure 4:Exemples de variation de poses

3.3.

Expressions faciales

Un autre facteur qui affecte l’apparence du visage est l’expression faciale. La déformation du visage qui est due aux expressions faciales est localisée principalement sur la partie inférieure du visage. L'information faciale se situant dans la partie supérieure du visage reste quasi invariable. Elle est généralement suffisante pour effectuer une identification.

Figure 5:Exemples de variation

3.4.

Présence ou absence des composants structurels

La présence des composants structurels telle que la barbe, la moustache, ou bien les lunettes peut modifier énormément les caractéristiques faciales telles que la forme, la couleur, ou la taille du visage. De plus, ces composants peuvent cacher les caractéristiques faciales de base jcausant ainsi une défaillance du système de reconnaissance.

6

3.5.

Occultations partielles

Le visage peut être partiellement masqué par des objets dans la scène, ou par le port d’accessoire tels que lunettes, écharpe... Dans le contexte de la biométrie, les systèmes proposés doivent être non intrusifs c’est-à-dire qu’on ne doit pas compter sur une coopération active du sujet.

4. Haar cascade - Détection de visages et d'objets : La détection d'objets dans une image ou une vidéo est une tâche non triviale en vision par ordinateur, car deux critères sont à prendre en compte lors de la construction d'une méthode de détections d'objet. Le premier est la capacité que cette méthode à détecter correctement un objet et à ne pas se tromper la seconde est le temps d'exécution que cette méthode nécessite. En ce sens, la méthode des cascades de Haar respecte ces deux critères et nous allons voir comment dans cet article.

À la fin de cet article, vous saurez comment la méthode des cascades de Haar fonctionne, mais aussi comment l'implémenter à l'aide de la librairie Opencv en python. La méthode des cascades de Haar a été proposée en 2001 dans un article de recherche intitulé "Rapid Object Detection using a boosted cascade of simple feature" par Paul Viola et Michael Jones. Elle est rapidement devenue célèbre, car en plus d'obtenir un taux de succès relativement élevé sur un Jeu de données difficiles "MIT+CMU Dataset", elle était 15 fois plus rapide que les autres méthodes de détection de visage à l'époque. Bien que la méthode avait été spécialement conçue pour détecter des visages, la communauté s'est rapidement rendu compte que la méthode s'appliquait aux autres membres du corps, aux objets, et de manière générale à tout type d'image.

L'algorithme proposé se décompose en 4 parties : -Constitution d'une base de données contenant des images avec l'objet et des images sans l'objet. -Extraction de caractéristiques de l'ensemble des images contenu dans la base -Entraînement d'un classifieur en cascade -Phase de détection Constitution du Jeu de données Pour pouvoir utiliser les cascades de Haar, il faut dans un premier temps constituer un jeu de données composé d'images contenant uniquement et ne contenant pas l'image de l'objet que vous souhaitez détecter. Les recommandations vous construisez ce jeu reste bien entendu les mêmes que pour toute application de reconnaissance d'image : Les images doivent être proches visuellement de ce que vous souhaitez détecter 7

Il faut une certaine quantité d'exemples non négligeable Je vous recommande de construire ce jeu de manière automatique si vous en avez la possibilité. Cela peut se faire en utilisant un algorithme de segmentation basique. Extraction des caractéristiques de l'objet Une fois la base d'images constituée la seconde étape consiste à extraire les caractéristiques définies pas Viola et Jones dans leurs articles. Les cascades de Haar créent les caractéristiques qu'il utilise en appliquant sur l'image un filtre carré de 24x24. Il s'agit des filtres présentés sur l'image ci-dessous. Les caractéristiques sont obtenues en soustrayant la somme des pixels de l'image couverts par la zone blanche du filtre à la somme des pixels couverts par la zone bleue. Ce processus génère énormément de caractéristiques étant donné que le filtre est appliqué sur toute l'image. Viola et Jones évoquent un nombre de caractéristiques supérieur à 180 000 dans leur article pour une image de 384 par 288.

Entraînement du classifieur Pour des raisons de performance, Viola et Jones ont choisi d'utiliser le classifieur AdaBoost (Adaptive Boosting) pour le détecteur de Haar. Comparativement aux autres classifieur, ce classifieur présente l'avantage d'avoir une bonne vitesse d'exécution pour l'application qui en est faite tout en conservant un taux de reconnaissance haut. Le principe d'Adaboost est d'entraîner un grand nombre d'arbres de décision à un niveau. Ces arbres sont connus sous le nom de "decision stump" qui signifie moignon de décision en français. Chose plutôt drôle, car dans le dictionnaire moignon à deux significations : "Extrémité d'un membre amputé." ou Ce qui reste d'une grosse branche cassée ou coupée.". Quoi qu'il en soit, vous l'aurez compris l'idée consiste à ne garder que le haut de l'arbre, la racine et deux branches. Ce choix semble cohérent au vu du grand nombre de feature, duquel on est en présence. L'idée derrière adaboost est de combiné de faible classifieur afin d'en obtenir un fort. Les classifieurs votent à la fin, le poids de chaque classifieur dépend de sa performance lors de l'apprentissage. Chaque classifieur est entraîné en utilisant un sous-ensemble du jeu de 8

données totales Adaboost assigne un poids à chaque exemple mal classé après chaque entraînement. Les exemples mal classifiés ont un plus gros poids. Donc ils apparaissent plus souvent dans le sous-ensemble de données du classifieur suivant. L'algorithme AdaBoost est relativement simple, il consiste à entraîner un grand nombre d'arbres de décision à un niveau (decision stump). Pour sélectionner les caractéristiques, l'algorithme adaboost va entraîner un ensemble d'arbre de décision à 1 niveau nommé décision stump. Trois idées fondamentales sont à la base des méthodes de boosting probabilistes: 1. L'utilisation d'un comité d'experts spécialistes que l'on fait voter pour atteindre une décision. 2. La pondération adaptative des votes par une technique de mise à jour. 3. La modification de la distribution des exemples disponibles pour entraîner chaque expert, en surpondérant au fur et à mesure les exemples mal classés aux étapes précédentes. L'idée est de refuser au plus tôt une image dès les premiers niveaux plutôt que de la faire descendre dans le classifieur. Le classifieur en cascade est généralement stocké dans un fichier xml. Après entraînement du classifieur sur les 180 000 caractéristiques extraites seulement 6000 ont été retenues, et le classifieur a 38 niveaux. •

Entraînement avec Adaboost



La phase de détection

Une fois entraînés, nous pouvons passer à la phase de détection. Seulement comme ce processus de calcule prends énormément de temps des images intégrales sont calculée afin d'accélérer le temps de calcul.

5. Conclusion Dans ce chapitre, nous avons présenté les technologies utilisées dans les systèmes biométriques pour l’identification de personnes. Nous avons aussi donné un aperçu sur les techniques de mesure de leurs performances. Cette étude nous a permis de constater que la reconnaissance de visage suscite de plus en plus l’intérêt de la communauté scientifique, car elle présente plusieurs challenges et verrous technologiques.

9

CHAPITRE2 : Description et préparation du système embarqué 1. Introduction Un système embarqué est un système électronique et informatique qui se trouve au sein d'un produit plus large. Son but premier consiste à traiter de l'information reçue depuis son environnement pour en faire profiter le produit hôte qui l'héberge.

2. Présentation du Raspberry Pi La Raspberry est une carte mère d’un mini-ordinateur qui peut être branchée à n’importe quel périphérique (souris, clavier...). Cette carte est fabriquée pour aider à étudier les ordinateurs et pour représenter un moyen d’apprentissage de la programmation informatique en plusieurs langages (python, scratch...). Elle est aussi capable de lire les vidéos à haute définition et même à installer des jeux vidéo. L’intérêt d’utiliser le Raspberry Pi est sa capacité d’interaction avec le monde extérieur et d’exécuter plusieurs variantes du système d’exploitation libre (GNU/Linux, Raspbian Debian ...) et des autres logiciels compatibles.

Figure 6:Raspberry pi 3 Model B+

10

1.1. Les Caractéristiques Du Raspberry Pi Le Raspberry Pi est un nano-ordinateur de la taille, grosso modo, d’une carte de crédit. Ce qui est impressionnant, ce sont ses caractéristiques. Sur un petit bout de carte électronique, il y a un : — Processeur ARM Cortex A-53 quatre cœurs de 64-bit cadencé à 1,2 Ghz — 1 Go de RAM (SDRAM) — Un contrôleur vidéo Broadcom VideoCore IV — 4 ports USB 2.0 — Un port HDMI — Un connecteur Jack 3,5 mm / sortie composite — Une prise Ethernet 10 / 100 Mbps — WIFI 802.11n — Bluetooth 4.1 — Bluetooth Low Energy (BLE) — 40 pins GPIO — Une interface de caméra (CSI) — Une interface d’affichage (DSI) — Un emplacement de carte micro SD — Alimentation 5V par micro USB La figure qui suit inventorie les différentes parties d’un Raspberry Pi 3 modèle B,

11

Figure 7: Emplacement des différents composants du Raspberry Pi 3 Modèle B+

1.2. Accessoires du Raspberry Pi Alimentation La Raspberry Pi s’alimente sous tension unique de 5 volts, tension sur laquelle il peut consommer jusqu’à 1.8A selon les taches qu’il exécute. Cette alimentation doit être normalement fournie via le connecteur micro USB place dans un angle de la carte. En effet, l’utilisation d’un chargeur pour Smartphone équipé d’un micro USB qui délivre une tension de 5 volts avec au minimum 1.8A est suffisante pour alimenter notre Raspberry Pi. Carte microSD Pour héberger notre système d’exploitation (Raspbian) nécessaires au bon fonctionnement notre Raspberry Pi, et tous les fichiers nous auront besoin d’espace de stockage c’est pour cela qu’une microSD est requise. La qualité de cette carte, et tout particulièrement sa vitesse, va influencer la vitesse d’écriture des fichiers. Il convient donc de bien la choisir. Pour nous aider des « classes » sont définies pour nous indiquer la vitesse minimale des cartes en écriture, exprimée en Mo/s. Les cartes vendues en 2010 sont de classe 2, 4, 6 ou 10. Au niveau de la taille, Raspbian étant très léger, il n’y a pas besoin d’une très grosse carte SD. 4Go suffisent, mais 16 Go sont préférables, afin d’avoir un peu de marge. Pour notre part on a choisi une capacité de 8Go pour notre projet. 12

1.3. Vus d’ensemble : En réalité, et même si par abus de langage on parle du processeur qui équipe le Raspberry pi, il s’agit en fait de ce que l’on nomme aujourd’hui un SoC qui est l’acronyme de system on chip soit, mot à mot système sur une puce. Si vous savez ce qu’est un microcontrôleur, vous pouvez très bien considérer qu’un SoC n’est rien d’autre qu’un « gros » microcontrôleur .

1.4. Domaine d’utilisation On peut pratiquement faire avec un Raspberry Pi tout ce que l’on peut faire avec un ordinateur de bureau sous Linux, à quelques exceptions prés. Le Raspberry Pi utilise une carte SD à la place d’un disque dur, bien que l’on puisse le brancher à un disque dur USB. On peut modifier des documents bureautiques, surfer sur internet, jouer à des jeux, etc. Le Rasberry Pi est un appareil extrêmement souple qu’on peut utiliser dans toutes sortes de situations, que ce soit pour remplacer un ordinateur de bureau, profiter d’un media center ou contrôler un système a l’aide d’un ordinateur embarque.

1.5. Connecteurs et ports disponible : 1. HDMI : « High Définition MultiMedia Interface » permet de relier le Raspberry Pi à un dispositif compatible : écran LCD ou un vidéoprojecteur...

2. GPIO : est l’acronyme anglais de "General Purpose Input Output" ce que l’on traduirait pas Entrée/sortie pour usage général. Le connecteur GPIO dispose actuellement de différents type de connexions. Elles sont : — De vraies broches GPIO (General Purpose Input Output) avec lesquels vous pouvez allumer/éteindre des LED, etc. — Des broches pour une interface I2C qui permet de se connecter sur du matériel en utilisant uniquement 2 broches/pins de contrôle. — Une interface SP pour les périphériques SPI, a concept similaire à I2 avec un standard différent. — Les broches Rx et Tx pour la communication avec les périphériques séries. De plus, certaines broches peuvent être utilisé en : — PWM (acronyme de "Pulse Width Modulation" pour modulation de largeur d’impulsion) permettant le contrôle de puissance — PPM (acronyme de "Pulse Position Modulation" pour modulation positionnelle d’impulsion) permettant de contrôler des servos moteurs. 13

Figure 8:Ports GPIO

Port USB 2.0 : Le port « Universal Serial Bus » est un port série qui sert à connecter le Raspberry aux autres périphériques, et il y a 4 ports USB. Le Raspberry Pi fonctionne avec pratiquement n’importe quels claviers et souris USB. Vous pouvez aussi utiliser la plupart des claviers et des souris sans fil (ceux qui marchent avec un ongle que l’on branche sur un port USB). 3. Port Ethernet : C’est un port qui correspond au protocole international Ethernet de réseau local à commutation de paquets. 4. Prise RCA : « Radio Corporation of America » est un connecteur électrique utilisé dans le domaine audio/vidéo via jack. 5. Un slot pour cartes microSD : Le Raspberry a besoin d’une mémoire externe supplémentaire pour fonctionner. Ce slot permet de connecter la mémoire externe. Vous pouvez utiliser votre propre carte SD dans le Raspberry Pi, mais elle devra être préparée avec une image disque d’un système d’exploitation. 6. Une prise jack : C’est une connectique audio-vidéo sa dimension est égale à 3.5 mm.

3.

LINUX

Un ordinateur standard fonctionne avec un système d’exploitation comme Windows, OS X ou Linux. C’est ce système qui démarre quand vous allumez votre machine et qui fournit à vos logiciels un accès aux fonctionnalités matérielles de votre ordinateur. Par exemple, si vous codez une application qui utilise Internet, vous pouvez, pour ce faire, utiliser les fonctions fournies par le système d’exploitation. Vous n’avez pas besoin de comprendre et d’écrire du code pour chaque modèle d’interface Ethernet ou Wi-Fi disponible. 14

Comme tous les autres ordinateurs, le Raspberry Pi utilise un système d’exploitation. Celui fourni par défaut est une version de GNU/Linux appelée Raspbian qui est idéal pour l’esprit de partage qui règne au sein de la la communauté Raspberry Pi car il est libre et open source. Ce logiciel à été écrit dans le cadre d’un projet communautaire pour ceux qui recherchent une alternative au monopole de Micrrosoft Windows et d’Apple OS X. Linux est un système d’exploitation Open Source. C’est un système d’exploitation complet, basé sur les mêmes concepts robuste d’UNIX qui est apparu au début de l’informatique. il a de nombreux partisans fidèles et serviable et s’est transformer en un système d’exploitation puissant et facile à utiliser. Bien que le système d’exploitation s’appelle Linux, plusieurs distribution (appelées aussi distros) Linux différentes on été produites. celles-ci comprennent le même système d’exploitation de base,mais sont livrées avec des applications ou de systèmes de fenêtrage différents. Bien qu’il existe de nombreuses distributions, C’est la Rasbian qui est recommandée par la Fondation Rasberry Pi. •

Comment ça marche ?

Après le téléchargement et décompression de l’archive NOOBS dans un dossier de notre choix, vient après l’étape de transfert de tout ces fichiers dans une carte microSD au préalable bien formatée avant utilisation, on devrait arriver sur cet écran qui permet de choisir parmi les distributions disponibles :

Figure 9: Menu NOOBS

Il nous suffit alors de cocher les systèmes que nous souhaitons installer puis de cliquer sur « Install ». Au bout de quelques minutes, tout est installé et dès lors nous pouvons profiter de notre machine! 15

3.1 Raspbian Raspbian est un système d’exploitation GNU/Linux spécialement conçu et optimisé pour le Raspberry Pi. Caractéristiques Raspbian est un mot-valise formé par la fusion des mots "Raspberry Pi" et "Debian".

Figure 10:Raspberry Pi + Debian = Raspbian

3.2 Raspbian Stretch La dernière version de l’OS Raspbian complet, plutôt adapté à la Raspberry Pi 2 et à la Raspberry Pi 3. Il s’agit d’une modification de Debian spécifiquement adaptée pour les systèmes sur une puce de type ARMv6.

Figure 11: Fond d’écran Raspbian

16

3.3. Installation et démarrage du système Dans un premier temps nous aurons besoin de plusieurs choses. Tout d’abord, d’une carte microSD avec raspbian gravé dessus (Les étapes sont décrites dans la sous-section , page , qui fait référence à NOOBS). Par ailleurs il nous faudra également un clavier pour votre Raspberry Pi, et enfin un écran. Suivez ces étapes pour démarrer votre Raspberry Pi pour la première fois. — Insérez la carte SD dans son support. — Branchez un clavier USB et une souris au Raspberry Pi. — Connectez la sortie HDMI à votre téléviseur ou moniteur. — Branchez l’alimentation du Pi.

3.4. Prendre le contrôle du Raspberry Pi Brancher la Raspberry Pi à un écran et l’utiliser comme bureau c’est bien, mais pour divers projets ou celle-ci intervient par exemple dans les systèmes embarqués, un écran et tout les autres périphériques (clavier, souris) deviennent vite encombrant, des solutions existent c’est de communiquer avec des commandes et cela à distance avec des différents protocoles et serveurs.

3.5 Secure SHell SSH (pour Secure SHell) désigne à la fois un logiciel et un protocole de communication informatiques. Ce protocole possède par ailleurs la particularité d’être entièrement chiffré. Cela signifie donc que toutes les commandes que vous exécuterez via SSH seront totalement secrètes. SSH permet de se connecter à distance sur une machine en utilisant un compte utilisateur de la dite machine. Pour se faire nous allons dans ce qui suit activer SSH dans notre Raspberry Pi et installer un client SSH dans notre ordinateur. Activer SSH Par défaut, SSH est installé sur la Raspberry Pi, mais est désactivé pour des raisons de sécurité. La première chose à faire sera donc d’activer SSH sur votre Raspberry Pi. Procédure : 1.

Démarrer le "RaspberryPI" sur la distribution "Raspbian".

2.

Se connecter au terminal avec CTRL+ALT+T 17

3.

Saisir la commande "sudo raspi-config" puis valider.

4.

Sélectionner "Interfacing Options"

5.

Sélectionner l’option "ssh".

6.

Sélectionner le choix "Enable".

7.

Confirmer le message par "Ok".

8.

Terminer la configuration avec le bouton "Finish".

Figure 12: Activer SSH

Installer le client SSH sur votre ordinateur Pour concrétiser la communication SSH entres nos différentes machines, et après l’avoir activer dans notre Raspberry Pi, reste à l’installer dans notre ordinateur. Installer le client SSH sur Linux Si vous êtes sous Linux, Pour installer un client SSH, rien de plus simple, il vous suffit de lancer la commande suivante : sudo apt-get update && sudo apt-get install openssh-client Installer le client SSH pour Windows Étant donné que notre ordinateur fonctionne avec Windows, La solution qui nous est proposée c’est d’installer le logiciel nommé Putty. Développé à l’origine par Simon Tatham pour la plate-forme Windows. PuTTY est un logiciel open source disponible avec le code source et développé et pris en charge par un groupe de volontaires. Vous pouvez télécharger PuTTY.

18

Ce programme permet de se connecter à distance à des serveurs en utilisant les protocoles SSH, Telnet.

Figure 13: Interface PuTTY

3.3

Virtual Network Computing

VNC, ou Virtual Network Computing, est un système permettant la prise de contrôle à distance d’un ordinateur par un autre. Lors de l’utilisation de VNC, deux parties différentes du logiciel sont utilisées. La première partie est le serveur VNC. Celui-ci est installé sur la machine dont l’on souhaite prendre le contrôle (ici le raspberry pi), et il va permettre la connexion et le contrôle par la partie client. La seconde partie est donc le client VNC. Celui-ci est installé sur la machine depuis laquelle on souhaite contrôler le serveur, et il va permettre de traduire nos actions en opérations compréhensibles par le serveur qui va alors contrôler la machine distante depuis notre ordinateur. Le gros intérêt de VNC, c’est qu’il permet de prendre le contrôle d’une machine distante, tout en affichant le bureau de celle-ci. Nous pouvons donc voir en temps réel ce qui se passe sur votre Raspberry Pi, sans pour autant avoir besoin de la brancher sur un écran.

19

Figure 14: Interface VNC

4. Python : Nous verrons dans les chapitres qui suivent qu’il est possible de relier ces lignes à une multitude de composants externes, capteurs, actionneurs ...etc, mais pour faire fonctionner tous ces éléments, il faudra écrire des programmes spécifiques qui seront écrit en Python. Pourquoi Python et pas un autre langage comme Java, C, C++, Basic, tous plus connus au moins du grand public ? Pour au moins quatre raisons : — Python est un langage facile à apprendre par qui n’a jamais programmé. La syntaxe de Python est très simple et, combinée à des types de données évolués (listes, dictionnaires,), conduit à des programmes à la fois très compacts et très lisibles. A fonctionnalités égales, un programme Python (abondamment commenté et présenté selon les canons standards) est souvent de 3 à 5 fois plus court qu’un programme C ou C++ (ou même Java) équivalent, ce qui représente en général un temps de développement de 5 à 10 fois plus court et une facilité de maintenance largement accrue. — Le langage de programmation officielle qui a été pris en charge comme langue d’apprentissage éducatif sur le Raspberry Pi (le langage de prédilection á l’origine du Pi de Raspberry Pi) est Python, Python est d’ailleurs installé par défaut dans Raspbian. — Python est un langage de programmation interprété et qu’il est donc très facile d’essayer immédiatement une ou plusieurs instructions dont on est pas sur du comportement. — De nombreuses bibliothèques sont disponibles sur internet pour piloter les lignes d’entrées/sorties du Raspberry Pi en Python.

20

Figure 15: Logo officiel de Python

4.1. Point fort du langage Le grand point fort de Python sur PHP, Perl ou un autre c’est sa lisibilité. Le slogan des fans de Python est : "Life’s better without braces", ce qui signifie "La vie est meilleur sans accolades". En Python il n’existe pas d’accolades pour délimiter un bloc de code. En fait, le programmeur Python n’a pas le choix dans la façon de formater son code s’il veut pouvoir l’exécuter sans erreurs. Comme pour un Makefile, une mauvaise indentation produit une erreur de syntaxe. La syntaxe de Python est plus donc constante et uniforme, voir restrictive. Sa rigidité lui permet d’être plus compréhensible par tous, notamment pour des projets avec plusieurs auteurs et des centaines de lignes de codes sources. Les scripts Python ont tous la même "tête", ils peuvent donc être relus par d’autres plus facilement. Cette remarque n’est pas négligeable surtout lorsque l’on sait qu’un développeur passe au moins autant de temps à lire et comprendre un code qu’à l’écrire.

4.2. Programmation des entrées / sorties avec python Les broches marquées GPIO peuvent être utilisées comme broches d’entrée / sortie. En d’autres termes, n’importe quelle broche peut être programmée comme une entrée ou une sortie. Dans ce sens on va utiliser plusieurs langages de programmation capable de contrôler ces broches comme le C, Java, Bash... mais dans notre projet on a opté pour le python pour contrôler ces broches. Le module GPIO est installé par défaut sur les versions les plus récentes de la distribution Raspbian Linux. Mais pour les versions plus anciennes, on doit probablement l’installer et effectuer une mise à jour. Pour cela on exécute la commande suivante : "sudo apt-get install python-rpi.gpio" Ensuite on exécute la commande suivante pour la mise à jour :

21

"sudo apt-get update"

4.3. Bibliothèques utilisées ❖ Flask Frameware :

Flask est un micro Framework open-source de développement web en python. Il a pour objectif de garder un noyau simple mais extensible. Il n’intègre pas de système d’authentification, pas de couche d’abstraction de base de données, ni d’outil de validation de formulaires. Cependant, de nombreuses extensions permettent d’ajouter facilement des fonctionnalités. Il est distribué sous licence BSD.

Figure 16: Flask Framework Icone



Domaines d’utilisations •

Serveur de développement et debugger



Simplifie l'écriture de tests unitaires



Moteur de template pour le rendu HTML



Supporte les cookies sécurisés (session)



Entièrement compatible avec WSGI 1.0



Se base sur l'Unicode



Documentation complète



Déploiement aisé sur plusieurs hébergeurs



Ajout de fonctionnalités via les extensions

Dans un flask, les itinéraires d’application sont créés pour lier différentes sections d’une application web. Ces itinéraires peuvent accepter les données envoyées à l’aide des méthodes d’objet de demande appropriées. Par défaut, la méthode GET est utilisée, mais vous pouvez utiliser la méthode POST en la mentionnant dans le décorateur d’itinéraire dans l’argument methods. Nous discuterons comment et où utiliser les méthodes get et post de demande Flask. La méthode HTTP get envoie des données non chiffrées au script cible via l’URL pour traitement. La syntaxe du décorateur d’itinéraire pour utiliser la méthode get est :

22

@(instance d’objet de l’application Flask).route('url à définir de la page à lier', methods=['GET']) Lorsque flask request get est utilisé, les données de formulaire sont transmises au script demandé dans l’action de formulaire via l’URL en tant qu’arguments. Les données sont collectées à partir du formulaire et envoyées avec l’URL sous forme de paires paramètre/valeur. Ces valeurs sont accessibles dans le script demandé en utilisant request.args et en passant les noms du paramètre. La syntaxe est : Variable-name= request.args.get(‘form-parameter-name’) Application.py

Index .html

❖ Open source computeur vision ‘OpenCV’: Open CV (pour Open Computer Vision) est une bibliothèque graphique libre, initialement développée par Intel, spécialisée dans le traitement d'images en temps réel. La société de robotique Willow Garage et la société ItSeez se sont succédé au support de cette

23

bibliothèque. Depuis 2016 et le rachat de ItSeez par Intel, le support est de nouveau assuré par Intel.

Figure 17: Open CV icone



Domaines d’utilisations •

Traitement d'images



Traitement vidéos



Algorithmes d'apprentissages



Calculs Matriciels

• ❖

Numpy :

Numpy est une bibliothèque pour langage de programmation Python, destinée à manipuler des matrices ou tableaux multidimensionnels ainsi que des fonctions mathématiques opérant sur ces tableaux. Plus précisément, cette bibliothèque logicielle libre et open source fournit de multiples fonctions permettant notamment de créer directement un tableau depuis un fichier ou au contraire de sauvegarder un tableau dans un fichier, et manipuler des vecteurs, matrices et polynômes. ❖

Pillow ‘PIL’ :

Pillow est une bibliothèque de traitement d’image, qui est un fork et successeur du projet PIL (Python Imaging Library). Elle est conçue de manière à offrir un accès rapide aux données contenues dans une image, et offre un support pour différents formats de fichiers tels que PPM, PNG, JPEG, GIF, TIFF et BMP. Pillow dispose de capacités de traitement d’images relativement puissantes, et a pour but d’offrir une solide base à toute application générale de traitement d’images. 24

Domaines d’utilisations •

Traitement d'images



Archivage d’images



Traitement vidéos

5. Ngrok Cloud : Ngrok est un outil qui permet de rendre votre poste de développement web local accessible depuis l’extérieur, via un tunnel sécurisé, depuis une url du type https://azerty.ngrok.io. Cette url est accessible par n’importe qui (vos clients, vos collègues...) et depuis n’importe où. De plus, Ngrok prend en charge pour vous les configurations délicates de pare-feu, en s’occupant d’ouvrir les ports nécessaires, en toute sécurité. Un des grands avantages est de pouvoir tester les méthodes de paiements. En effet, Ngrok vous fournit une url accessible de l’extérieur, elle peut donc également être contactée par les PSP. Conséquence : on peut recevoir les informations sur l’état des paiements sur son projet local et tester la cinématique complète de paiement et de traitement des commandes. Autre avantage, l’outil met à disposition une interface qui permet de suivre en direct les requêtes HTTP faites sur votre url. On peut ainsi vérifier les requêtes et les relancer manuellement autant de fois qu’on le désire.

Comment le mettre en place ? Pour pouvoir l’utiliser il faut tout d’abord créer un compte sur https://ngrok.com. Il existe différentes offres dont une gratuite qui est déjà très complète. La formule payante permet notamment d’avoir la même url à chaque redémarrage du service. •

Il faut d’abord télécharger et installer le client sur votre ordinateur (compatible Linux, Windows et Mac). On trouve le lien sur la page d’accueil après l’inscription.



Pour la première utilisation, on exécute cette commande avec le token disponible sur votre compte ngrok. Elle permet de créer la liaison sécurisé avec ngrok.

On peut ensuite démarrer le service ngrok sur le port souhaité à l’aide de la commande suivante :

On retrouve alors dans le détail de ngrok l’url ouverte pour votre machine locale. Dans mon exemple l’url est la suivante : http://62e73311.ngrok.io

25



Il faut attribuer le nom d’hôte à votre adresse IP locale dans votre fichier /etc/hosts :

On configure notre virtual host apache sur le directory du projet visé. On l’ajoute également un alias pour être tranquille et ne pas avoir à changer le ServerName à chaque redémarrage du service ngrok.



Enfin, on redémarre apache :

26

5.

Apache :

Spark (ou Apache Spark2) est un Framework open source de calcule distribué . Il s'agit d'un ensemble d'outils et de composants logiciels structurés selon une architecture définie. Développé à l’université de Californie à Berkeley par AMPLab, Spark est aujourd'hui un projet de la fondation Apach. Ce produit est un cadre applicatif de traitements Big data pour effectuer des analyses complexes à grande échelle. Spark réalise une lecture des données au niveau du Cluster (grappe de serveurs sur un réseau), effectue toutes les opérations d'analyse nécessaires, puis écrit les résultats à ce même niveau. Malgré le fait que les tâches s'écrivent avec les langages Scala, Java et Python, il utilise au mieux ses capacités avec son langage natif, Scala Spark exécute la totalité des opérations d'analyse de données en mémoire et en temps réel. Il s'appuie sur des disques seulement lorsque sa mémoire n'est plus suffisante. À l'inverse, avec Hadoop les données sont écrites sur le disque après chacune des opérations. Ce travail en mémoire permet de réduire les temps de latence entre les traitements, ce qui explique une telle rapidité Cependant, Spark ne dispose pas de système de gestion de fichier qui lui est propre. Il est nécessaire

de

lui

en

fournir

un,

par

exemple Hadoop

Distributed

File

System, Informix, Cassandra, OpenStack Swift ou Amazon. Il est conseillé de l'utiliser avec Hadoop qui reste actuellement la meilleure solution globale de stockage grâce à ses outils d'administration, de sécurité et de monitoring plus avancés.

27

Figure 18: Logo apach

6.Conclusion Dans ce chapitre dédié à la présentation du Raspberry Pi, nous avons présenté les divers composants de cette carte, son utilité spécialement pour notre projet sur la domotique, ensuite on a vu comment utiliser les broches GPIO pour contrôler les composants électroniques à l’aide de langage de programmation python. Dans le chapitre suivant, nous allons expliquer notre projet pratique qui est la réalisation d’un prototype d’une maison intelligente via une page web.

28

Chapitre 3 : Conception du Prototype 1. Introduction Des que l’on souhaite automatiser une application avec un micro-ordinateur ou un micro contrôleur on s’aperçoit bien vite qu’il passe le plus claire de son temps à communiquer avec le monde extérieur par le biais de ce que l’on désigne sous le nom générique d’Entrées/Sorties. bien sûr, ces dernières varient fortement d’une application à une autres. Tout ces E/S pourraient constituer les sens du système, puisque elles permettent de capter tout les paramètres d’un lieu donné dont on voudrait mesurer ces constantes. Cette diversité des E/S la majorité d’entre elles fait appel à des schémas de bases classique et à leurs programmes associes que nous avons regrouper dans la suite de ces chapitres.

2. Conception : 2.1

Composants :

Les composants nécessaires de réalisation — Carte Raspberry Pi 3 Model B. — Plaque d’essai — Câbles jumpers M/M et M/F — Câble Ethernet (RJ45) — Un Led qui indique la possibilité d’Access il peut être remplacer par un Relay et un solénoïde. — Webcam « utilisée comme caméra de surveillance » — Servomoteur « utilisé comme un support pour la rotation du Webcam » — Un Buzzer

2.2

Servomoteur :

Un servomoteur est un moteur capable de maintenir une opposition à un effort statique et dont la position est vérifiée en continu et corrigée en fonction de la mesure. C’est donc un système asservi. Le servomoteur intègre dans un même boitier, la mécanique (moteur et engrenage), et 29

l’électronique, pour la commande et l’asservissement du moteur. La position est définie avec une limite de débattement d’angle de 180 degrés, mais également disponible en rotation continue. Des servomoteurs, il en existe de plusieurs tailles : des plus petits de quelques grammes, tout en plastique, au plus gros de plusieurs kilogrammes, en métal. L’énergie qui les pilote et les fait n’est pas toujours électrique. Un servomoteur est composé :

— d’un moteur à courant continu — d’un axe de rotation — un capteur de position de l’angle d’orientation de l’axe (très souvent un potentiomètre) — une carte électronique pour le contrôle de la position de l’axe et le pilotage du moteur à courant continu

Figure 19.1: Un servomoteur

Pour commander un servomoteur, il faut lui envoyer ce qu’on appelle un train d’impulsions électriques, on peut traduire par : des envois de courant électrique qui se suivent à intervalle et durée précis. L’intervalle de temps entre chaque impulsion envoyée est aussi appelé période. Voici à quoi ressemble un train d’impulsions :

Figure 20.2: Un train d’impulsions de période 20ms

30

La position du servomoteur est définie par la longueur d’une impulsion. Le servomoteur s’attend à recevoir une impulsion toutes les 20 millisecondes environ. Si cette impulsion est élevée pendant 1 milliseconde, alors l’angle d’asservissement sera nul, si elle est de 1,5 milliseconde, alors elle sera au centre et si elle est de 2 millisecondes, elle sera à 180 degrés.

Figure 21: Rotation du servomoteur



Les Dimensions d’un servomoteur selon ‘Datasheet’

Figure 22: Dimensions géométrique du servomoteur

31



Le cablage et la fréquance de PWM

Figure 23:Les Portes servomoteur

2.3

Buzzer :

Un buzzer ou bipeur est un élément électromécanique ou piézoélectrique qui produit un sa caractéristique quand on lui applique une tension. Un buzzer (transducteur) piézoélectrique est typiquement composé d'un diaphragme piézoélectrique, d'une cavité avec un orifice et de connexions pour les bornes électriques1. Il nécessite une tension alternative pour fonctionner, de quelques volts à quelques dizaines de volts (3 V à 30 V par exemple). C'est ce type de transducteur que l'on retrouve au dos des montres ayant une fonction alarme.

Figure 24: Un buzzer piézoélectrique

2.4. Webcam : Une webcam ou cybercaméra ou webcaméra, est une caméra conçue pour être utilisée comme un périphérique d’un Hardware, et qui produit une vidéo dont la finalité n'est pas d'atteindre une haute qualité, mais de pouvoir être transmise en direct au travers d'un réseau, typiquement Internet

32

Figure 25: Webcam Raspberry Pi

2.5 Les LEDS Une diode électroluminescente (abrégé en LED, de l’anglais : light-emitting diode), est un dispositif opto-électronique capable d’émettre de la lumière lorsqu’il est parcouru par un courant électrique. Ces LED feront office d’éclairage dans notre maquette et servirons d’indicateur lumineux pour nos circuits. Figure 2.1.4.1 – Une LED

Figure 26: LED

33

Figure 27: Schéma électrique d’une LED

3. Le Branchement

Ceci le branchement des composantes utilisées dans ce projet:

Figure 28: Schéma électrique du prototype

34

4.

Réalisation Réelle

35

36

Conclusion Générale La Maison Intelligente est une résidence équipée de technologie informatique qui assiste ses habitants dans les situations diverses de la vie domestique en essayant de gérer de manière optimale leur confort et leur sécurité par action sur la maison. La détection des situations anormales est un des points essentiels d’un système de surveillance à domicile. Ces situations peuvent être détectées en analysant les primitives générées par les étages de traitement des images et par les capteurs de l’appartement.

37

Rréférences Bibliographiquee [1] Y. Adini, Y. Moses, S. Ullman, Face recognition: The problem of compensating for changes in illumination direction. IEEE Trans. Patt. Anal. Mach. Intell. 19, 721–732, 1997. [2] Tiphaine Bodin.(2018). « La domotique, principe et fonctionnement ». In : Linternaute.com [En ligne]. Disponible sur : [3] Algorithme Haar Cascade Haar cascade - Détection de visages et d'objets - Kongakura [3] SIMON MONK (2014) Programmer un Raspberry Pi : initiation avec python, page1. DUNOD, Paris [4] SIMON MONK (2014) Programmer un Raspberry Pi : initiation avec python, page 18. DUNOD Paris [5] C. Tavernier, « Arduino applications avancées ». Version Dunod. [6] « electriciteguide », https://www.electriciteguide.com/actualites/ le-delesteur.htm] [7] https ://raspbian-france.fr/telechargements/ [7] C’est Quoi Ngrok : https://black.bird.eu/fr/blog/ca-roule-entre-magento-et-ngrok-.html [8] Apach : Apache Spark — Wikipédia (wikipedia.org)

38