<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Amouton</id>
	<title>wiki-se.plil.fr - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Amouton"/>
	<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Amouton"/>
	<updated>2026-05-16T11:48:44Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=4865</id>
		<title>SE5 ECEAI/eceai 2023/2024/Patrikeev-Mouton</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=4865"/>
		<updated>2024-01-28T16:57:07Z</updated>

		<summary type="html">&lt;p&gt;Amouton : /* Résultats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Séance n°1:'''&lt;br /&gt;
&lt;br /&gt;
Une machin virtuelle a été crée sur le serveur chassiron avec la commande :&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname g19 --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* La machine virtuelle possède les propriétés suivantes:&lt;br /&gt;
&lt;br /&gt;
Hostname       :  g19&lt;br /&gt;
&lt;br /&gt;
Distribution    :  bookworm&lt;br /&gt;
&lt;br /&gt;
Stockage  : 10G&lt;br /&gt;
&lt;br /&gt;
Mémoire vive : 1G&lt;br /&gt;
&lt;br /&gt;
Mot de passe : glopglop&lt;br /&gt;
&lt;br /&gt;
Les fichier /etc/network/interfaces, /etc/resolv.conf et /etc/apt/sources.list on étés configurés comme demandé dans le sujet.&lt;br /&gt;
&lt;br /&gt;
* La Raspberry Pi 4 a été configurée et connectée au WiFi WIFI_IE_1.&lt;br /&gt;
&lt;br /&gt;
Mot de passe : pasglop&lt;br /&gt;
&lt;br /&gt;
Login : pifou&lt;br /&gt;
&lt;br /&gt;
La communication entre la Raspberry et la machine virtuelle a été vérifiée avec une commande de ping.&lt;br /&gt;
&lt;br /&gt;
* Le STM32F401RE et le capteur de distance (Nucleo-53L5A1):&lt;br /&gt;
&lt;br /&gt;
Les valeurs lues par le capteurs sont renvoyés par le port série du contrôleur STM32 vers le logiciel nanoedge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Séance n°2:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous nous sommes concentrés sur la création de programmes python qui seront par la suite implémentés sur la Raspberry et la machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
* Écoute de la liaison série du STM32 vers le PC:  &lt;br /&gt;
&lt;br /&gt;
Des objets de type json sont créés pour chaque donnée reçue. Par la suite, l'information est envoyée en http vers l'adresse locale de la machine à l'aide d'un code python. &lt;br /&gt;
&lt;br /&gt;
Ce programme sera destiné à la Raspberry par la suite.&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
    json_obj = { &amp;quot;time&amp;quot; : curr_time , &amp;quot;data&amp;quot; : liste_valeurs, &amp;quot;board_id&amp;quot; : config.BOARD_ID}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Écoute d'une requête http depuis le PC:  &lt;br /&gt;
&lt;br /&gt;
Création d'un code python pour écouter depuis un adresse et afficher les données reçue dans le terminal. Ce code sera destiné à la machine virtuelle par la suite.&lt;br /&gt;
&lt;br /&gt;
* Premier programme d’apprentissage IA avec Tensorflow2:&lt;br /&gt;
&lt;br /&gt;
Nous aimerions être en mesure de reconnaître les mouvement de main suivants:&lt;br /&gt;
&lt;br /&gt;
- de gauche à droite &lt;br /&gt;
&lt;br /&gt;
- de droite à gauche &lt;br /&gt;
&lt;br /&gt;
- de haut en bas &lt;br /&gt;
&lt;br /&gt;
- de bas en haut &lt;br /&gt;
&lt;br /&gt;
- du sol vers le plafond&lt;br /&gt;
&lt;br /&gt;
- du plafond vers le sol &lt;br /&gt;
&lt;br /&gt;
Un premier programme d'apprentissage a été créé pour être en mesure de faire de l'apprentissage de l'IA par la suite sur notre machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons besoin de plus de données pour effectuer un apprentissage de meilleur qualité.&lt;br /&gt;
&lt;br /&gt;
* Machine virtuelle:&lt;br /&gt;
&lt;br /&gt;
Installation des packages python3, pip et tensorflow.&lt;br /&gt;
&lt;br /&gt;
=== Résultat final : ===&lt;br /&gt;
&lt;br /&gt;
==== Calcul déporté ====&lt;br /&gt;
Les datasets ont été extraits par lecture du port série du STM32 grâce à minicom :&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
minicom -b 460800 -D /dev/ttyAMA0 -C nom_dataset.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le code du serveur d'IA et du convertisseur série-&amp;gt;REST est dans un [https://archives.plil.fr/amouton/IA-scripts repo git].&lt;br /&gt;
&lt;br /&gt;
Les dépendances suivantes sont nécessaires :&lt;br /&gt;
&lt;br /&gt;
* python3-parse&lt;br /&gt;
* python3-serial&lt;br /&gt;
* python3-sklearn&lt;br /&gt;
* python3-numpy&lt;br /&gt;
&lt;br /&gt;
===== Partie STM32 =====&lt;br /&gt;
Le STM32 capture une matrice de 8x8 distances 16 fois avant de les envoyer sur le port série (à 460800 bauds). Ces valeurs individuelles sont séparées par des virgules ','. Chaque échantillon de 1024 valeurs est séparé par un &amp;quot;\r\n&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== Partie Raspberry PI =====&lt;br /&gt;
Le Raspberry PI écoute sur le port /dev/ttyAMA0 les valeurs envoyées par le STM32 via un script Python. Il vient les parser pour les formater. Les données formatées (time : l'epoch de la mesure, data : une liste des 1024 valeurs, board_id : un identifiant de la configuration) sont envoyées au serveur. Cet envoi se fait via une requête HTTP sur une API REST.&lt;br /&gt;
&lt;br /&gt;
L'adresse du serveur auquel transmettre les données, ainsi que d'autres paramètres peuvent être configurés dans le fichier config.py &lt;br /&gt;
&lt;br /&gt;
===== Partie Serveur =====&lt;br /&gt;
Un script python démarre un serveur HTTP minimal écoutant sur le port 8123. Au démarrage, le script python vient parser 3 fichiers de dataset (correspondant respectivement à &amp;quot;à gauche&amp;quot; &amp;quot;à droite&amp;quot; &amp;quot;rien&amp;quot;), puis vient entraîner un modèle avec la bibliothèque SKLearn. Une fois l'entraînement terminé, le modèle pourra prédire le mouvement qui a été effectué.&lt;br /&gt;
&lt;br /&gt;
===== Performances et consommation =====&lt;br /&gt;
La Raspberry et le STM32 consomment en moyenne 3W.&lt;br /&gt;
&lt;br /&gt;
La charge du script de traitement sur la VM est comprise entre 0 et 0.7%. Cependant la consommation réelle de la VM reste dure à évaluer.&lt;br /&gt;
&lt;br /&gt;
=== Calcul sur STM32 ===&lt;br /&gt;
Grâce à NanoEdge AI Studio, nous pouvons déclarer un projet de reconnaissance nClass, avec le même dataset que pour le calcul déporté.&lt;br /&gt;
&lt;br /&gt;
=== Production finale ===&lt;br /&gt;
Les meilleurs résultats semblent être obtenus avec la méthod SKLearn.&lt;br /&gt;
&lt;br /&gt;
La vidéo de démonstration disponible [https://filature.mouton.tech/hacsfiles/temporaire/AMoutonIE.mp4 ici] (à télécharger, fichier MP4), il y est affiché l'historique des captations du serveur sur l'écran, et indique &amp;quot;Rien&amp;quot;, &amp;quot;Gauche&amp;quot; ou &amp;quot;Droite&amp;quot; selon ce que le modèle prédit.&lt;br /&gt;
[[Fichier:Capture d’écran du 2024-01-28 17-09-59.png|vignette]]&lt;br /&gt;
Nous avons également implémenté un affichage des datasets. Afin de pouvoir trier les éléments qui ne nous semblaient pas pertinents (démarrage tardif, pas de mouvement, mauvaise capture...),  le serveur HTTP python est capable de convertir les datasets enregistrés en GIF et de les afficher sur une page web. &lt;br /&gt;
&lt;br /&gt;
On y voit ci-contre la liste des GIFs obtenus pour le Dataset gauche, avec la première donnée ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Le GIF animé commence par une frame rouge, afin de marquer le début de la capture.&lt;br /&gt;
[[Fichier:Gauche.gif|gauche]]A noter qu'un nouveau dataset, différent de celui fait en cours a dû être réalise pour ce rendu. les 300 passes réalisées en classes sont toutes sur un même fond (la carte était à ~2m du plafond), différent du mien. Nous pouvons donc conclure un overfitting de notre modèle.&lt;br /&gt;
&lt;br /&gt;
=== Pistes d'amélioration ===&lt;br /&gt;
Pour améliorer la performance de notre outil de détection, il pourrait être judicieux de transmettre un flux d'images captées, plutôt que d'en analyser un bloc de 16 captures. Cela rendrait le tout plus fluide, et indépendant du moment où on démarre le mouvement. (Ici, le mouvement ne doit avoir lieu que pendant la période de 16 images).&lt;br /&gt;
&lt;br /&gt;
Nous pourrions aussi pré-traiter les images. Par exemple, les simplifier pour ne considérer qu'une &amp;quot;couleur de fond&amp;quot; et une &amp;quot;couleur de premier plan&amp;quot; (où aurait lieu le mouvement), au lieu d'envoyer les 8x8 distances (entiers compris entre 0 et 4000).&lt;br /&gt;
&lt;br /&gt;
Cela permettrait de réduire la taille des messages, et de rendre immun notre modèle à la distance entre le capteur et le fond, et entre le capteur et la main. Cela pourrait se faire par recherche d'écart entre les valeurs.&lt;br /&gt;
&lt;br /&gt;
Enfin, il est intéressant de questionner la pertinence de l'exercice réalisé. Dans notre cas, des algorithmes plus traditionnels (sans IA) auraient probablement donné de meilleurs résultats, plus fiables ou facilement mesurables/démontrables (ex, algorithme de recherche de centre de masse, puis suivi de ce centre de masse au cours du temps). Ce type d'algorithme plus légers pourraient facilement tourner directement sur le STM32, réduisant la consommation.&lt;br /&gt;
&lt;br /&gt;
Cependant, il était intéressant de pouvoir construire une API pour remonter les valeurs du capteurs, et cela semble transposable à de nombreuses applications (remontée d'une image pour analyse, interfacer un modèle de LLM plus lourd sur un serveur, ...)&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=4842</id>
		<title>SE5 ECEAI/eceai 2023/2024/Patrikeev-Mouton</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=4842"/>
		<updated>2024-01-28T16:34:58Z</updated>

		<summary type="html">&lt;p&gt;Amouton : /* Résultats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Séance n°1:'''&lt;br /&gt;
&lt;br /&gt;
Une machin virtuelle a été crée sur le serveur chassiron avec la commande :&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname g19 --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* La machine virtuelle possède les propriétés suivantes:&lt;br /&gt;
&lt;br /&gt;
Hostname       :  g19&lt;br /&gt;
&lt;br /&gt;
Distribution    :  bookworm&lt;br /&gt;
&lt;br /&gt;
Stockage  : 10G&lt;br /&gt;
&lt;br /&gt;
Mémoire vive : 1G&lt;br /&gt;
&lt;br /&gt;
Mot de passe : glopglop&lt;br /&gt;
&lt;br /&gt;
Les fichier /etc/network/interfaces, /etc/resolv.conf et /etc/apt/sources.list on étés configurés comme demandé dans le sujet.&lt;br /&gt;
&lt;br /&gt;
* La Raspberry Pi 4 a été configurée et connectée au WiFi WIFI_IE_1.&lt;br /&gt;
&lt;br /&gt;
Mot de passe : pasglop&lt;br /&gt;
&lt;br /&gt;
Login : pifou&lt;br /&gt;
&lt;br /&gt;
La communication entre la Raspberry et la machine virtuelle a été vérifiée avec une commande de ping.&lt;br /&gt;
&lt;br /&gt;
* Le STM32F401RE et le capteur de distance (Nucleo-53L5A1):&lt;br /&gt;
&lt;br /&gt;
Les valeurs lues par le capteurs sont renvoyés par le port série du contrôleur STM32 vers le logiciel nanoedge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Séance n°2:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous nous sommes concentrés sur la création de programmes python qui seront par la suite implémentés sur la Raspberry et la machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
* Écoute de la liaison série du STM32 vers le PC:  &lt;br /&gt;
&lt;br /&gt;
Des objets de type json sont créés pour chaque donnée reçue. Par la suite, l'information est envoyée en http vers l'adresse locale de la machine à l'aide d'un code python. &lt;br /&gt;
&lt;br /&gt;
Ce programme sera destiné à la Raspberry par la suite.&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
    json_obj = { &amp;quot;time&amp;quot; : curr_time , &amp;quot;data&amp;quot; : liste_valeurs, &amp;quot;board_id&amp;quot; : config.BOARD_ID}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Écoute d'une requête http depuis le PC:  &lt;br /&gt;
&lt;br /&gt;
Création d'un code python pour écouter depuis un adresse et afficher les données reçue dans le terminal. Ce code sera destiné à la machine virtuelle par la suite.&lt;br /&gt;
&lt;br /&gt;
* Premier programme d’apprentissage IA avec Tensorflow2:&lt;br /&gt;
&lt;br /&gt;
Nous aimerions être en mesure de reconnaître les mouvement de main suivants:&lt;br /&gt;
&lt;br /&gt;
- de gauche à droite &lt;br /&gt;
&lt;br /&gt;
- de droite à gauche &lt;br /&gt;
&lt;br /&gt;
- de haut en bas &lt;br /&gt;
&lt;br /&gt;
- de bas en haut &lt;br /&gt;
&lt;br /&gt;
- du sol vers le plafond&lt;br /&gt;
&lt;br /&gt;
- du plafond vers le sol &lt;br /&gt;
&lt;br /&gt;
Un premier programme d'apprentissage a été créé pour être en mesure de faire de l'apprentissage de l'IA par la suite sur notre machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons besoin de plus de données pour effectuer un apprentissage de meilleur qualité.&lt;br /&gt;
&lt;br /&gt;
* Machine virtuelle:&lt;br /&gt;
&lt;br /&gt;
Installation des packages python3, pip et tensorflow.&lt;br /&gt;
&lt;br /&gt;
=== Résultat final : ===&lt;br /&gt;
&lt;br /&gt;
==== Calcul déporté ====&lt;br /&gt;
Les datasets ont été extraits par lecture du port série du STM32 grâce à minicom :&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
minicom -b 460800 -D /dev/ttyAMA0 -C nom_dataset.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le code du serveur d'IA et du convertisseur série-&amp;gt;REST est dans un [https://archives.plil.fr/amouton/IA-scripts repo git].&lt;br /&gt;
&lt;br /&gt;
Les dépendances suivantes sont nécessaires :&lt;br /&gt;
&lt;br /&gt;
* python3-parse&lt;br /&gt;
* python3-serial&lt;br /&gt;
* python3-sklearn&lt;br /&gt;
* python3-numpy&lt;br /&gt;
&lt;br /&gt;
===== Partie STM32 =====&lt;br /&gt;
Le STM32 capture une matrice de 8x8 distances 16 fois avant de les envoyer sur le port série (à 460800 bauds). Ces valeurs individuelles sont séparées par des virgules ','. Chaque échantillon de 1024 valeurs est séparé par un &amp;quot;\r\n&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== Partie Raspberry PI =====&lt;br /&gt;
Le Raspberry PI écoute sur le port /dev/ttyAMA0 les valeurs envoyées par le STM32 via un script Python. Il vient les parser pour les formater. Les données formatées (time : l'epoch de la mesure, data : une liste des 1024 valeurs, board_id : un identifiant de la configuration) sont envoyées au serveur. Cet envoi se fait via une requête HTTP sur une API REST.&lt;br /&gt;
&lt;br /&gt;
L'adresse du serveur auquel transmettre les données, ainsi que d'autres paramètres peuvent être configurés dans le fichier config.py &lt;br /&gt;
&lt;br /&gt;
===== Partie Serveur =====&lt;br /&gt;
Un script python démarre un serveur HTTP minimal écoutant sur le port 8123. Au démarrage, le script python vient parser 3 fichiers de dataset (correspondant respectivement à &amp;quot;à gauche&amp;quot; &amp;quot;à droite&amp;quot; &amp;quot;rien&amp;quot;), puis vient entraîner un modèle avec la bibliothèque SKLearn. Une fois l'entraînement terminé, le modèle pourra prédire le mouvement qui a été effectué.&lt;br /&gt;
&lt;br /&gt;
===== Performances et consommation =====&lt;br /&gt;
La Raspberry et le STM32 consomment en moyenne 3W.&lt;br /&gt;
&lt;br /&gt;
La charge du script de traitement sur la VM est comprise entre 0 et 0.7%. Cependant la consommation réelle de la VM reste dure à évaluer.&lt;br /&gt;
&lt;br /&gt;
=== Calcul sur STM32 ===&lt;br /&gt;
Grâce à NanoEdge AI Studio, nous pouvons déclarer un projet de reconnaissance nClass, avec le même dataset que pour le calcul déporté.&lt;br /&gt;
&lt;br /&gt;
=== Résultats ===&lt;br /&gt;
Les meilleurs résultats semblent être obtenus avec la méthod SKLearn.&lt;br /&gt;
&lt;br /&gt;
La vidéo de démonstration disponible [https://filature.mouton.tech/hacsfiles/temporaire/AMoutonIE.mp4 ici] (à télécharger, fichier MP4), il y est affiché l'historique des captations du serveur sur l'écran, et indique &amp;quot;Rien&amp;quot;, &amp;quot;Gauche&amp;quot; ou &amp;quot;Droite&amp;quot; selon ce que le modèle prédit.&lt;br /&gt;
[[Fichier:Capture d’écran du 2024-01-28 17-09-59.png|vignette]]&lt;br /&gt;
Nous avons également implémenté un affichage des datasets. Afin de pouvoir trier les éléments qui ne nous semblaient pas pertinents (démarrage tardif, pas de mouvement, mauvaise capture...),  le serveur HTTP python est capable de convertir les datasets enregistrés en GIF et de les afficher sur une page web. &lt;br /&gt;
&lt;br /&gt;
On y voit ci-contre la liste des GIFs obtenus pour le Dataset gauche, avec la première donnée ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Le GIF animé commence par une frame rouge, afin de marquer le début de la capture.&lt;br /&gt;
[[Fichier:Gauche.gif|gauche]]&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=4841</id>
		<title>SE5 ECEAI/eceai 2023/2024/Patrikeev-Mouton</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=4841"/>
		<updated>2024-01-28T16:34:23Z</updated>

		<summary type="html">&lt;p&gt;Amouton : Ajout vidéo2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Séance n°1:'''&lt;br /&gt;
&lt;br /&gt;
Une machin virtuelle a été crée sur le serveur chassiron avec la commande :&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname g19 --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* La machine virtuelle possède les propriétés suivantes:&lt;br /&gt;
&lt;br /&gt;
Hostname       :  g19&lt;br /&gt;
&lt;br /&gt;
Distribution    :  bookworm&lt;br /&gt;
&lt;br /&gt;
Stockage  : 10G&lt;br /&gt;
&lt;br /&gt;
Mémoire vive : 1G&lt;br /&gt;
&lt;br /&gt;
Mot de passe : glopglop&lt;br /&gt;
&lt;br /&gt;
Les fichier /etc/network/interfaces, /etc/resolv.conf et /etc/apt/sources.list on étés configurés comme demandé dans le sujet.&lt;br /&gt;
&lt;br /&gt;
* La Raspberry Pi 4 a été configurée et connectée au WiFi WIFI_IE_1.&lt;br /&gt;
&lt;br /&gt;
Mot de passe : pasglop&lt;br /&gt;
&lt;br /&gt;
Login : pifou&lt;br /&gt;
&lt;br /&gt;
La communication entre la Raspberry et la machine virtuelle a été vérifiée avec une commande de ping.&lt;br /&gt;
&lt;br /&gt;
* Le STM32F401RE et le capteur de distance (Nucleo-53L5A1):&lt;br /&gt;
&lt;br /&gt;
Les valeurs lues par le capteurs sont renvoyés par le port série du contrôleur STM32 vers le logiciel nanoedge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Séance n°2:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous nous sommes concentrés sur la création de programmes python qui seront par la suite implémentés sur la Raspberry et la machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
* Écoute de la liaison série du STM32 vers le PC:  &lt;br /&gt;
&lt;br /&gt;
Des objets de type json sont créés pour chaque donnée reçue. Par la suite, l'information est envoyée en http vers l'adresse locale de la machine à l'aide d'un code python. &lt;br /&gt;
&lt;br /&gt;
Ce programme sera destiné à la Raspberry par la suite.&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
    json_obj = { &amp;quot;time&amp;quot; : curr_time , &amp;quot;data&amp;quot; : liste_valeurs, &amp;quot;board_id&amp;quot; : config.BOARD_ID}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Écoute d'une requête http depuis le PC:  &lt;br /&gt;
&lt;br /&gt;
Création d'un code python pour écouter depuis un adresse et afficher les données reçue dans le terminal. Ce code sera destiné à la machine virtuelle par la suite.&lt;br /&gt;
&lt;br /&gt;
* Premier programme d’apprentissage IA avec Tensorflow2:&lt;br /&gt;
&lt;br /&gt;
Nous aimerions être en mesure de reconnaître les mouvement de main suivants:&lt;br /&gt;
&lt;br /&gt;
- de gauche à droite &lt;br /&gt;
&lt;br /&gt;
- de droite à gauche &lt;br /&gt;
&lt;br /&gt;
- de haut en bas &lt;br /&gt;
&lt;br /&gt;
- de bas en haut &lt;br /&gt;
&lt;br /&gt;
- du sol vers le plafond&lt;br /&gt;
&lt;br /&gt;
- du plafond vers le sol &lt;br /&gt;
&lt;br /&gt;
Un premier programme d'apprentissage a été créé pour être en mesure de faire de l'apprentissage de l'IA par la suite sur notre machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons besoin de plus de données pour effectuer un apprentissage de meilleur qualité.&lt;br /&gt;
&lt;br /&gt;
* Machine virtuelle:&lt;br /&gt;
&lt;br /&gt;
Installation des packages python3, pip et tensorflow.&lt;br /&gt;
&lt;br /&gt;
=== Résultat final : ===&lt;br /&gt;
&lt;br /&gt;
==== Calcul déporté ====&lt;br /&gt;
Les datasets ont été extraits par lecture du port série du STM32 grâce à minicom :&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
minicom -b 460800 -D /dev/ttyAMA0 -C nom_dataset.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le code du serveur d'IA et du convertisseur série-&amp;gt;REST est dans un [https://archives.plil.fr/amouton/IA-scripts repo git].&lt;br /&gt;
&lt;br /&gt;
Les dépendances suivantes sont nécessaires :&lt;br /&gt;
&lt;br /&gt;
* python3-parse&lt;br /&gt;
* python3-serial&lt;br /&gt;
* python3-sklearn&lt;br /&gt;
* python3-numpy&lt;br /&gt;
&lt;br /&gt;
===== Partie STM32 =====&lt;br /&gt;
Le STM32 capture une matrice de 8x8 distances 16 fois avant de les envoyer sur le port série (à 460800 bauds). Ces valeurs individuelles sont séparées par des virgules ','. Chaque échantillon de 1024 valeurs est séparé par un &amp;quot;\r\n&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== Partie Raspberry PI =====&lt;br /&gt;
Le Raspberry PI écoute sur le port /dev/ttyAMA0 les valeurs envoyées par le STM32 via un script Python. Il vient les parser pour les formater. Les données formatées (time : l'epoch de la mesure, data : une liste des 1024 valeurs, board_id : un identifiant de la configuration) sont envoyées au serveur. Cet envoi se fait via une requête HTTP sur une API REST.&lt;br /&gt;
&lt;br /&gt;
L'adresse du serveur auquel transmettre les données, ainsi que d'autres paramètres peuvent être configurés dans le fichier config.py &lt;br /&gt;
&lt;br /&gt;
===== Partie Serveur =====&lt;br /&gt;
Un script python démarre un serveur HTTP minimal écoutant sur le port 8123. Au démarrage, le script python vient parser 3 fichiers de dataset (correspondant respectivement à &amp;quot;à gauche&amp;quot; &amp;quot;à droite&amp;quot; &amp;quot;rien&amp;quot;), puis vient entraîner un modèle avec la bibliothèque SKLearn. Une fois l'entraînement terminé, le modèle pourra prédire le mouvement qui a été effectué.&lt;br /&gt;
&lt;br /&gt;
===== Performances et consommation =====&lt;br /&gt;
La Raspberry et le STM32 consomment en moyenne 3W.&lt;br /&gt;
&lt;br /&gt;
La charge du script de traitement sur la VM est comprise entre 0 et 0.7%. Cependant la consommation réelle de la VM reste dure à évaluer.&lt;br /&gt;
&lt;br /&gt;
=== Calcul sur STM32 ===&lt;br /&gt;
Grâce à NanoEdge AI Studio, nous pouvons déclarer un projet de reconnaissance nClass, avec le même dataset que pour le calcul déporté.&lt;br /&gt;
&lt;br /&gt;
=== Résultats ===&lt;br /&gt;
Les meilleurs résultats semblent être obtenus avec la méthod SKLearn. (Vidéo de démonstration disponible [https://filature.mouton.tech/hacsfiles/temporaire/AMoutonIE.mp4 ici], il y est affiché l'historique des captations du serveur sur l'écran, et indique &amp;quot;Rien&amp;quot;, &amp;quot;Gauche&amp;quot; ou &amp;quot;Droite&amp;quot; selon ce que le modèle prédit)&lt;br /&gt;
[[Fichier:Capture d’écran du 2024-01-28 17-09-59.png|vignette]]&lt;br /&gt;
Nous avons également implémenté un affichage des datasets. Afin de pouvoir trier les éléments qui ne nous semblaient pas pertinents (démarrage tardif, pas de mouvement, mauvaise capture...),  le serveur HTTP python est capable de convertir les datasets enregistrés en GIF et de les afficher sur une page web. &lt;br /&gt;
&lt;br /&gt;
On y voit ci-contre la liste des GIFs obtenus pour le Dataset gauche, avec la première donnée ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Le GIF animé commence par une frame rouge, afin de marquer le début de la capture.&lt;br /&gt;
[[Fichier:Gauche.gif|gauche]]&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Gauche.gif&amp;diff=4826</id>
		<title>Fichier:Gauche.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Gauche.gif&amp;diff=4826"/>
		<updated>2024-01-28T16:18:21Z</updated>

		<summary type="html">&lt;p&gt;Amouton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mouvement à gauche&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_du_2024-01-28_17-09-59.png&amp;diff=4822</id>
		<title>Fichier:Capture d’écran du 2024-01-28 17-09-59.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_du_2024-01-28_17-09-59.png&amp;diff=4822"/>
		<updated>2024-01-28T16:15:38Z</updated>

		<summary type="html">&lt;p&gt;Amouton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Affichage dataset&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=4815</id>
		<title>SE5 ECEAI/eceai 2023/2024/Patrikeev-Mouton</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=4815"/>
		<updated>2024-01-28T16:08:52Z</updated>

		<summary type="html">&lt;p&gt;Amouton : Ajout vidéo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Séance n°1:'''&lt;br /&gt;
&lt;br /&gt;
Une machin virtuelle a été crée sur le serveur chassiron avec la commande :&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname g19 --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* La machine virtuelle possède les propriétés suivantes:&lt;br /&gt;
&lt;br /&gt;
Hostname       :  g19&lt;br /&gt;
&lt;br /&gt;
Distribution    :  bookworm&lt;br /&gt;
&lt;br /&gt;
Stockage  : 10G&lt;br /&gt;
&lt;br /&gt;
Mémoire vive : 1G&lt;br /&gt;
&lt;br /&gt;
Mot de passe : glopglop&lt;br /&gt;
&lt;br /&gt;
Les fichier /etc/network/interfaces, /etc/resolv.conf et /etc/apt/sources.list on étés configurés comme demandé dans le sujet.&lt;br /&gt;
&lt;br /&gt;
* La Raspberry Pi 4 a été configurée et connectée au WiFi WIFI_IE_1.&lt;br /&gt;
&lt;br /&gt;
Mot de passe : pasglop&lt;br /&gt;
&lt;br /&gt;
Login : pifou&lt;br /&gt;
&lt;br /&gt;
La communication entre la Raspberry et la machine virtuelle a été vérifiée avec une commande de ping.&lt;br /&gt;
&lt;br /&gt;
* Le STM32F401RE et le capteur de distance (Nucleo-53L5A1):&lt;br /&gt;
&lt;br /&gt;
Les valeurs lues par le capteurs sont renvoyés par le port série du contrôleur STM32 vers le logiciel nanoedge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Séance n°2:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous nous sommes concentrés sur la création de programmes python qui seront par la suite implémentés sur la Raspberry et la machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
* Écoute de la liaison série du STM32 vers le PC:  &lt;br /&gt;
&lt;br /&gt;
Des objets de type json sont créés pour chaque donnée reçue. Par la suite, l'information est envoyée en http vers l'adresse locale de la machine à l'aide d'un code python. &lt;br /&gt;
&lt;br /&gt;
Ce programme sera destiné à la Raspberry par la suite.&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
    json_obj = { &amp;quot;time&amp;quot; : curr_time , &amp;quot;data&amp;quot; : liste_valeurs, &amp;quot;board_id&amp;quot; : config.BOARD_ID}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Écoute d'une requête http depuis le PC:  &lt;br /&gt;
&lt;br /&gt;
Création d'un code python pour écouter depuis un adresse et afficher les données reçue dans le terminal. Ce code sera destiné à la machine virtuelle par la suite.&lt;br /&gt;
&lt;br /&gt;
* Premier programme d’apprentissage IA avec Tensorflow2:&lt;br /&gt;
&lt;br /&gt;
Nous aimerions être en mesure de reconnaître les mouvement de main suivants:&lt;br /&gt;
&lt;br /&gt;
- de gauche à droite &lt;br /&gt;
&lt;br /&gt;
- de droite à gauche &lt;br /&gt;
&lt;br /&gt;
- de haut en bas &lt;br /&gt;
&lt;br /&gt;
- de bas en haut &lt;br /&gt;
&lt;br /&gt;
- du sol vers le plafond&lt;br /&gt;
&lt;br /&gt;
- du plafond vers le sol &lt;br /&gt;
&lt;br /&gt;
Un premier programme d'apprentissage a été créé pour être en mesure de faire de l'apprentissage de l'IA par la suite sur notre machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons besoin de plus de données pour effectuer un apprentissage de meilleur qualité.&lt;br /&gt;
&lt;br /&gt;
* Machine virtuelle:&lt;br /&gt;
&lt;br /&gt;
Installation des packages python3, pip et tensorflow.&lt;br /&gt;
&lt;br /&gt;
=== Résultat final : ===&lt;br /&gt;
&lt;br /&gt;
==== Calcul déporté ====&lt;br /&gt;
Les datasets ont été extraits par lecture du port série du STM32 grâce à minicom :&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
minicom -b 460800 -D /dev/ttyAMA0 -C nom_dataset.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le code du serveur d'IA et du convertisseur série-&amp;gt;REST est dans un [https://archives.plil.fr/amouton/IA-scripts repo git].&lt;br /&gt;
&lt;br /&gt;
Les dépendances suivantes sont nécessaires :&lt;br /&gt;
&lt;br /&gt;
* python3-parse&lt;br /&gt;
* python3-serial&lt;br /&gt;
* python3-sklearn&lt;br /&gt;
* python3-numpy&lt;br /&gt;
&lt;br /&gt;
===== Partie STM32 =====&lt;br /&gt;
Le STM32 capture une matrice de 8x8 distances 16 fois avant de les envoyer sur le port série (à 460800 bauds). Ces valeurs individuelles sont séparées par des virgules ','. Chaque échantillon de 1024 valeurs est séparé par un &amp;quot;\r\n&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== Partie Raspberry PI =====&lt;br /&gt;
Le Raspberry PI écoute sur le port /dev/ttyAMA0 les valeurs envoyées par le STM32 via un script Python. Il vient les parser pour les formater. Les données formatées (time : l'epoch de la mesure, data : une liste des 1024 valeurs, board_id : un identifiant de la configuration) sont envoyées au serveur. Cet envoi se fait via une requête HTTP sur une API REST.&lt;br /&gt;
&lt;br /&gt;
L'adresse du serveur auquel transmettre les données, ainsi que d'autres paramètres peuvent être configurés dans le fichier config.py &lt;br /&gt;
&lt;br /&gt;
===== Partie Serveur =====&lt;br /&gt;
Un script python démarre un serveur HTTP minimal écoutant sur le port 8123. Au démarrage, le script python vient parser 3 fichiers de dataset (correspondant respectivement à &amp;quot;à gauche&amp;quot; &amp;quot;à droite&amp;quot; &amp;quot;rien&amp;quot;), puis vient entraîner un modèle avec la bibliothèque SKLearn. Une fois l'entraînement terminé, le modèle pourra prédire le mouvement qui a été effectué.&lt;br /&gt;
&lt;br /&gt;
===== Performances et consommation =====&lt;br /&gt;
La Raspberry et le STM32 consomment en moyenne 3W.&lt;br /&gt;
&lt;br /&gt;
La charge du script de traitement sur la VM est comprise entre 0 et 0.7%. Cependant la consommation réelle de la VM reste dure à évaluer.&lt;br /&gt;
&lt;br /&gt;
=== Calcul sur STM32 ===&lt;br /&gt;
Grâce à NanoEdge AI Studio, nous pouvons déclarer un projet de reconnaissance nClass, avec le même dataset que pour le calcul déporté.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultats :&lt;br /&gt;
&lt;br /&gt;
Les meilleurs résultats semblent être obtenus avec la méthod SKLearn.&lt;br /&gt;
[[Fichier:Video IA AMouton.mp4|bordure|centré|vignette]]&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Video_IA_AMouton.mp4&amp;diff=4813</id>
		<title>Fichier:Video IA AMouton.mp4</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Video_IA_AMouton.mp4&amp;diff=4813"/>
		<updated>2024-01-28T16:06:39Z</updated>

		<summary type="html">&lt;p&gt;Amouton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Demonstration&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E20&amp;diff=3812</id>
		<title>Atelier SysRes SE5 2023/2024 E20</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E20&amp;diff=3812"/>
		<updated>2024-01-16T08:42:12Z</updated>

		<summary type="html">&lt;p&gt;Amouton : Attaque Wifi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Intrusion réseau WiFi WEP ===&lt;br /&gt;
Cracotte 07 (BSSID = 04:DA:D2:9C:50:56)&lt;br /&gt;
&lt;br /&gt;
Clé = FF:FF:FF:FF:FA:BC:08:CB:AE:EE:EE:EE:EE&lt;br /&gt;
&lt;br /&gt;
=== Intrusion réseau WiFi WPA ===&lt;br /&gt;
Krakotte 07 (BSSID = 44:AD:D9:5F:87:06)&lt;br /&gt;
&lt;br /&gt;
Handshake = 44:AD:D9:5F:87:06&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[01:17:29] 66656120/100000000 keys tested (14579.09 k/s)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Time left: 38 minutes, 7 seconds                          66.66% &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66683666 ] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 24 EF 0A A7 BE 2D 95 60 26 7E 5C 20 44 B0 89 00  &lt;br /&gt;
&lt;br /&gt;
                      23 0E 78 75 31 4D 1A 1E 91 92 11 10 A1 4D 51 D1  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Transient Key  : 5F 3A D7 17 A6 51 EF 00 00 00 00 00 00 00 00 00  &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 9B 9B 27 24 0D 60 0C 8B 19 16 66 48 A0 8B BA 67 &lt;br /&gt;
&lt;br /&gt;
Clé =&lt;br /&gt;
&lt;br /&gt;
66683666&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E20&amp;diff=3802</id>
		<title>Atelier SysRes SE5 2023/2024 E20</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E20&amp;diff=3802"/>
		<updated>2024-01-15T16:53:45Z</updated>

		<summary type="html">&lt;p&gt;Amouton : Page créée avec « FF:FF:FF:FF:FA:BC:08:CB:AE:EE:EE:EE:EE »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FF:FF:FF:FF:FA:BC:08:CB:AE:EE:EE:EE:EE&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=3599</id>
		<title>SE5 ECEAI/eceai 2023/2024/Patrikeev-Mouton</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/Patrikeev-Mouton&amp;diff=3599"/>
		<updated>2023-12-20T10:50:18Z</updated>

		<summary type="html">&lt;p&gt;Amouton : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Séance n°1:'''&lt;br /&gt;
&lt;br /&gt;
Une machin virtuelle a été crée sur le serveur chassiron avec la commande :&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname g19 --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* La machine virtuelle possède les propriétés suivantes:&lt;br /&gt;
&lt;br /&gt;
Hostname       :  g19&lt;br /&gt;
&lt;br /&gt;
Distribution    :  bookworm&lt;br /&gt;
&lt;br /&gt;
Stockage  : 10G&lt;br /&gt;
&lt;br /&gt;
Mémoire vive : 1G&lt;br /&gt;
&lt;br /&gt;
Mot de passe : glopglop&lt;br /&gt;
&lt;br /&gt;
Les fichier /etc/network/interfaces, /etc/resolv.conf et /etc/apt/sources.list on étés configurés comme demandé dans le sujet.&lt;br /&gt;
&lt;br /&gt;
* La Raspberry Pi 4 a été configurée et connectée au WiFi WIFI_IE_1.&lt;br /&gt;
&lt;br /&gt;
Mot de passe : pasglop&lt;br /&gt;
&lt;br /&gt;
Login : pifou&lt;br /&gt;
&lt;br /&gt;
La communication entre la Raspberry et la machine virtuelle a été vérifiée avec une commande de ping.&lt;br /&gt;
&lt;br /&gt;
* Le STM32F401RE et le capteur de distance (Nucleo-53L5A1):&lt;br /&gt;
&lt;br /&gt;
Les valeurs lues par le capteurs sont renvoyés par le port série du contrôleur STM32 vers le logiciel nanoedge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Séance n°2:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous nous sommes concentrés sur la création de programmes python qui seront par la suite implémentés sur la Raspberry et la machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
* Écoute de la liaison série du STM32 vers le PC:  &lt;br /&gt;
&lt;br /&gt;
Des objets de type json sont créés pour chaque donnée reçue. Par la suite, l'information est envoyée en http vers l'adresse locale de la machine à l'aide d'un code python. &lt;br /&gt;
&lt;br /&gt;
Ce programme sera destiné à la Raspberry par la suite.&amp;lt;syntaxhighlight lang=&amp;quot;abap&amp;quot;&amp;gt;&lt;br /&gt;
    json_obj = { &amp;quot;time&amp;quot; : curr_time , &amp;quot;data&amp;quot; : liste_valeurs, &amp;quot;board_id&amp;quot; : config.BOARD_ID}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Écoute d'une requête http depuis le PC:  &lt;br /&gt;
&lt;br /&gt;
Création d'un code python pour écouter depuis un adresse et afficher les données reçue dans le terminal. Ce code sera destiné à la machine virtuelle par la suite.&lt;br /&gt;
&lt;br /&gt;
* Premier programme d’apprentissage IA avec Tensorflow2:&lt;br /&gt;
&lt;br /&gt;
Nous aimerions être en mesure de reconnaître les mouvement de main suivants:&lt;br /&gt;
&lt;br /&gt;
- de gauche à droite &lt;br /&gt;
&lt;br /&gt;
- de droite à gauche &lt;br /&gt;
&lt;br /&gt;
- de haut en bas &lt;br /&gt;
&lt;br /&gt;
- de bas en haut &lt;br /&gt;
&lt;br /&gt;
- du sol vers le plafond&lt;br /&gt;
&lt;br /&gt;
- du plafond vers le sol &lt;br /&gt;
&lt;br /&gt;
Un premier programme d'apprentissage a été créé pour être en mesure de faire de l'apprentissage de l'IA par la suite sur notre machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons besoin de plus de données pour effectuer un apprentissage de meilleur qualité.&lt;br /&gt;
&lt;br /&gt;
* Machine virtuelle:&lt;br /&gt;
&lt;br /&gt;
Installation des packages python3, pip et tensorflow.&lt;br /&gt;
&lt;br /&gt;
=== Résultat final : ===&lt;br /&gt;
&lt;br /&gt;
==== Calcul déporté ====&lt;br /&gt;
Les datasets ont été extraits par lecture du port série du STM32 grâce à minicom :&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
minicom -b 460800 -D /dev/ttyAMA0 -C nom_dataset.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le code du serveur d'IA et du convertisseur série-&amp;gt;REST est dans un [https://archives.plil.fr/amouton/IA-scripts repo git].&lt;br /&gt;
&lt;br /&gt;
Les dépendances suivantes sont nécessaires :&lt;br /&gt;
&lt;br /&gt;
* python3-parse&lt;br /&gt;
* python3-serial&lt;br /&gt;
* python3-sklearn&lt;br /&gt;
* python3-numpy&lt;br /&gt;
&lt;br /&gt;
===== Partie STM32 =====&lt;br /&gt;
Le STM32 capture une matrice de 8x8 distances 16 fois avant de les envoyer sur le port série (à 460800 bauds). Ces valeurs individuelles sont séparées par des virgules ','. Chaque échantillon de 1024 valeurs est séparé par un &amp;quot;\r\n&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== Partie Raspberry PI =====&lt;br /&gt;
Le Raspberry PI écoute sur le port /dev/ttyAMA0 les valeurs envoyées par le STM32 via un script Python. Il vient les parser pour les formater. Les données formatées (time : l'epoch de la mesure, data : une liste des 1024 valeurs, board_id : un identifiant de la configuration) sont envoyées au serveur. Cet envoi se fait via une requête HTTP sur une API REST.&lt;br /&gt;
&lt;br /&gt;
L'adresse du serveur auquel transmettre les données, ainsi que d'autres paramètres peuvent être configurés dans le fichier config.py &lt;br /&gt;
&lt;br /&gt;
===== Partie Serveur =====&lt;br /&gt;
Un script python démarre un serveur HTTP minimal écoutant sur le port 8123. Au démarrage, le script python vient parser 3 fichiers de dataset (correspondant respectivement à &amp;quot;à gauche&amp;quot; &amp;quot;à droite&amp;quot; &amp;quot;rien&amp;quot;), puis vient entraîner un modèle avec la bibliothèque SKLearn. Une fois l'entraînement terminé, le modèle pourra prédire le mouvement qui a été effectué.&lt;br /&gt;
&lt;br /&gt;
=== Calcul sur STM32 ===&lt;br /&gt;
Grâce à NanoEdge AI Studio, nous pouvons déclarer un projet de reconnaissance nClass, avec le même dataset que pour le calcul déporté.&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1910</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1910"/>
		<updated>2023-10-06T14:03:53Z</updated>

		<summary type="html">&lt;p&gt;Amouton : /* Menu de la première séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;/div&gt;</summary>
		<author><name>Amouton</name></author>
	</entry>
</feed>