############## Importation des bibliothèques/modules ############## from tkinter import * from sense_hat import SenseHat from picamera import PiCamera from time import sleep from PIL import * import time; import os from fractions import Fraction ############## Initialisation ############## camera = PiCamera(resolution=(480,480))#Definition de la résolution de la camera camera.rotation=0#Rotation de la prise de vue de la camera afin de faciliter les deplacements de l'echantillon sense = SenseHat() ############## Définition des fonctions ############## def eco() : return (sense.clear(0,0,0))#Coupure des Leds def get_value(k) : j = (int(k) + 27) * 2#Conversion des valeurs en pourcentages en valeurs allant de 0 à 255 O = [0, 0, 0]#Mise à l'arret des leds X = [0, j, 0]#Modification de l'intensitée lumineuse des leds question = [ X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X ]#Permet de sélectionner toute la matrice de led return sense.set_pixels(question)#Retourne à chaque appel de la fonction get_value une nouvelle valeur du module de led def marche() : global bouton2,bouton3#Définition des boutons "bouton2","bouton3" en global pour pouvoir les manipuler dans d'autres fonctions bouton1.destroy()#Destruction du bouton "bouton1" bouton2=Button(frame, text="Arrêt", command= arret)#Appel de la fonction arret lors de l'appuie sur le bouton2 nommé "Arrêt" bouton2.pack(side=RIGHT) bouton3=Button(frame, text="Photo", command= photo)#Appel de la fonction photo lors de l'appuie sur le bouton3 nommé "Photo" bouton3.pack(side=LEFT) camera.framerate = 30#Paramétrage du nombre d'image prise par seconde (30) return camera.start_preview(fullscreen = False, window= (650,350,480,480))#Mise en marche de la camera avec une modification de la taille de fenêtre pour qu'elle soit adapté au moniteur def arret() : global bouton1#Définition du bouton "bouton1" en global pour pouvoir le manipuler dans d'autres fonctions bouton3.destroy()#Destruction du bouton "bouton3" bouton2.destroy()#Destruction du bouton "bouton2" bouton1=Button(frame, text="Démarrer", command= marche)#Appel de la fonction marche lors de l'appuie sur le bouton1 nommé "Démarrer" bouton1.pack(side=BOTTOM) return camera.stop_preview()#Mise à l'arret de la camera def Traitement(t) : #Dans cette fonction on va écrire des commandes directement dans le terminal à l'aide de la commande 'os.system' os.system('sudo python /home/pi/Documents/Analysem.py')#Lancement du programme "Analysem.py" def reconstruction(): global fen1#Définition de la fenêtre fen1 en global pour pouvoir la manipuler dans d'autres fonctions fen.destroy()#Destruction de la fenêtre "fen" fen1=Toplevel()#Création de la fenêtre secondaire fen1.title('Traitement/Analyse')#Définition du titre de la fenêtre "fen1" fen1['bg']='lightgrey' #Couleur de fond de la fenêtre "fen1" fen1.geometry("{0}x{1}+0+0".format(fenetre.winfo_screenwidth(), fenetre.winfo_screenheight()-72))#Modification de la taille de la fenêtre "fen1" pour que cela corresponde avec le moniteur os.system('rm /home/pi/Desktop/reconstruction2D.png')#Suppression de l'ancienne reconstruction2D os.system('python /home/pi/Documents/reconstructionthomson.py build')#Lancement du programme OpenCV par le biais d'une ligne de code envoyé dans le terminal time.sleep(2)#Temporisation anti-bug photo=Image.open('/home/pi/Desktop/reconstruction2D.png')#Ouverture de l'image im = PhotoImage(file='/home/pi/Desktop/reconstruction2D.png')#Définition de l'image frame4=Frame(fen1,bg='lightgrey')#Création de la frame "frame4" qui va accueillir nos boutons frame4.pack(side=RIGHT) canvas=Canvas(fen1,height=480,width=480,bg='lightgrey')#Création de l'espace qui va accueillir l'image canvas.create_image(0,0,anchor=NW,image=im)#Importation de l'image dans l'espace canvas canvas.pack() bouton15=Button(frame4, text="Retour", command=retour)#Appel de la fonction retour lors de l'appuie sur le bouton15 nommé "Retour" bouton15.pack(side=BOTTOM) bouton11=Button(frame4, text="Analyse", command= lambda : Traitement(1))#Appel de la fonction Traitement lors de l'appuie sur le bouton11 nommé "Analyse" bouton11.pack(side=BOTTOM) bouton13=Button(frame4, text="Nouvelle capture", command=fen1.destroy)#Destruction de la fenêtre "fen1" lors de l'appuie sur le bouton1 nommé "Nouvelle capture" bouton13.pack(side=BOTTOM) fen1.mainloop() def retour(): global fen#Définition de la fenêtre "fen" en global pour pouvoir la manipuler dans d'autres fonctions fen1.destroy()#Destruction de la fenêtre "fen1" fen=Toplevel()#Création de la fenêtre secondaire fen.title('Traitement/Analyse')#Définition du titre de la fenêtre "fen" fen['bg']='lightgrey' #Couleur de fond de la fenêtre "fen" fen.geometry("{0}x{1}+0+0".format(fenetre.winfo_screenwidth(), fenetre.winfo_screenheight()-72))#Modification de la taille de la fenêtre "fen" pour que cela corresponde avec le moniteur photo=Image.open("/home/pi/Desktop/image.png")#Ouverture de l'image im = PhotoImage(file="/home/pi/Desktop/image.png")#Définition de l'image frame3=Frame(fen,bg='lightgrey')#Création de la frame "frame3" qui va accueillir nos boutons frame3.pack(side=RIGHT) canvas=Canvas(fen,height=480,width=480,bg='lightgrey')#Création de l'espace qui va accueillir l'image canvas.create_image(0,0,anchor=NW,image=im)#Importation de l'image dans l'espace canvas canvas.pack() bouton15=Button(frame3, text="Reconstruction 2D", command=reconstruction)#Appel de la fonction reconstruction lors de l'appuie sur le bouton15 nommé "reconstruction" bouton15.pack(side=BOTTOM) bouton13=Button(frame3, text="Nouvelle capture", command=fen.destroy)#Destruction de la fenêtre "fen" lors de l'appuie sur le bouton1 nommé "Nouvelle capture" bouton13.pack(side=BOTTOM) fen.mainloop() def photo() : global bouton1,fen#Définition du bouton "bouton1" ainsi que de la fenêtre "fen" en global pour pouvoir les manipuler dans d'autres fonctions bouton3.destroy()#Destruction du bouton "bouton3" bouton2.destroy()#Destruction du bouton "bouton2" bouton1=Button(frame, text="Démarrer", command= marche)#Appel de la fonction marche lors de l'appuie sur le bouton1 nommé "Démarrer" bouton1.pack(side=BOTTOM) fen=Toplevel() #Création de la fenêtre secondaire fen.title('Traitement/Analyse')#Définition du titre de la fenêtre "fen" fen['bg']='lightgrey' #Couleur de fond de la fenêtre "fen" fen.geometry("{0}x{1}+0+0".format(fenetre.winfo_screenwidth(), fenetre.winfo_screenheight()-72))#Destruction de la fenêtre "fen" lors de l'appuie sur le bouton1 nommé "Nouvelle capture" camera.framerate = Fraction(1,5)#Modifiction du nombre d'image prise par seconde (1 image par seconde) camera.exposure_mode = 'off'#Modification du mode d'exposition pour pouvoir modifié le temps d'exposition du capteur camera.shutter_speed = 100000#Modification du temps d'exposition du capteur camera.capture('/home/pi/Desktop/image.png')#Capture de l'image camera.stop_preview()#Mise à l'arret de la caméra photo=Image.open("/home/pi/Desktop/image.png")#Ouverture de l'image im = PhotoImage(file="/home/pi/Desktop/image.png")#Définition de l'image frame3=Frame(fen,bg='lightgrey')#Création de la frame "frame3" qui va accueillir nos boutons frame3.pack(side=RIGHT) canvas=Canvas(fen,height=480,width=480,bg='lightgrey')#Création de l'espace qui va accueillir l'image canvas.create_image(0,0,anchor=NW,image=im)#Importation de l'image dans l'espace canvas canvas.pack() bouton15=Button(frame3, text="Reconstruction 2D", command=reconstruction)#Appel de la fonction reconstruction lors de l'appuie sur le bouton15 nommé "reconstruction" bouton15.pack(side=BOTTOM) bouton13=Button(frame3, text="Nouvelle capture", command=fen.destroy)#Destruction de la fenêtre "fen" lors de l'appuie sur le bouton1 nommé "Nouvelle capture" bouton13.pack(side=BOTTOM) fen.mainloop() ############## Création de la fenêtre principale ############## fenetre = Tk()#Définition de la fenêtre avec le module TKinter fenetre.title('usco_pi') #Titre de la fenêtre fenetre['bg']='lightgrey' #Couleur de fond fenetre.geometry("{0}x{1}+0+0".format(fenetre.winfo_screenwidth(), fenetre.winfo_screenheight()-72))#Destruction de la fenêtre "fen" lors de l'appuie sur le bouton1 nommé "Nouvelle capture" frame=Frame(fenetre)#Création de la fenètre qui va acceuillir nos différents widgets frame.pack(side=RIGHT) ############## Widgets ############## bouton4=Button(frame, text="Arrêt LED", command= eco)#Appel de la fonction eco lors de l'appuie sur le bouton4 nommé "Arrêt LED" bouton4.pack(side=TOP) scale = Scale(frame,orient='vertical',label='Luminosité (%)',tickinterval=10,sliderlength=20,width=50,length=275,background='lightgrey', from_=100, to=0, command=get_value)#Appel de la fonction get_value lors du déplacement du curseur nommé "Luminosité (%)" scale.pack(side=TOP) bouton1=Button(frame, text="Démarrer", command= marche)#Appel de la fonction marche lors de l'appuie sur le bouton1 nommé "Démarrer" bouton1.pack(side=BOTTOM) fenetre.mainloop()