====== Atelier travail précaire du clic et reconnaissance faciale ====== Dans le cadre du [[https://fdln.insa-rennes.fr/agir/ateliers-protegez-votre-vie-privee-et-passez-au-libre/|Festival des Libertés Numériques 2019]] à la Bibliothèque de l'INSA. ===== Objectifs ===== * Vous pouvez vous servir de ces ressource pour vous entrainer au code * Vous pouvez utilisez ces méthodes pour reproduire et/ou adapter ce type de séances * Appréhender les tenants et aboutissants du //Digital Labour// * Découvrir la reconnaissace faciale * Établir collectivement des stratégies pour se défendre ==== Vous avez besoin ==== * L’envie de transmettre et d’apprendre quelque soit votre niveau avec un zeste de curiosité ;-) * 1 ordinateur minimun pour une séance en Mob programming * 1 ordinateur par binôme en Pair programming * 3 personnes minimun dont 1 qui facilite. 8 à 10 personnes au plus pour un personne aguérrie à la facilitation afin de conserver une qualité de séance et un confort de rapport humain. ==== Niveau requis ==== :!: Aucun prérequis de niveau :!: Pour la séance décrite ici les niveaux étaient mélangés allant de la découverte pure et simple au niveau développeur confirmé. La diversité fait la richesse et chacun apprend de l’autre. ====== L’atelier ====== * Celles et Ceux qui seront là feront l’atelier * Il n’y a pas vraiment d’organisatrices.eurs en chef * Chaque participant.e peut porter une responsabilité collective si cela lui convient * Chaque participant.e honore la loi des deux pieds : si vous n’êtes ni en train d’apprendre, ni de contribuer, passez à autre chose ! ===== Déroulé ===== ==== Javascript et prosopagnosie ===== > « //La prosopagnosie est un trouble de la reconnaissance des visages. C'est une agnosie visuelle spécifique rendant difficile ou impossible l'identification ou la mémorisation des visages humains. Le prosopagnosique est généralement capable de reconnaître les personnes en recourant à certains subterfuges, comme l'identification visuelle par l'allure générale (démarche, taille, corpulence) ou à des détails comme un vêtement familier, la coiffure, une barbe, une tache de naissance ou des lunettes.// » [[wpfr>Prosopagnosie]] Nous allons tenter de réaliser les tâches d'un backlog, qui selon la configuration pourra dans le framagit être pré-préparé. - afficher 70 images en boucles - en boucle aléatoirement - ajouter un bouton ajouter suivant - ajouter un bouton déjà vu //C’est pour tester si tu es prosopagnosique, c’est à dire si tu est capable de reconnaître des visages.// === 1. Créer un espace de travail === en débuttant⋅e sur git((tutoriel de Christophe Duccamp https://www.christopheducamp.com/2013/12/15/github-pour-nuls-partie-1)) avec un terminal git config --global user.name "Votre Nom Ici" Puis git config --global user.email "votre_email@votre_email.com" Ou en créeant directement sur une plateforme, exemple [[https://framagit.org/public/projects|framagit]] === 2. Créer un projet ==== Dans la plateforme choisie en ligne, puis sur l'odinateur de travail en local $ mkdir ~/MonProjet //''%%mkdir%%'' => Make Directory, soit créer un dossier. Le ''%%~/%%'' vise à construire le dosser (repository) au niveau supérieur de la structure de fichiers de notre ordinateur, il n'est pas obligatoire, cela dépend de votre stratégie de rangement// Puis, pour travailler sur le projet en question saisissez : $ cd ~/MonProjet Pour terminer,synchronisons le dépot distant et le dépot local $ git remote add origin https://framagit.org/nomutilisateur/MonProjet.git Pour confirmer $ git remote -v Enfin, pour spécifier la branche master de mon dépôt, et téléverser, ou « push », nos modifications vers le dépôt distant $ git push --set-upstream origin master //''%%cd%%'' => changement de direction (chemin) pour entrer dans dossier// Pour initialiser git dans ce projet $ git init Il nous reste à vérifier l'état de notre travail avec git le getsionnaire de version $ git status === 3. Créer un page .htlm === Comme dans notre précdent example : https://framagit.org/Xavcc/FaceblindJ $ touch index.html Puis vérifier notre état git $ git status :!: expliquer ce qui se passe et pourquoi :!: Puis pour mettre à jour $ git add index.html Nous venons d'ajouter notre premier fichier, pour documenter et permettre une compérehension de l'hitoire de notre projet pour autrui, il faut le « consigner » : $ git commit -m "création de index.html" Puis $ /etc/init.d/apache2 start $ firefox index.html Alonns visualiser sur ''%%file:///home/USER/.../FaceFdln/faceblind/index.html%%'' === 4. Réaliser la première #US1 === la première User Story (us#1) du dépot par une visite des fichiers pré ouverts du repo. Puis ouverture pour édition d’un fichier index.html guidé par les autres participant⋅e⋅s. Pour le ''%%src%%'' les ''%%“”%%'' ne sont plus obligatoire dans JavaScript Kerbors prospagnosie

Prosopagnosie

Dans le navigateur avec l'inspescteur de code : document.querySelector(“img”) puis entrée puis document.querySelector(“img”).src"faceblinding/2.jpg" pour vérifier si cette manipulation fonctionne dans l’éditeur : Kerbors prospagnosie

Prosopagnosie

Aussi possible Kerbors prospagnosie

Prosopagnosie

Maintenant on //Commit// sur le repo pour valider cette US #1 dans la branch master === 5. #US2 affichage aléatoire === Création d’un nouvelle branch pour la seconde US :!: Faire de l’aléatoire :!: Kerbors prospagnosie

Prosopagnosie

Créer un nouveau fcihier JS ''%%script.js%%'' dans le repo const changeImage = () => { const i = Math.floor(Math.random() * 75) + 1 document.querySelector('img').src = `faceblind/${i}.jpg` } document.querySelector('button').onclick = changeImage du coup ''%%index.html%%'' devient Kerbors prospagnosie

Prosopagnosie

''%%style.css%%'' devient body { text-align: center } h1 { color: yellow background-color: black } Maintenant : commit dans le repo sur #us2 === 6. #US3 Bouton suivant === ajouter un bouton ‘suivant’ sur la page web commit sur #us3 === 7. #US4 Bouton déja vu === Pull Request vide et/ou dans une user story Pourquoi faire ? Et quels gains ? Ouvrir une pull request avec une page de code ou de text quasi vie reveint à ouvrir un fil de discussions et de contributions pour favoriser : * l’écriture collaborative * l’archivage des contributions techniques directement liées avec les discussions ainsi qu’avec les dates * offre une documentation plus compléte en terme de contexte qu’un github/wiki intégrée dans le backlog (to do, en cours, fait) avec des users stories = suivi facilité de l’évolution des taĉhes avec collaborations et bone base de documentation Utiliser ce principe avec un outil d’aide à l’intégration continue, pour suivre la qualité des contributions sur les pull requests permet une qualité de travail de haute qualité sur du code collaboratif ==== Parler du travail du clic ==== - En attendant les robots. Enquête sur le travail du clic https://www.franceculture.fr/oeuvre/en-attendant-les-robots-enquete-sur-le-travail-du-clic - Le "travail du clic" : qu'est-ce qui se cache derrière l'intelligence artificielle ? https://www.franceculture.fr/emissions/linvite-innovation/linvite-innovation-du-dimanche-06-janvier-2019 - Google ecrute des êtres humains payé 1$ / heure pour entraîner une ”intelligence artificielle” qui sert à tuer d'autres humains, sur des *signature* de metadata, avec des drones. https://theintercept.com/2019/02/04/google-ai-project-maven-figure-eight/ ==== Python et reconnaissance faciale automatisée ==== * Ref : * https://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html * https://github.com/informramiz/Face-Detection-OpenCV * https://www.superdatascience.com/opencv-face-detection === Installer OpenCV === Installez le paquet python-opencv avec la commande suivante dans le terminal(( Manuel OpenCV https://docs.opencv.org/3.4.1/d2/de6/tutorial_py_setup_in_ubuntu.html)) $ sudo apt-get install python-opencv Les dépôts d'Apt peuvent ne pas toujours contenir la dernière version d'OpenCV. Par exemple, au moment d'écrire ce tutoriel, apt repository contient 2.4.8 alors que la dernière version d'OpenCV est 3.x. En ce qui concerne l'API Python, la dernière version contiendra toujours un bien meilleur support et les dernières corrections de bugs ((wiki https://github.com/opencv/opencv/wiki)). La version OpenCV est contenue dans une variable cv2.__version__ spéciale, à laquelle vous pouvez accéder comme ceci : `--> python Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34) [GCC 7.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '3.2.0' >>> La variable cv2.__version__ est simplement une chaîne de caractères que vous pouvez diviser en versions majeure et mineure : >>> (major, minor, _) = cv2.__version__.split(".") >>> major '3' >>> minor '2' >>> === Le code source === En partant de https://github.com/shantnu/FaceDetect que nous corrigeons en """ Text OpenCV """ # Import the necessary packages import sys import cv2 # Get user supplied values imagePath = sys.argv[1] cascPath = "haarcascade_frontalface_default.xml" # Create the haar cascade faceCascade = cv2.CascadeClassifier(cascPath) # Read the image image = cv2.imread(imagePath) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Detect faces in the image faces = faceCascade.detectMultiScale( gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE ) print("Found {0} faces!".format(len(faces))) # Draw a rectangle around the faces for (x, y, w, h) in faces: cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) cv2.imshow("Faces found", image) cv2.waitKey(0) Puis par exemple sur une image du gourpe militant https://www.libertyhumanrights.org.uk `--> python opencv_fdln.py faces_cache.jpeg haarcascade_frontalface_default.xml Found 4 faces! {{ faces_cache.jpeg }} On obtient {{ fdln_test3.jpg }}