Raspberry Webcam e Musica

Da raspibo.
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.

Gli script

Il primo script scatta una foto via webcam e la decodifica tramite *zbarimg*

Fotogramma pronto per la decodifica
#!/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 audio da collegare direttamente allo stereo o ad un amplificatore /casse / cuffia, Si potrebbe cercare di pilotare un touchscreen per poter dare all'utente la possibilità, ad esempio, di saltare una traccia o variare il volume di riproduzione.