Python/Timelapse

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
chashberry
Messages : 3
Enregistré le : ven. 19 févr. 2016 10:55

Python/Timelapse

Message par chashberry » ven. 19 févr. 2016 11:10

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 !

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Python/Timelapse

Message par Manfraid » ven. 19 févr. 2016 14:02

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
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

chashberry
Messages : 3
Enregistré le : ven. 19 févr. 2016 10:55

Re: Python/Timelapse

Message par chashberry » ven. 19 févr. 2016 14:44

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".

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Python/Timelapse

Message par Manfraid » ven. 19 févr. 2016 18:58

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) 
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

chashberry
Messages : 3
Enregistré le : ven. 19 févr. 2016 10:55

Re: Python/Timelapse

Message par chashberry » mer. 24 févr. 2016 09:15

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 !

Répondre

Retourner vers « Python »