Raspberry Webcam e Musica

Da raspibo.
Jump to navigation Jump to search

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.