Outils pour utilisateurs

Outils du site


evenements:obc2012:dikogeek

Ceci est une ancienne révision du document !


DikoGeek

Lexique vidéo pour les non geek


Le projet

L'idée de ce projet est de créer un dictionnaire/lexique pour les personnes ne connaissant pas les termes techniques utilisé lors de l'OBC.

Il se veut interactif et se présentera sous forme de courte vidéo que l'utilisateur pourra lancer grâce à l'appui sur un bouton.

Format proposé

  • Un pupitre avec des boutons (environ 35, suivant le nombre de définition)
  • Un écran (l'idée serait peut être de faire un truc dans le genre flipper, des boutons accessible et l'écran en face)


Les réflexions sur la liste “tyfab” ont amenés à penser le projet d'une manière plus global et surtout réutilisable pour d'autres événements.

Anthony écrivait :

En fait je me pose une autre question ergonomique :

ne vaudrait-il pas mieux qu'on ait un joystick qui permette de se balader dans une liste de mots classée par ordre alphabérique et un seul bouton qui lance la vidéo.

le tout dans un boitier en bois qui contient :
- enceinte
- écran LCD pour voir les mots en local
- sortie son pour brancher sur une sono
- sortie vidéo pour moniteur, télé ou vidéo proj
- alim externe

Comme ça deux usages : sur batterie, en autonome et seulement sonore ou sur secteur avec vidéo ?

ce qui présenterai l'avantage de pouvoir rajouter des définitions autant qu'on veut ? du coup pour naviguer et lancer les vidéo ça pourrait être un site web genre CMS permettant à un admin d'ajouter des vidéos ? et du coup on pourrait même mettre sur le web ! et re du coup pour mettre à jour la borne avec de nouvelles définitions, il suffirait de synchroniser la borne avec le site web ?

qu'en pensez-vous ?


Voilà, l'idée général est donc là, reste à voir jusqu'où on peut aller dans la conception…

Technique

On part donc sur l'utilisation d'un Raspberry Pi pour lire les vidéos.

Voici la chaîne de traitement

  1. Appui sur un bouton
  2. Récupération de l'événement via Python (le bouton en question à un ID unique)
  3. Lancement de la vidéo associé à l'ID unique
  4. Lecture de la vidéo
  5. Si un autre bouton est pressé, on tue la tâche en cours, on lance une nouvelle vidéo
  6. Etc.

Vidéo

J'ai testé différente manières de lire une vidéo sous Raspi.

  1. Tout d'abord grâce à des librairies python
    1. OpenCV
    2. PyMedia
    3. PyGame
  2. En faisant des appels système dans des programmes Python
    1. On peut utiliser OmxPlayer ou RaspPyPlayer (à tester) et passer en paramètre la vidéo souhaité



J'ai trouvé les librairies python complexe à mettre sur pieds. Il faut les bonnes versions, compiler certaines fois car les packages ne sont pas bons. Bref complexe, mais l'avantage c'est que l'on peut toujours gérer avec python.

Avec OmxPlayer on refile la lecture de la vidéo au système, c'est donc très simple, cependant, c'est pour gérer la lecture, arrêt, suivant, etc. car il faut utiliser des appels système à travers python.

Bref, je ne sais pas si je suis bien clair, mais l'idée est là ;)

Je vous laisse rajouter des idées si vous avez de l'expérience là dedans.

Vos idées

  • C'est par ici

Interaction homme/machine

Nous aurons probablement besoins d'utiliser au moins une trentaine de bouton…

Il y a eu plusieurs idées :

  • Interfacer avec Arduino
  • Utiliser les ports I2C et ISCP de Raspi
  • Utiliser un clavier PS2 ou USB et utiliser le contrôle du clavier
  • Registre à décalage

Vos idées

  • C'est par ici

Code source

#!/usr/bin/python2.7
# -*-coding:Utf-8 -*

#Import des librairies nécessaires
import os
import subprocess, signal
import RPi.GPIO as GPIO  
GPIO.setmode(GPIO.BCM)  
from subprocess import Popen, PIPE

#Configuration de deux ports du GPIO (inter)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)  

#Création d'une fonction de rappel (gestion des execptions)
def my_callback(channel):  

    print ("Lancement clip 1")
    #Lancement d'un sous process pour récuperer la liste des processes en cours
    p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
    out, err = p.communicate()

    #Listing des process
    for line in out.splitlines():
	#On recherche si le lecteur video est en route
       	if 'omxplayer' in line:
                pid = int(line.split(None, 1)[0])
		#On Kill le process
                os.kill(pid, signal.SIGKILL)
    #Lencement d'un sous process pour lancer le clip
    p = subprocess.Popen(['xterm', '-fullscreen', '-fg', 'black', '-bg', 'black', '-e', 'omxplayer', '-r', '/home/pi/clip.avi'],stdout=subpr
ocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)
    #Vérifie si le process se termine naturellement
    retcode = p.wait()

    #Si le process c'est terminé naturellement, lancement d'une page web d'animation ou de présentation du diko geek
    if retcode is not None:
	print "Lancement navigateur"
	os.system("chromium --user-data-dir=/home/pi/dikogeek/ --app=http://google.fr")
  
def my_callback2(channel):  
    print ("Lancement clip 2")
    p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
    out, err = p.communicate()

    for line in out.splitlines():
       	if 'omxplayer' in line:
        	   pid = int(line.split(None, 1)[0])
                   os.kill(pid, signal.SIGKILL)
    p = subprocess.Popen(['xterm', '-fullscreen', '-fg', 'black', '-bg', 'black', '-e', 'omxplayer', '-r', '/home/pi/clip2.avi'],stdout=subp
rocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)
    retcode = p.wait()

    if retcode is not None:
	print "Lancement navigateur"
        os.system("chromium --user-data-dir=/home/pi/dikogeek/ --app=http://google.fr")
	

#Configuration des deux ports GPIO, fonction de callback, debounce de 600ms + condo de 0,1nF sur l'inter
GPIO.add_event_detect(17, GPIO.FALLING, callback=my_callback, bouncetime=600)  
GPIO.add_event_detect(23, GPIO.FALLING, callback=my_callback2, bouncetime=600)  

#Permet de bloquer le programme pour éviter qu'il se termine tout seul
raw_input("> ")
evenements/obc2012/dikogeek.1367592054.txt.gz · Dernière modification : 2022/09/04 21:49 (modification externe)