2022_G6_SpyCheat

SpyCheat est une application de surveillance pour un examen.

Slides & Videos

Members

NameContribution
Hajar BOUZIANE16/12/2021
Prise en main de gRPC avec le TP1 :
- lecture du quickstart sur le langage Python
- installation de jdk 11
- installation de gRPC sur Windows
- test et compréhension du code fournis par quickstart

06/01/2022
Lecture et compréhension des fichiers stockés sur Google Colab (TP2)

11/01/2022
Avec Sohayla RABHI on a réfléchi aux fonctionnalités qui allaient être présentes dans notre application à savoir :
- Une page d'accueil où on doit saisir ses identifiants et choisir entre créer ou rejoindre une réunion,
- Une seconde page pour lancer la réunion où il y aura la caméra, le chronomètre et un bouton pour quitter la réunion. Puis on a créé une maquette de l'application SpyCheat sur ce site (https://www.figma.com/file/31tmeAVBcng0u39nZ2XBNx/SpyCheat?node-id=2%3A6). Par la suite, nous nous sommes réparties les tâches (pour ma part, je devais m'occuper de la connexion gRPC ).

18/01/2022
Avec Sohayla RABHI à commencer pas prendre en main Android Studio en débutant par créer notre application : on a créé une page qui sert à lancer le chronomètre (interface xml et code kotlin)

19/01/2022
Prise en main gRPC avec python :
- J'ai testé le code HelloWorld et RouteGuide en python pour comprendre le code.
- J'ai effectué des test en mettant en commentaires des fonctions et en modifiant des valeurs pour qu'elle s'adapte à mes besoins.
- J'ai fait des recherches sur internet pour comprendre le rôle du fichier proto

20/01/2022
J'ai ajouté l'accéléromètre à l'application et j'ai regardé à quoi correspondait les valeurs.

26/01/2022
- J'ai créé un fichier proto pour que celui-ci récupère juste les valeurs de l'accéléromètre.
- J'ai créé un serveur python pour que celui-ci affiche les valeurs envoyées par un client.
- Création d'un client python pour que celui-ci envoie 3 valeurs (comme ci c'était des coordonnées). L'objectif était de tester le bon fonctionnement de mon serveur et comprendre le rôle des fonctions gRPC.

28/01/2022
Nouvelle tentative de création d'un serveur et d'un client python qui fut un succès.
- Première tentative de création d'un client kotlin sur android studio (échec). J'ai rencontré de nombreuse difficulté pour générer les bons fichiers gRPC. Il m'a fallut regarder plusieurs fois le code qui était mis à notre disposition dans le quickstart.

29/01/2022
Seconde tentative de création création d'un client kotlin (échec)

30/01/2022 Troisième tentative de création d'un client kotlin (échec)

31/01/2022
Quatrième tentative de création d'un client kotlin : Succès. Le serveur reçoit les coordonnées de l'accéléromètre même lorsqu'on débranche le câble de l'application. J'ai donc pu créer la page d'acceuil de l'application. J'ai ajouté sur la même page que le chronomètre l'accéléromètre pour tester les latences (il n'y en avait pas)

03/02/2022
J'ai montré à mes caramades comment faire fonctionner gRPC sur android studio (de la création du client en kotlin au serveur python) |

Du 10/02/2022 au 16/02/2022
J'ai fusionné le code de sohayla qui servait à faire la reconnaissance faciale sur l'application Android Studio. Cependant, il y avait de trop grande latence et l'application cessait de fonctionner. De plus, il était impossible de lancer la reconnaissance faciale en même temps que l'accéléromètre malgré le fait que j'ai ajouté des thread et/ou diminuer augmenter le temps d'envoi des données au serveur. J'ai donc décidé d'envoyer les images au serveur via gRPC

17/02/2022
- J'ai ajouté la caméra sur l'application et sur le fichier proto (j'ai fais des recherches pour trouver les bonnes permissions)
- J'ai ajouté des fonctions kotlin pour convertir les images (en format bitmap) en chaîne de caractères avant qu'elles soient envoyées au serveur
- J'ai modifié le serveur pour qu'il puisse convertir les chaînes de caractères en image
- J'ai rédigé des scénarios et j'ai redéfinis la maquette de l'application pour qu'elle réponde à nos attentes (j'ai fais des schémas en spécifiant les différentes conditions à respecter).

Du 19/02/2022 au 25/02/2022
J'ai modifié le fichier proto pour qu'il puisse créer des messages contenant les images, les valeurs de l'accéléromètre, les tentatives de connexion sur la main et la tête, le nom des réunions et les adresses mails des utilisateurs. Par la suite, j'ai créé un nouveau projet pour l'application avec toutes les pages qui ont été énumérées dans le cahier des charges techniques. J'ai modifié le serveur pour qu'il crée des fichiers CSV, qu'il gère les créations de réunion et les tentatives de connexion, qu'il lance et arrête l'enregistrement vocal au bon moment (qu'il respecte le cahier des charges).

26/02/2022
Fusion de mon serveur python avec les codes de Sohayla. On a corrigé quelques bugs et on a fait des tests qui ont tous fonctionnés.

27/02/2022
Avec Sohayla on a créé les vidéos et les slides pour la présentation du lendemain.
Sohayla RABHI16/12/2021
Prise en main de gRPC avec le TP1 :
- lecture du quickstart sur le langage Python
- installation de jdk 11
- installation de gRPC sur Windows
- test et compréhension du code fournis par quickstart

06/01/2022
Lecture et compréhension des fichiers stockés sur Google Colab (TP2)

11/01/2022
Avec Sohayla RABHI on a réfléchi aux fonctionnalités qui allaient être présentes dans notre application à savoir :
- une page d'accueil où on doit saisir ses identifiants et choisir entre créer ou rejoindre une réunion,
- Une seconde page pour lancer la réunion où il y aura la caméra, le chronomètre et un bouton pour quitter la réunion. Puis on a créé une maquette de l'application SpyCheat sur ce site (https://www.figma.com/file/31tmeAVBcng0u39nZ2XBNx/SpyCheat?node-id=2%3A6). Par la suite, nous nous sommes réparties les tâches (pour ma part, je devais m'occuper de la reconnaissance faciale ).

18/01/2022
Avec Hajar BOUZIANE on a commencé par prendre en main Android Studio en débutant par créer notre application : on a créé une page qui sert à lancer le chronomètre (interface xml et code kotlin)

19/01/2022
Ajout de la caméra sur l'application

20/01/2022
Test et débogage de différents codes qui faisaient la reconnaissance faciale sur Android studio

26/01/2022
Test et débogage de différents codes qui faisaient la reconnaissance faciale sur Android studio

28/01/2022 au 30/01/2022
Débogage

31/01/2022 au 03/02/2022
Ecriture d'un nouveau code de reconnaissance faciale via un tutoriel vidéo

Du 10/02/2022 au 16/02/2022
J'améliore le code de la reconnaissance faciale sur l'application et puis je le donne à Hajar BOUZIANE pour la fusion de nos partie. Après ça, je commence à rechercher des algorithmes de reconnaissance faciale pour la webcam de l'ordinateur

17/02/2022
J'ai créé une interface python où je pouvais apercevoir ce que la webcam voyait grâce à un tutoriel mais il y avait beaucoup trop de latence donc j'ai commencé à rechercher d'autres algorithmes.

Du 19/02/2022 au 22/02/2022
Avec tous les algorithmes que j'ai trouvé j'ai pris les bouts de code que j'ai trouvé intéressant pour notre reconnaissance faciale :
- J'ai trouvé un nouveau tutoriel qui me permet de prendre en photo la personne avant l'examen.
- Un qui permet de reconnaitre la personne devant la webcam (avec moins de latence que l'ancien, mais il y en a un peu tout de même).
- Un autre qui permet d'enregistrer dans un fichier csv ce qu'on observe (code qui a servi pour l'application et la webcam).

Du 23/02/2022 au 25/02/2022
Je définis les scénarios qui peuvent être considérés comme de la triche et je les implémente dans le code. Ensuite, je crée une reconnaissance d'objets et de personne dans le serveur d'Hajar pour analyser les images qu'elle envoie au serveur depuis l'application.

26/02/2022
Fusion de mon serveur python avec les codes de Hajar. On a corrigé quelques bugs et on a fait des tests qui ont tous fonctionnés.

27/02/2022
Avec Hajar on a créé les vidéos et les slides pour la présentation du lendemain.

State of the Art

Business Aspect

LockDown Browser

LockDown Browser

Lockdown Browser est utilisé par plus de 2000 établissements et fait passer 100 millions d’examens par an. Il possède une extension qui se nomme Respondus Monitor pour pouvoir utiliser la webcam.

LockDown Browser

Voici les tarifications pour LockDown Browser :

Étudiant ETP : Frais annuels


1 à 2 000 étudiants : 2795 $

2 001 à 2 500 étudiants : 3195 $

2 501 à 5 000 étudiants : 3745 $

5 001 à 10 000 étudiants : 4595 $

10 001 à 15 000 étudiants : 5045 $

15 001 à 20 000 étudiants : 5345 $

20 001 à 25 000 étudiants : 5695 $

25 001 à 30 000 étudiants : 5995 $

30 001 à 35 000 étudiants : 6395 $

35 001 à 40 000 étudiants : 6795 $

Plus de 40 000 étudiants : Demander un devis


Source : ici

Respondus Monitor

 

Respondus Monitor ne pouvant pas s’utiliser seul, les frais de cet outil s’ajoutent à celui de LockDown Browser. Voici les tarifications :

Licence pour la durée initiale

Forfait La durée initiale est forfaitaire, quelle que soit la taille de l’établissement.* Cela permet aux universités de déployer Respondus Monitor et d’évaluer l’intérêt sur l’ensemble du campus. Frais de licence : 3 950 $ (les frais annuels sont calculés au prorata en fonction de la date de début de la licence.)

Options de licence pour les périodes suivantes à plusieurs niveaux

Après la première période de licence, de nombreuses institutions optent pour une licence à plusieurs niveaux où les postes peuvent être achetés par tranches de 1 000. Cette option est idéale lorsque l’utilisation prévue est faible à modérée et que la croissance est prévisible. Niveau de base (1 000 sièges) : 3 950 $ Des niveaux supplémentaires de 1000 postes peuvent être achetés pendant la durée de la licence pour 1950 $ chacun.

Illimité

Les licences illimitées sont destinées aux établissements qui souhaitent rendre Respondus Monitor disponible sur l’ensemble du campus sans restriction d’utilisation. C’est idéal lorsque l’adoption est rapide ou lorsque les professeurs sont encouragés à utiliser davantage les tests en ligne. Le prix est basé sur le type et la taille de l’établissement Les devis sont disponibles sur demande

Achat étudiant

Les étudiants achètent leur propre abonnement à Respondus Monitor, valable 12 mois pour tous les cours et examens qui utilisent Respondus Monitor dans leur établissement. 15 $ pour 12 mois Le paiement est effectué la première fois qu’un examen nécessite l’utilisation de Respondus Monitor. Carte de crédit, carte de débit et Paypal acceptés.

Respondus Monitor – Pricing

ProctorU

ProctorU

Les marchés que ProctorU desservent sont les suivants :

  • l’enseignement supérieur
  • admissions académiques et tests de langue
  • soins de santé – programmes d’évaluation d’entreprise
  • services financiers
  • programmes réglementés par le gouvernement
  • autres certifications et licences
  • informatique
Coût ProctorU

 

Les frais d’examen surveillé varient en fonction du niveau d’authentification et des options de surveillance choisies par votre instructeur. Confirmez avec votre instructeur le nombre d’examens surveillés dans le cours et le coût estimé associé à ces examens. Les frais d’examen varient généralement de 15 $ à 30 $, selon la durée de l’examen. Les étudiants qui attendent jusqu’à la dernière minute pour réserver leur temps d’examen se verront imposer des frais de retard supplémentaires, 5 $ par heure d’examen (72 heures à 24 heures avant le rendez-vous) ou 8,75 $ par heure d’examen (moins de 24 heures avant le rendez-vous).

Proctoring Service | Flex Scheduling | Take it Soon | Take it Now

60 Minutes or Less | $17.50|$22.50 | $26.25

120 Minutes or Less | $25.00 | $30.00 | $33.75

180 Minutes or Less | $33.75 | $38.75 | $42.50

240 Minutes or Less | $42.50 | $47.50 | $51.25

DESCRIPTIF DES FRAIS

Des frais ” Flex Scheduling ” s’appliquent si vous planifiez l’examen plus de 72 heures à l’avance.

Les frais ” Take it Soon ” s’appliquent si vous planifiez dans les 72 heures suivant l’examen.

Des frais « Take it Now » s’appliquent si vous passez l’examen immédiatement sur demande sans rendez-vous préalable.

Examity

Examity

Examity sert plusieurs objectifs tels que :

  • l’enseignement supérieur
  • les certificats
  • tests standardisé

Plus de 500 établissements supérieur utilisent Examity.

FRAIS D’EXAMEN

Service de surveillance | Authentification et surveillance en direct

60 minutes ou moins | 15,00 $

120 minutes ou moins | 22,00 $

180 minutes ou moins | 29,00 $

240 minutes ou moins | 36,00 $

TestWe

TestWe

 

TestWe est un progiciel français et est utilisé dans les secteurs suivant :

  • Education,
  • Formation,
  • Entreprise Grand compte / ETI et pour des métiers Marketing.

Le tarif de TestWe est disponible sur demande (ce prix peut évoluer en fonction du nombre d’utilisateurs, d’options activées …).

Technical Aspect

LockDown Browser

LockDown Browser

 

LockDown Browser est un navigateur personnalisé qui verrouille l’environnement de test dans un système de gestion de l’apprentissage. Comment fonctionne le navigateur LockDown :

  • Les évaluations sont affichées en plein écran et ne peuvent pas être réduites
  • Les options du menu du navigateur et de la barre d’outils sont supprimées, à l’exception de Précédent, Suivant, Actualiser et Arrêter
  • Empêche l’accès à d’autres applications, y compris la messagerie, le partage d’écran, les machines virtuelles et les postes de travail distants
  • Les fonctions d’impression et de capture d’écran sont désactivées
  • Copier et coller quoi que ce soit vers ou depuis une évaluation est empêché
  • Les options du menu contextuel, les touches de fonction, les raccourcis clavier et le changement de tâche sont désactivés
  • Il est impossible de quitter une évaluation tant que l’étudiant ne l’a pas soumise pour notation.
  • Les évaluations configurées pour être utilisées avec LockDown Browser ne sont pas accessibles avec d’autres navigateurs

Respondus Monitor 

 

Respondus Monitor est un produit compagnon pour LockDown Browser et ne peut pas être utilisé sans lui. S’appuie sur le navigateur LockDown Cela commence par LockDown Browser, un navigateur personnalisé qui verrouille l’environnement de test dans un système d’apprentissage. Les étudiants ne peuvent pas imprimer, copier, accéder à d’autres applications ou effectuer des recherches sur Internet pendant un examen en ligne.

Surveillance entièrement automatisée 

 

Respondus Monitor est une solution de surveillance entièrement automatisée. Les étudiants utilisent une webcam pour s’enregistrer pendant un examen en ligne. Par la suite, les événements signalés et les résultats de la surveillance sont mis à la disposition de l’instructeur pour un examen plus approfondi.

“Lancements automatiques” depuis n’importe quel navigateur

 

Après une installation rapide et unique, Respondus Monitor se lance à partir du navigateur préféré de l’étudiant (Chrome, Firefox, Safari, Edge) chaque fois que les paramètres de l’examen l’exigent. Les étudiants sont ensuite guidés à travers une séquence de pré-examen, y compris une vérification par webcam.

S’intègre de manière transparente avec les systèmes LMS + Publisher

 

Respondus Monitor s’intègre parfaitement aux systèmes d’apprentissage tels que Canvas, Blackboard, Moodle, Brightspace, Schoology, Pearson MyLab et McGraw Hill ALEKS . Les étudiants accèdent aux examens dans leur système d’apprentissage comme ils le feraient normalement. Les instructeurs font également tout dans le système d’apprentissage, y compris l’examen post-examen des résultats de surveillance.

Pas de planification ni d’inscription

 

Il n’est pas nécessaire de programmer une session de surveillance à l’avance. Les étudiants et les instructeurs n’ont même pas besoin de s’inscrire sur le site Web de Respondus.

Prend en charge la plupart des appareils Icône de titre

 

Respondus Monitor n’est pas seulement un plugin de navigateur. Il offre une expérience native riche en fonctionnalités pour les appareils Windows, Mac, Chromebook et iPad.

ProctorU

ProctorU

 

ProctorU est un logiciel de gestion des évaluations qui aide les établissements universitaires à enregistrer et à examiner les sessions d’examens afin d’identifier les événements suspects.

Les principales fonctionnalités de la plate-forme incluent la vérification d’identité multifactorielle, la surveillance en direct, l’enregistrement vidéo de bout en bout, le signalement des incidents et les événements vidéo horodatés. La solution permet aux administrateurs de rembobiner les vidéos tout en visionnant des sessions en direct et d’empêcher la tricherie ou le vol de contenu en temps réel.

ProctorU permet aux enseignants de vérifier l’identité des participants et d’analyser les antécédents pour examiner les documents non autorisés. Les responsables peuvent également recevoir des enregistrements d’écran et vidéo avec des horodatages et d’autres preuves documentées de sessions douteuses pour signaler les incidents.

ProctorU permet aux chefs d’équipe d’accéder aux files d’attente d’événements suspects signalés et de les examiner pour prendre les mesures requises sur une interface unifiée. Il offre également une intégration avec plusieurs systèmes de gestion de l’apprentissage (LMS) tels que Canvas, Moodle et Blackboard, permettant aux superviseurs d’effectuer des tests en ligne.  

Examity

Examity

 

Examity fournit des solutions de surveillance automatique et en direct conçues pour protéger l’intégrité des tests pour les collèges, les universités, les fournisseurs de certification et les employeurs. Il offre des options d’authentification configurables, des enregistrements d’examens, des violations signalées avec vidéo, des outils d’audit humain, etc.

Grâce à la surveillance automatique activée par l’IA, Examity peut confirmer l’identité des personnes testées via la vérification de l’identité avec photo et les questions de défi. Tout au long de l’examen, la plateforme surveille les comportements des candidats en capturant les changements audio, de mouvement et systémiques.

Avec le plan premium d’Examity, un auditeur humain peut examiner les sessions d’examen ainsi que les violations potentielles signalées par la plateforme. De plus, pour les examens, les certifications ou les examens préalables à l’emploi plus critiques, un surveillant en direct peut procéder à l’authentification et à la surveillance des examens.

TestWe

TestWe

 

Voici les fonctionnalités clés de TestWe :

  • Système anti-triche
  • Plusieurs niveaux d’accès à la plateforme.
  • Envoi automatique des évaluations.
  • Une implémentation sur tous les LMS.
  • Proctoring Live
  • Le proctoring à distance live par un surveillant.
  • Le retour vidéo par webcam et mobile et partage d’écran.
  • La conformité aux réglementations françaises et européennes.
  • Gestion d’administration
  • Des grilles/consignes de correction par question.
  • Une correction par copie ou par question.
  • Le flag des réponses des candidats.
  • Tableau de bord
  • Une interface utilisateur simple à utiliser.
  • Des rapports de surveillance générés par une équipe d’experts TestWe.
  • Un tableau de bord des surveillances programmées, en cours ou clôturées.

Project Description

Problem Definition
Dans le cadre de l'UE (Unité d'Enseignement) Internet des objets, il nous a été demandé de réaliser un système de surveillance d'examens. Il s'agit de créer une application qui communique avec un ordinateur selon le protocole client-serveur afin d'analyser le comportement d'un candidat pendant un examen.
Challenges & Motivation
Nous voulions créer une solution qui soit simple d'utilisation, accessible à tous public et à un prix abordable. Cependant, l'enjeu était de taille car à nos débuts, nous ne maîtrisions presque aucun outils que nous avons utilisé (langages, logiciels, etc.). Malgré tout, nous avons persévéré pour que notre solution puisse proposer un ensemble de fonctionnalités qui répondent aux attentes des utilisateurs. Parmi ces fonctionnalités nous avons :
- la reconnaissance faciale,
- la reconnaissance d'objets
- l'enregistrement vocal
- la détection de mouvements
Real and Complete Usecases

Si vous ne voyez pas l’image cliquez ici

Technical Description

RAPPORT TECHNHIQUE

 

I. INTRODUCTION

 

Dans le cadre de l’UE (Unité d’Enseignement) Internet des objets, il nous a été demandé de réaliser un système de surveillance d’examens. Il s’agit de créer une application qui communique avec un ordinateur selon le protocole client-serveur afin d’analyser le comportement d’un candidat pendant un examen. En effet, l’ordinateur qui joue le rôle de serveur doit pouvoir analyser les données envoyées par l’application qui simule le client afin de déterminer les suspicions de fraude que nous énumérons plus tard.

Pour ce faire, l’application possède deux modes principaux.

1. Un mode tête qui signifie que l’application est placée sur la tête du candidat. Dans ce cas, elle va:

  • prendre une photo toutes les deux secondes pour les envoyer au serveur afin de lui montrer ce que le candidat voit pendant la réunion,
  • envoyer au serveur les coordonnées x y et z de l’accéléromètre placé dans l’appareil contenant l’application pour qu’il puisse déterminer les mouvements de la tête pendant la réunion.

2. Un mode main lorsque l’application est placée sur la main. Ainsi :

  • comme pour l’application, elle enverra au serveur les valeurs de l’accéléromètre,
  • elle affichera sur son écran un chronomètre montrant le temps écoulé depuis le début de la réunion.

Ce projet a ainsi pour objectif de proposer un prototype d’outil d’aide à la prise de décision. Il retranscrit les suspicions de fraude dans des fichiers Excel qui seront consultés par l’examinateur pour qu’il puisse en déduire s’il y a réellement eu au moins une fraude. Mais pour mieux comprendre la démarche entamée, nous avons rédigé ce rapport technique afin d’y décrire les fonctionnalités du système ainsi que les détails d’implémentation.

II. gRPC : Remote Procedure Call

gRPC est une technologie de communication open source développée par Google. Elle consiste en la création d’un service (avec ses méthodes, entrées et sorties) compatible avec de nombreux langages de programmation comme Java, Kotlin, Python, etc.

Il permet ainsi de construire des liaisons client/serveur avec une très bonne prise en charge de la diffusion bidirectionnelle:

  • Le serveur implémente une interface et exécute un serveur gRPC pour gérer les clients,
  • Le client dispose d’un stub qui fournit les mêmes méthodes que le serveur pour qu’il puisse communiquer avec lui.

C’est pour ces raisons que nous avons utilisé le protocole gRPC. Pour qu’il puisse effectuer des communications entre notre programme Kotlin (application mobile) et notre serveur Python (ordinateur portable). Voici une représentation simplifiée de notre protocole client-Serveur: Pour mettre en place un tel protocole, il faut dans un premier temps créer un IDL (Interface Definition Language) qui n’est rien de plus qu’un contrat de service rédigé sous la forme d’un fichier texte `.proto`. Ainsi, grâce à ce dernier, le compilateur Protobuf `protoc` va pouvoir générer du code pour le client et le serveur.

  • Dans le cas de notre système de surveillance d’examen, nous avons créé le fichier `envoie.proto` qui est composé : de deux blocs identiques qu’on appelle des messages et qui sont composés d’une série de paires (type, nom de la variable) appelées champs. Voir code ici.
  •  d’un bloc qui définit le service gRPC et qui va être utilisé pour la communication client-serveur. Voir code ici.

Dans un second temps, il faut mettre à jour le code gRPC (utilisé par notre serveur python) pour qu’il puisse utiliser notre service. Pour ce faire, on se place sur le répertoire où se trouve notre fichier proto (ici SpyCheat) et on exécute les commandes suivantes : Voir code ici.

Les fichiers `envoie_pb2.py` et `envoie_pb2_grpc.py` sont alors générés et seront utilisés pour implémenter les fonctions de notre serveur pour qu’il puisse communiquer avec notre application.

III. SpyCheat : Application android

 

1. Objectif

L’application SpyCheat joue le rôle de client dans notre système de surveillance d’examens. Elle se découpe en 3 parties principales où la première sert à créer des réunions en donnant la liste des utilisateurs qui auront le droit d’y accéder. La seconde est utilisée pour lancer une réunion quand l’application est posée sur la main. Et pour finir, la troisième partie permet de participer à une réunion en ayant mis l’application sur la tête. Finalement, ces trois parties sont utilisées pour de détecter les tentatives de fraudes en s’assurant que uniquement les personnes inscrites peuvent se connecter à la réunion et en analysant des photos et les mouvements d’un candidat.

2. Prérequis

 

Pour y parvenir, l’application à été crée sur Android Studio. Elle est composée de plusieurs fichiers dont :

  • `envoie.proto` : le même fichier que nous avons présenté dans la première partie et qui est stocké dans un répertoire nommé `proto` (lui même placé dans le répertoire `main`).
  • `build.gradle` : un fichier qui permet d’utiliser le compilateur protobuf (gRPC) et d’ajouter la caméra (caméraX) à notre code. Pour cela, il faut ajouter les lignes suivantes :
    •  Dans le bloc des plugins : Voir code ici.
    • Dans le bloc android : Voir code ici.
    • Dans le bloc des dependences: Voir code ici.
  • Pour finir, on ajoute à la fin du fichier ce nouveau bloc: Voir code ici.
  • A cela s’ajoute un troisième et dernier fichier appelé `AndroidManifest.xml`. Il va servir à implémenter les permissions pour utiliser la caméra et la wifi : Voir code ici.

Une fois que c’est trois fichiers sont modifiés, il faut exécuter la commande `gradlew build` sur le terminal d’android studio pour que les fichiers contenant les fonctions gRPC soit générés.

3. Fonctionnement

Une fois que la liste des prérequis ait été respectée, nous pouvons nous intéresser aux fonctionnalités de l’application. En effet, cette dernière est composée de :

  • une page MainActivity.kt : l’utilisateur doit d’abord donner son autorisation pour que l’application puisse utiliser la caméra. Ensuite, il saisit l’adresse IP du réseau ainsi que le port pour que l’application puisse faire appel à la méthode suivante : Voir code ici. Si la connexion a échouée un message rouge s’affichera sur l’écran sinon l’utilisateur sera redirigé vers la page suivante. 
  • une page d’accueil (AcceuilActivity.kt) : l’utilisateur à le choix entre créer une réunion ou se connecter à une réunion.
  • une page de création de réunion (InscriptionActivity.kt) : lorsque l’utilisateur arrive sur cette page, il doit remplir un formulaire en saisissant le nom d’une réunion et l’adresse mail d’un candidat. Pour valider l’inscription, il doit cliquer sur le bouton envoyer. La méthode suivante est alors exécutée pour que l’information soit envoyée au serveur : Voir code ici.
  • une page de connexion (ConnexionActivity/kt) : le candidat doit saisir le nom de la réunion et son adresse mail. En cliquant sur le bouton valider, la méthode précédente est exécutée en précisant cette fois qu’il y a une tentative de connexion (tenteConnexion = true). Si le candidat n’est pas inscrit, un message d’erreur s’affichera sinon il sera redirigé vers la page suivante.
  • une page OptionActivity.kt : le candidat a alors le choix entre deux options:
    • participer à la réunion en mode tête. Il sera alors redirigé vers la page de HeadActivity.kt et devra placer l’application sur sa tête. Lorsque la réunion débutera, la caméra se lancera ainsi que l’accéléromètre et leur données seront envoyées toutes les 2 secondes au serveur (toujours grâce à la méthode précédente).
    • participer à la réunion en mode main. Il sera donc redirigé vers la page HandActivity.kt et devra placer l’application sur sa main. Cette fois-ci c’est l’accéléromètre et le chronomètre qui sont lancé lorsque la réunion débutera.
IV. Serveur : code python

 

1. Objectifs

 

Placé sur un ordinateur portable, le serveur python se découpe en plusieurs parties. La première consiste à gérer les inscriptions et les connexions des utilisateurs. La seconde partie intervient lorsqu’une réunion a débuté en analysant les données (photos et accéléromètre) envoyées par l’application. Et pour finir, une troisième partie dédiée à l’enregistrement vocal.

2. Prérequis

 

Pour lancer le serveur, il faut installer et importer un certain nombre de paquets : 

  • Pour gRPC il faut importer : Voir code ici.
  • Pour convertir en `.jpg` une image envoyée par l’application sous forme de chaîne de caractères : Voir code ici.
  • Pour écrire et lire des fichiers CSV : Voir code ici.
  • Pour analyser les coordonnées de l’accéléromètre : Voir code ici.
  • Pour l’enregistrement vocal il faut installer et importer : Voir code ici.
  • Pour la reconnaissance de personne et d’objets sur les photos envoyé par l’application : Voir code ici.
3. Fonctionnement

 

Une fois que la liste des prérequis ait été respecté, nous pouvons nous intéresser aux fonctionnalités du serveur. En effet, ce dernier est composé d’une fonction `server()` qui attend que des clients (maximum 10) se connectent sur son réseau. Dans ce cas là, il exécute la classe `Greeter()` à chaque fois que le client (application) lui envoie des données: Voir code ici.

Les données subissent alors une série de traitement que nous allons énumérer. Mais pour mieux comprendre les phases de traitement, nous allons nous baser sur des scénarios : 

  • Je suis un utilisateur et je souhaiterai créer des réunions“. L’utilisateur est allé sur l’application SpyCheat et c’est dirigé vers la page des inscriptions. Lorsqu’il clique sur le bouton “envoyer” après avoir saisit le nom d’une réunion et l’adresse mail d’un candidat, le serveur va :
    • Si le fichier ‘ReunionEtCandidats.csv’ (stocke les réunions qui ont été créés) **n’existe pas**, le serveur le crée et écrit sur une ligne le nom de la réunion avec l’adresse mail du candidat inscrit à cette dernière
    • Si le fichier existe alors le serveur commence par vérifier si le candidat a déjà ou non été inscrit dans le fichier avec la fonction `def verifCandidat(reunion, mail)`. Dans le cas échéant, il est ajouté au fichier grâce à la fonction `def ajoutCandidat(reunion, mail)` sinon l’inscription est ignorée.
  • Je suis un candidat et je souhaiterai me connecter à une réunion“. Le candidat est allé sur l’application SpyCheat et c’est dirigé vers la page de connexion. Lorsqu’il a cliqué sur le bouton “valider” après avoir saisit le nom de sa réunion et son adresse mail, le serveur va :
    • Si les identifiants ne sont pas inscrits dans le fichier ‘ReunionEtCandidats.csv’ alors il envoie un message à l’application pour lui dire que le candidat ne peut pas se connecter à la réunion. Celle-ci reçoit l’information grâce à ces lignes de code : Voir code ici.
    • Si les identifiants sont inscrits dans le fichier ‘ReunionEtCandidats.csv’ alors il envoie un message à l’application pour lui dire que le candidat a le droit de se connecter. Dans ce cas, il sera redirigé vers une page qui lui demandera de choisir entre l’option tête et l’option main.
  • Je suis un candidat est je souhaiterai participer à la réunion en mode tête (respectivement en mode main)“. Dans ce cas, le serveur se doit de vérifier si le candidat a déjà participé à cette réunion ET avec ce mode. Pour ce faire, le serveur reçoit un message en provenance de l’application l’informant que ce candidat veut participer à cette réunion. Il parcourt alors un fichier appelé ‘InventaireTeteReunionEtCandidats.csv’ (respectivement ‘InventaireMainReunionEtCandidats.csv’) grâce à la fonction `def encours_ou_termine(fileName, reunion, mail, colonne, statut)` : s’il y est marqué que le candidat a déjà terminé la réunion, alors il envoie un message à l’application pour donner son désaccord. En revanche, si rien n’est indiqué dans le fichier, alors le serveur donne son accord à l’application et le candidat sera redirigé vers la page de réunion en mode tête. Notons que l’application reçoit la réponse du serveur grâce à ces lignes de code : Voir code ici.
  •  “Je suis un candidat et je participe à la réunion en mode main“. Lorsque le candidat clique sur le bouton “commencer“, plusieurs évènements entrent en jeu :
    • Premièrement, le serveur écrit dans le fichier ‘InventaireTeteReunionEtCandidats.csv’ que la réunion est en cours grâce à la fonction `def inventaire(fileName, reunion, mail, colonne, etatReu)`. Ce même fichier est mis à jour lorsque le candiat quitte la réunion en écrivant “terminé”.
    • Deuxièmement, il lance l’enregistrement vocal grâce à la fonction `def record()`. Cette dernière lance un enregistrement toutes les 5 secondes et les concatènent au fur et à mesure pour ne former qu’un seul audio. Notons que l’enregistrement se termine lorsque le candidat a quitté la réunion.
    • Troisièmement, il traite les valeurs de l’accéléromètre grâce à la fonction `def calibrage(x, y ,z ,nb_ite)`. Cette dernière commence par faire une moyenne des 5 premières coordonnées envoyées par l’application. Ainsi si les nouveaux coordonnées s’éloigne de la moyenne (à partir d’un certains seuil), le serveur est en mesure de déterminer s’il y a eu un mouvement droite, gauche, haut ou bas de la tête.
    • Quatrièmement, il traite les images envoyées par l’application. Pour ce faire, grâce à la fonction `def base64_to_image (img_data)` la chaine de caractère est d’abord converti en image `.jpg`. Puis, un algorithme est alors appliqué à cette image de façon a reconnaître les objets et les personnes présent sur la photo et les écrits dans le fichier `Objects_Detection.csv`.
  • Je suis un candidat et je participe à la réunion en mode main“. Lorsque le candidat clique sur le bouton “commencer“, seules les valeurs de l’accéléromètre sont envoyées au serveur. Mais par manque de temps, ces dernières ne sont pas traitées.
V. Reconnaissance Faciale : script python

 

1. Objectif

 

Le but était d’implémenter une solution de reconnaissance faciale au niveau de la webcam de l’ordinateur. Cette dernière devait être capable de reconnaître la personne qui passait l’examen et d’enregistrer en cas de suspicion de fraude.

2. Prérequis

 

Il faut installer toutes les librairies suivantes dans votre environnement python pour permettre à l’utilisateur de lancer les scripts : Voir code ici.

3. Fonctionnement

Une fois que nous avons les prérequis nécessaire nous pouvons lancer le script python pour nous prendre en photo avant l’examen : Voir code ici.

Il faudra ensuite écrire votre nom puis appuyer sur entrée pour que la photo soit prise et enregistrée dans le dossier known_faces. Ensuite, nous pouvons d’ores et déjà lancer la commande qui va nous permettre de lancer la webcam de l’ordinateur pour faire l’examen. La commande est la suivante : Voir code ici.

Des informations sont communiquées sur le terminal pour voir l’avancé du chargement. Un message sera affiché pour pouvoir entrer le nom de la personne qui passera l’examen.

Voici les différents scénarios que nous avons traité :

  • Si la personne n’entre pas le bon nom, elle se verra être enregistrée puis on stockera la personne que nous verrons dans un fichier qui se nommera comme le nom qu’elle a entré pour se connecter.
  • Si la personne entre le bon nom puis au cours de l’examen se lève pour aller ailleurs, un enregistrement sera pris (dans le dossier recording) et pourra servir de preuve. De plus sur le fichier csv (dans le dossier Students puis dans le dossier de l’élève en question ) généré à son nom il y aura un intervalle de temps où la personne ne saura pas notée (nom de la personne et la date(jour,heure,seconde)).
  • Si la personne entre le bon nom puis au cours de l’examen un autre élève entre dans le champs de vision de la webcam, un enregistrement sera pris (dans le dossier recording) et pourra servir de preuve. De plus sur le fichier csv (Attendance.csv) généré il y aura écrit soit le nom de la seconde personne si l’algorithme le reconnait soit comme étant un inconnu (nom de la personne et la date(jour,heure,seconde)).

Hardware

Materials
ImageNamePart NumberPriceCountLink
Asus Zenbook duo - 16Go de RAM - SSD 1 To11599,99€1🛒
Samsung S201799€1🛒
Schematic

Software