Page 1 sur 1

Python/Timelapse

Posté : ven. 19 févr. 2016 11:10
par chashberry
Bonjour à tous,

Dans le cadre d'un projet de type "timelapse" j'essaye de passer par un code python mais sans succès pour le moment (je suis plutôt novice).

Je passe par Picamera (à l'aide des conseil dispos à cette adresse : http://picamera.readthedocs.org/en/rele ... ipes1.html).

Le but est d'utiliser une boucle infinie (for filename in camera.capture_continuous('img{counter:03d}.jpg'):) mais de la limiter dans le temps.

Pour cela j'ai trouvé une solution avec time et un while de type : a=(time.time()) / b=(time.time()+3) / while a<b: a=(time.time()) afin d'interrompre la boucle au bout de 3 secondes (pour mon exemple).

Le problème est que je n'arrive pas à imbriquer les 2 boucles et soit j'exécute le while pendant 3 secondes puis le for à l'infini, soit l'inverse (en fait que le for).

A titre d'exemple, la possibilité suivante ne prend pas du tout en compte les 3 secondes (j'ai échangé le morceau de code Picamera par une boucle "longue" à interrompre afin de tester ça au travail) :
import time

a=(time.time())
b=(time.time())+3

while a<b:
for c in range(100000000000000000000):
print(c)
a=(time.time())


Je sais que je pourrais m'en sortir plus facilement avec raspistill mais j'aimerais au moins comprendre mon erreur. Merci par avance pour votre aide !

Re: Python/Timelapse

Posté : ven. 19 févr. 2016 14:02
par Manfraid
Salut.

Je viens de lire vite fait la doc. Que veux tu faire et quel sont le parametre que tu veux pour ton timelapse

Et concernant tes boucles c'est normal. Tu devrai plutôt faire une seule boucle avec un comparateur dedans et dès que le temps est fini tu sort de la boucle

Re: Python/Timelapse

Posté : ven. 19 févr. 2016 14:44
par chashberry
Merci pour ta réponse.

Voici le code que j'utilise et qui fonctionne :

Code : Tout sélectionner

import picamera

with picamera.PiCamera() as camera:
    camera.start_preview()
    time.sleep(2)
    camera.rotation = (180)
    camera.resolution = (2592, 1458)  
   
    for filename in camera.capture_continuous('img{counter:04d}.jpg'):
        print('Captured %s' % filename)
        time.sleep(1) 
Je souhaite en plus le limiter dans le temps (et l'interrompre après x secondes par exemple).

Sur un autre forum, on me conseille de faire :
- une boucle infinie avec "while True:"
- une condition de sortie avec un "if" qui déclenche un "break"

Donc à ce stade je vais explorer cette solution.

Si je galère trop je passerais à raspistill mais avant cela je voulais comprendre la logique "python".

Re: Python/Timelapse

Posté : ven. 19 févr. 2016 18:58
par Manfraid
Salut,

oki je comprends

voici un exemple de ce que tu pourrais faire

Code : Tout sélectionner

import time
import picamera

start = time.time() 

stop = start + 60


with picamera.PiCamera() as camera:
    camera.start_preview()
    time.sleep(2)
    camera.rotation = (180)
    camera.resolution = (2592, 1458)  
   
    for filename in camera.capture_continuous('img{counter:04d}.jpg'):
        print('Captured %s' % filename)
        if time.time() >= stop:
            break
        time.sleep(1) 

Re: Python/Timelapse

Posté : mer. 24 févr. 2016 09:15
par chashberry
Bonjour,

Merci beaucoup pour ton retour, je vais regarder ça.

J'avais posé la question sur un autre forum de dev en parallèle et je partage le retour que j'ai eu (si ça peut aider quelqu'un qui passera par là). C'est une solution qui stoppe la boucle après x prises de vue mais comme on détermine le temps entre chacune de ces prises, cela revient finalement au même (et je plaide coupable au final cela vient de la doc picamera mais j'étais resté bloqué sur mon while/for) :

Code : Tout sélectionner

import time
import picamera
with picamera.PiCamera() as camera:
    camera.start_preview()
    try:
        for i, filename in enumerate(camera.capture_continuous('image{counter:02d}.jpg')):
            print(filename)
            time.sleep(1)
            if i == 59:
                break
    finally:
        camera.stop_preview()
Merci encore !