Lexique vidéo pour les non geek
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.
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…
On part donc sur l'utilisation d'un Raspberry Pi pour lire les vidéos.
Voici la chaîne de traitement
J'ai testé différente manières de lire une vidéo sous Raspi.
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.
Nous aurons probablement besoins d'utiliser au moins une trentaine de bouton…
Il y a eu plusieurs idées :
#!/usr/bin/python2.7 # -*-coding:Utf-8 -* #Import des librairies nécessaires import select, time import sys, tty, termios import os import pygame import subprocess, signal from subprocess import Popen, PIPE from pygame.locals import * #import RPi.GPIO as GPIO #GPIO.setmode(GPIO.BCM) from evdev import InputDevice, categorize, ecodes dev = InputDevice('/dev/input/event1') fpid = os.fork() if fpid!=0: #Running as daemon now. PID is fpid sys.exit(0) #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) pygame.init() pygame.display.init() def accueil(): ecran = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) #Crée la fenêtre de tracé image = pygame.image.load("/home/pi/dikogeek/obc.jpg") #charge une image à partir d'un fichier ecran.blit(image, (0,40)) #Colle l'image en haut à gauche de la fenêtre de tracé (ici, l'ecran) pygame.display.flip() #L'affichage devient effectif : l'image est rendue visible. #Fonction appelé lors d'un appuie bouton def fct_movie(channel): ecran = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) #Crée la fenêtre de tracé image = pygame.image.load("/home/pi/dikogeek/chargement.jpg") #charge une image à partir d'un fichier ecran.blit(image, (10,40)) #Colle l'image en haut à gauche de la fenêtre de tracé (ici, l'ecran) pygame.display.flip() #L'affichage devient effectif : l'image est rendue visible. #Lancement d'un sous process pour récuperer la liste des processes en cours p = subprocess.Popen(['omxplayer', '-r', '/home/pi/dikogeek/videos/'+str(channel)+'.mp4'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE,preexec_fn=os.setpgrp) #Vérifie si le process se termine naturellement while (p.poll() is None): if dev.read_one() is not None: os.killpg(p.pid, signal.SIGKILL) break if p.poll() is not None: accueil() #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=fct_movie, bouncetime=600) #GPIO.add_event_detect(23, GPIO.FALLING, callback=fct_movie, bouncetime=600) accueil() for event in dev.read_loop(): if (event.code == ecodes.KEY_A and event.value == 0): fct_movie('fablab') if (event.code == ecodes.KEY_B and event.value == 0): fct_movie(2) if (event.code == ecodes.KEY_C and event.value == 0): fct_movie(3) if (event.code == ecodes.KEY_D and event.value == 0): fct_movie('Arduino-encoded') pygame.display.quit() pygame.quit()