View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Programmer le pcDuino : Image : Enregistrer une image à intervalle régulier.

Par X. HINAULT - Juin 2013

Ce que l'on va faire ici

  • Dans ce code, une image webcam est capturée et enregistrée dans un fichier à intervalle régulier, avec horodatage de l'image. Ce code est basé sur la librairie Pyduino Multimédia.
  • Pour plus de détails sur la capture d'image, voir l'instruction Pyduino captureImage()
  • Vous remarquerez la simplicité du code obtenu.

Pré-requis

Schéma fonctionnel

  • La fonction loop() s'auto-appelle à intervalle régulier à l'aide d'un timer permettant la capture de l'image.

Matériel nécessaire

Système

  • Le pcDuino
  • Une webcam compatible ( Logitech C170, C270, etc...)

E/S

  • aucun matériel

Instructions de montage

  • Connecter la webcam au mini-PC

Le montage à réaliser

  • Aucun. Simplement connecter la webcam au mini-PC.

Le fichier *.yno

Copier/coller ce code dans l'IDE Pyduino

Le fichier *.py

Copier/coller ce code dans l'éditeur Geany :


#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino

# test Capture Image

from pyduinoMultimedia import * # importe les fonctions Arduino pour Python

# entete declarative
noLoop=True
filepath=""

#--- setup ---
def setup():

        global filepath

        # initialisation chemin
        filepath=homePath()+dataPath(IMAGE)+today("",-1)+"/" # nom chemin avec date jour format AAAAMMJJ

        if not exists(filepath):
                mkdir(filepath) # creation repertoire
                print ("Creation repertoire OK")
        else:
                print ("Le repertoire existe")

        print filepath # debug

        # initialisation webcam
        initWebcam(0,640,480) # la resolution doit etre supportee par la webcam !


        loop() # premier appel loop()

# -- fin setup --

# -- loop --
def loop():

        global filepath

        filenameImage=nowtime("_")+".jpg" # nom image horodate

        print filepath+filenameImage

        captureImage(filepath+filenameImage)

        #addTextOnImage(today("/")+"@"+nowtime(":"), 10,height()-30, green) # ajoute texte sur image
        addTextOnImage(nowdatetime(), 10,height()-20, blue,1) # ajoute texte sur image

        saveImage(filepath+filenameImage) # enregistre l'image

        timer(1000, loop) # relance timer - la fonction loop s'auto-appelle

# -- fin loop --

#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction main
        while not noLoop: loop() # appelle fonction loop sans fin

 

Ce code est également disponible ici : https://gist.github.com/sensor56/875df42780c8e1637e96/raw/e54b49958a8ea44700f767d32e31714c6e4aece6/CaptureImageTimer.py

Utilisation

  • Vérifier au préalable que le répertoire utilisé existe sur le système et le créer graphiquement au besoin.
  • Appuyer sur le bouton exécuter dans Geany
  • Une fenêtre de Terminal vide doit apparaître : un message indique alors qu'une image est enregistrée, automatiquement horodatée.
  • On peut ensuite ouvrir les images, notamment avec le logiciel stopmotion :
  • Simple et efficace.

Discussion technique

  • Si on envisage l'enregistrement de nombreuses images, préférer utiliser une clé USB ou une carte SD et adapter le chemin en conséquence.

Utilisation potentielle

  • On réalise ici un datalogging image par image à vitesse variable. Cela rendra possible l'enregistrement de "mouvements lents" pour les accélérer secondairement. A raison d'une image par seconde, on pourra accélérer le mouvement x 25 si lecture à 25 fps, x 50 toutes les 2 secondes, etc..
  • On pourra ainsi potentiellement enregistrer :
    • des mouvements de foules/public dans un lieu donné
    • la construction d'un meuble, d'un objet
    • la pousse d'une plante
    • les mouvements des nuages
    • etc...
  • Les images étant obtenues une à une, il sera possible également de les traiter secondairement par traitement d'image, notamment avec openCV.

Truc d'utilisation

  • Pour lire rapidement sous forme "vidéo" une série d'images individuelles, utiliser le logiciel stopmotion : sudo apt-get install stopmotion