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 : L'appui sur un BP déclenche la capture d'une image webcam avec bruitage ("appareil photo numérique").

Par X. HINAULT - Juillet 2013

Ce que l'on va faire ici

  • Dans ce code, l'appui sur un bouton poussoir va déclencher d'une image webcam associé à la lecture d'un fichier de bruitage "déclic photo" à l'aide de ma librairie Pyduino Multimedia. L'ensemble réalise un code "appareil photo numérique" qui pourra servir de base didactique auprès d'un public jeune.
  • Vous remarquerez la simplicité du code obtenu au vu des fonctions utilisées (capture webcam + lecture fichier son + enregistrement dans un fichier + affichage image...) : la librairie Pyduino Multimedia apporte une couche d'abstraction qui résume les fonctions appelées à l'essentiel !

Pré-requis

Exemples de sons

$ wget -4 http://www.mon-club-elec.fr/mes_downloads/pyduino_sons.tar.gz
  • Extraire l'archive puis copier-là dans votre répertoire de sources audio.

Schéma fonctionnel

  • L'entrée numérique déclenche la capture image et la lecture du fichier son ainsi que l'enregistrement de l'image :

Matériel nécessaire

Système

  • Le pcDuino
  • Une webcam compatible ( Logitech C170, C270, etc...)
  • une sortie son opérationnelle :
    • soit la sortie audio HDMI connectée à un écran HDMI
    • soit la sortie audio jack intégrée si elle existe (raspberryPi)
    • soit une carte son USB disposant d'une sortie audio

E/S

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • un bouton poussoir pour CI,

Instructions de montage

  • Connecter un bouton poussoir entre la broche 2 (configurée en entrée avec rappel au plus) et le 0V
  • Connecter la webcam sur le port USB
  • Connecter la sortie audio (HDMI ou USB)

Le montage à réaliser

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

# appui sur un BP declenche capture image webcam

#from pyduino import * # importe les fonctions Arduino pour Python
from pyduinoMultimedia import * # importe les fonctions Arduino pour Python

# entete declarative
noLoop=True

BP=2  # declare la broche a utiliser
APPUI=LOW # valeur broche lors appui

filepathAudio=""
filepathImage=""
compt=0

#--- setup ---
def setup():
        pinMode(BP,PULLUP) # met la broche en entree avec rappel au plus actif
        Serial.println("La broche 2 est en entree avec rappel au plus actif !")

        global filepathAudio, filepathImage


        # exemples de sons :  wget -4 http://www.mon-club-elec.fr/mes_downloads/pyduino_sons.tar.gz

        filepathAudio=homePath()+sourcesPath(AUDIO)+"photo/"
        print filepathAudio

        filepathImage=homePath()+dataPath(IMAGE)
        print filepathImage

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

        loop() # premier appel loop()

# -- fin setup --

# -- loop --
def loop():

        global filepathAudio, filepathImage, compt

        if(digitalRead(BP)==APPUI): # si appui
                Serial.println("Appui BP!")
                playSound(filepathAudio+"camera-click-1.wav") # joue le son

                closeImage() # ferme visionneur image precedente

                # capture image
                filename="photo"+str(compt)+".jpg"
                print filepathImage+filename
                captureImage(filepathImage+filename) # charge une image dans le buffer a partir webcam
                compt=compt+1

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

                saveImage(filepathImage+filename) # enregistre l'image
                delay(500)

                showImage(filepathImage+filename) # affiche l'image
                delay(250)  # anti-rebond

        timer(200, 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://raw.github.com/sensor56/pyduino-exemples/master/Image/digitalReadPlaySoundCaptureImage.py

Utilisation

  • Vérifier au besoin le bon fonctionnement de la sortie audio au préalable (par exemple en générant un son avec Audacity...)
  • Vérifier au besoin au préalable le bon fonctionnement de la webcam avec guvcview
  • Appuyer sur le bouton exécuter dans Geany
  • Une fenêtre de Terminal doit apparaître : lors d'un appui sur le bouton poussoir, un son de "déclic" doit être entendu et une image doit être capturée puis affichée. Noter que l'image est également enregistrée.

Discussion technique

  • On utilise ici un Timer entre 2 appels de loop() pour ne pas solliciter inutilement la CPU.
  • La capture d'image repose sur la librairie OpenCV.