Le Sense HAT est une carte additionnelle du Raspberry Pi . Elle ajoute la capacité de détecter toutes sortes d’informations en utilisant une matrice de LED et faigt partie du projet Astropi. On a la possibilité de l’utiliser en réel ou à l’aide d’un émulateur.
Utilisons l'émulateur trinket, en tapant shift Entrée dans la cellule ci-dessous. Effacer toutes les lignes, puis tapez les lignes ci-dessous. Appuyer sur Stop, puis sur Run. Notez ce qui se passe dans un fichier nommé pixellisation.
%%html
<iframe src="https://trinket.io/embed/python/91de272f38" width="100%" height="356" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>
- Les variables r, g et b représentent les couleurs rouge, vert et bleu. Les nombres qu’elles contiennent spécifient la luminosité de chaque couleur ; elle varie de 0 à 255. Dans le code ci-dessus, la valeur maximale (255) pour chaque couleur a été utilisée. Changez les valeurs pour spécifier 255 red (255 rouge) mais 0 green (0 vert) et 0 blue (0 bleu), puis exécutez de nouveau le code. Quelles autres couleurs pouvez-vous faire ? A vous de jouer ! Combien de couleurs différentes obtient-on ? Notez vos résultats dans votre fichier.
- Utilisez le trinket précédent, effacez les lignes et tapez ceci
Notez ce qui se passe dans votre fichier.
%%html
<iframe src="https://trinket.io/embed/python/91de272f38" width="100%" height="356" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>
- Les variables « x » et « y » sont utilisées pour contrôler la LED que la commande set_pixel doit changer. x correspond à l'abscisse et varie de 0 à 7 de gauche à droite. y correspond à l'ordonnée et varie de 0 à 7 de haut en bas. Si on saisit le code suivant dans une nouvelle fenêtre, colorez la matrice qui s’affichera.
- Pixelliser ce logo , en utilisant la grille ci-dessous. La couleur d’un carré doit correspondre à la couleur dominante du carré individuel qui compose l'image. Écrivez le code qui va vous permettre d’afficher l’image sur la matrice de LED.
!pip install pillow
from PIL import Image
from IPython.display import HTML
from io import BytesIO
import requests
Collecting pillow Downloading https://files.pythonhosted.org/packages/89/3e/31c2e5385d7588016c6f7ac552e81c3fff2bef4bc61b6f82f8177752405c/Pillow-6.2.1-cp37-cp37m-manylinux1_x86_64.whl (2.1MB) |████████████████████████████████| 2.1MB 3.4MB/s eta 0:00:01 Installing collected packages: pillow Successfully installed pillow-6.2.1
Tester le code ci dessous et noter le résultat de l'affichage dans votre fichier réponse. Interprétez ce résultat.
#fifty shades of yoda
r = requests.get('https://img.lght.pics/zW9k.jpg') #on télécharge l'image
im1=Image.open(BytesIO(r.content))
largeur,hauteur=im1.size
print(largeur)
print(hauteur)
pixels=largeur*hauteur
print(pixels)
im1
225 225 50625
Nous allons transformer l’image en niveau de gris** pixels par pixels. Pour cela nous allons utiliser :
getpixel((x,y))** renvoie la couleur du pixel de coordonnées (x,y) sous la forme d’une liste (R,G,B)
putpixel((x,y),couleur) attribue la couleur au pixel de coordonnées (x,y). Testez ceci
#fifty shades of yoda
for x in range(largeur):
for y in range(hauteur):
pixel=im1.getpixel((x,y))
m=(pixel[0]+pixel[1]+pixel[2])//3 #Que fait-on dans cette ligne? Notez cela dans votre fichier réponse
newpixel=(m,m,m)
im1.putpixel((x,y),newpixel)
im1
On a modifié le programme, tester le! Que se passe-t-il? Notez cela dans votre fichier réponse.
for x in range(largeur):
for y in range(hauteur):
pixel=im1.getpixel((x,y))
newpixel=(pixel[0],pixel[1],255)
im1.putpixel((x,y),newpixel)
im1
On dira que l’image est saturée en …. A vous de jouer : modifier votre programme pour saturer en vert, puis en rouge. Notez les changements effectués dans le fichier réponse.
r = requests.get('https://img.lght.pics/zW9k.jpg') #on télécharge l'image
im1=Image.open(BytesIO(r.content))
l,h=im1.size
newimg=Image.new(im1.mode, im1.size)
for y in range(h):
for x in range(l):
couleur = im1.getpixel((x,y))
if x%2==0 and y%2==0: # x et y sont pairs
newimg.putpixel((x//2,y//2),couleur)
elif x%2==0: # Expliquez et commentez cette ligne
newimg.putpixel((x//2,h//2+y//2),couleur)
elif y%2==0: # Expliquez et commentez cette ligne
newimg.putpixel((l//2+x//2,y//2),couleur)
else: # Expliquez et commentez cette ligne
newimg.putpixel((l//2+x//2,h//2+y//2),couleur)
newimg
Stéphane Renouf, lycée Beaussier