Bonjour a tous ,
je me permet de vous demander votre aide pour une petit souci que je rencontre dans ma programmation. Que vous trouverez ci dessous
Voici les deux choses que je n’arrive pas à mettre en place .
-
Après l’affichage de la photo prise , attendre d’appuyer sur ,soit le bouton gpio N20 , qui relancerait la def play ( on repartirait sur la séquence complète pour prendre une photo )
soit appuyer sur le bouton n21 qui lancerait l’impression . -
le petit soucis que je n’arrive pas à régler c’est la taille d’affichage de la photo . En gros quand l’affichage se fait, ma photo est comme " zoomé "
Ex: si je fait une photo de moi debout , à l’affichage ça me mettra que le haut de mon corps . Ça fait quelque heure que je planche dessus mais je bug complètement
import picamera
import itertools
import subprocess
import os
from shutil import copyfile
import sys
import time
from datetime import datetime
import logging
import RPi.GPIO as GPIO
from PIL import Image, ImageDraw, ImageFont
import pygame
LARGEUR_ECRAN = 1280
HAUTEUR_ECRAN = 960
LARGEUR_PHOTO = 1280
HAUTEUR_PHOTO = 960
CurrentWorkingDir= « /home/pi/Photomaton_Prev/ »
archiveDir = « /home/pi/Pictures/ »
PHOTO_DELAY = 5 #délai en secondes avant prise de la photo
overlay_renderer = None
buttonEvent = False
pygame.init()
#screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
screen = pygame.display.set_mode((790, 530))
width, height = screen.get_size()
GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(20, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#Supprimer les pré-images (on ne les garde que dans le dossier du bureau)
def deleteImages(fileName):
logging.info(« Suppression des anciennes images. »)
if os.path.isfile(fileName):
os.remove(fileName);
def cleanUp():
GPIO.cleanup()
def archiveImage(fileName):
logging.info(« Sauvegarde de l’image : « +fileName)
copyfile(fileName,archiveDir+ »/ »+fileName)
def countdownFrom(secondsStr):
secondsNum = int(secondsStr)
if secondsNum >= 0 :
while secondsNum > 0 :
addPreviewOverlay(300,100,200,str(secondsNum))
time.sleep(1)
secondsNum=secondsNum-1
def precapture1(imageName):
addPreviewOverlay(150,200,100,"–> Photo dans 5 secondes ! :-)")
def precapture2(imageName):
addPreviewOverlay(150,200,100,"–> Souriez !!!")
def captureImage(imageName):
addPreviewOverlay(150,200,100,"–> Merci ! :-)")
#Sauvegarde de l’image
camera.capture(imageName, resize=(3280, 2464))
print(« Image « +imageName+ » enregistrée. »)
def addPreviewOverlay(xcoord,ycoord,fontSize,overlayText):
global overlay_renderer
img = Image.new(« RGBA », (LARGEUR_ECRAN, HAUTEUR_ECRAN))
draw = ImageDraw.Draw(img)
draw.font = ImageFont.truetype(
« /usr/share/fonts/truetype/freefont/FreeSerif.ttf »,fontSize)
draw.text((xcoord,ycoord), overlayText, (255, 20, 147))
if not overlay_renderer:
overlay_renderer = camera.add_overlay(img.tobytes(),
layer=3,
size=img.size,
alpha=128);
else:
overlay_renderer.update(img.tobytes())
def play():
print(« Démarrage de la séquence ‹ 1 photo › »)
initCamera(camera)
print("Démarrage de l'aperçu")
camera.start_preview()
fileName = time.strftime("%Y%m%d-%H%M%S")+".jpg"
fileName_Miroir = time.strftime("%Y%m%d-%H%M%S")+"_Miroir.jpg"
print("Nom de fichier créé : "+fileName)
precapture1(fileName)
time.sleep(2)
countdownFrom(PHOTO_DELAY)
precapture2(fileName)
time.sleep(2)
captureImage(fileName)
time.sleep(1)
archiveImage(fileName)
deleteImages(fileName)
camera.stop_preview()
AfficherPhoto("/home/pi/Pictures/" + "/" + fileName)
addPreviewOverlay(150,200,100,"--> Joli ;-)")
time.sleep(3)
AfficherPhoto("/home/pi/Photomaton_Prev/accueil1.jpg")
addPreviewOverlay(20,200,55,"--> Appuyez sur le bouton Rouge")
os.system('lpr -h -PSamsung_Samsung_CLX-3300_Series -#1 -o media=A4 -o scaling=25 "/home/pi/Desktop/Photos_du_Photomaton/'+fileName+'"')
time.sleep(15)
print("Travail d'impression créé avec succès.")
def initCamera(camera):
#camera settings
camera.resolution = 2500, 2300
camera.framerate = 24
camera.sharpness = 0
camera.contrast = 0
camera.brightness = 50
camera.saturation = 0
camera.ISO = 0
camera.video_stabilization = False
camera.exposure_compensation = 0
camera.exposure_mode = ‹ auto ›
camera.meter_mode = ‹ average ›
camera.awb_mode = ‹ auto ›
camera.image_effect = ‹ none ›
camera.color_effects = None
camera.rotation = 0
camera.hflip = False
camera.vflip = False
camera.crop = (0.0, 0.0, 1.0, 1.0)
def onButtonPress():
print(« Demande faite pour 1 photo ! »)
play()
#reset the initial welcome message
addPreviewOverlay(20,200,55,"–> Appuyez sur le bouton Rouge")
def onButtonDePress():
print(« Bouton Rouge n’est plus pressé (donc, il a le temps ???) ;-) »)
def AfficherPhoto(fileName): # affiche NomPhoto
print("loading image: " + fileName)
background = pygame.image.load(fileName);
background.convert_alpha()
background = pygame.transform.scale(background,(790, 530))
screen.blit(background,(0, 0))
pygame.display.flip()
#Flux initial
with picamera.PiCamera() as camera:
os.chdir(CurrentWorkingDir)
try:
addPreviewOverlay(20,200,55,"--> Appuyez sur le bouton Rouge")
AfficherPhoto("/home/pi/Photomaton_Prev/accueil1.jpg")
print("Démarrage de la boucle du programme")
while True:
input_state = GPIO.input(16)
if input_state == False :
if buttonEvent == False :
buttonEvent = True
onButtonPress()
elif buttonEvent == True :
buttonEvent = False
onButtonDePress()
except BaseException:
print("Heu ... Exception non gérée : " , exc_info=True)
camera.close()
cleanUp()
finally:
print("Au revoir ...")
cleanUp()
camera.close()