Raspberry Webcam e Musica
Raspberry Webcam e Musica
Resoconto sul Tavolo del 7 Febbraio 2013
Da terminare, integrare, illustrare con foto!
Il nostro esperimento mirava ad esplorare la possibilità di usare una webcam collegata ad un raspberry per riconoscere dei qrcode e distinguere tra diversi album virtuali da riprodurre su uno stereo.
Setup
Il nostro setup è stato particolarmente semplice:
- Un Raspberry B (v1);
- Una Webcam (Sony Playstation 3 Eye);
- Qualche card rappresentante gli album da suonare.
Ho scelto questo modello di webcam perché è considerata una delle migliori webcam per la computer vision amatoriale e si può trovare usata per poco più di 10€. Come se non bastasse il driver (libero) per linux è particolarmente performante.
Abbiamo usato Python per acquisire le immagini con *OpenCV* e *Python Imaging Library*
Avremmo voluto utilizzare zbar per
- zbar
Un bug del modulo python-zbar (python va in Segmentation Fault se importa il modulo) ci ha costretto a ripiegare sul programma standalone zbar-img e, in pieno stile unix, abbiamo optato per una serie di script specializzati tenuti assieme da uno script bash.
Il primo script scatta una foto via webcam e la decodifica tramite _zbarimg_
#!/usr/bin/python
import cv
from os import system
# Creamo un oggetto associato alla prima e unica webcam
# attaccata al respberry (ovviamete l'indice e' 0)
camera = cv.CaptureFromCAM(0)
# Catturiamo un fotogramma
image = cv.QueryFrame(camera)
# Salviamo il fotogramma su file in una immagine png
cv.SaveImage("test.png",image)
# Passiamo l'immagine a zbarimg per decodificarlo
system("/usr/bin/zbarimg test.png")
Il secondo scritp, in bash, cerca il codice riconosciuto da capture ed invia il comando al player (se il proprietario del Raspberry Pi si ricorda di installarlo ;) )
#!/bin/bash
rm test.png
code=`capture.py | grep QR-Code | cut -d: -f2`
file=`grep "^$code" audiodb | cut -d\| -f2`
if [ -f "test.png" ]; then
if [ -n "$file" ]; then
echo -e "Avrei dovuto far suonare \n$file\n se mi fossi ricordato di installare il player"
else
echo "Non ho trovato $code nella banca dati"
fi
else
echo "qrcode non riconosciuto"
fi
La base dati da cui attingere per trovare quali file suonare è un semplice file divisi in campi indicizzato sul primo campo
0031A| Boom Boom Becket Attenti al ladro |Music/album/0031A.m3u 0001B| Fabrizio de André Creuza de ma |Music/album/0001B.m3u 0031B| Galdson Roots |/Music/album/0031B.m3u
Conclusioni
Siamo riusciti ad ottenere buona parte del risultato sperato. Per continuare sullo stesso progetto, un player