CAMERA E VIDEO PROCESSING
La camera può essere collegata attraverso una porta USB 2.0 oppure attraverso l’interfaccia CSI (Camera Serial Interface). Nel caso si voglia comperare una camera USB ad-hoc è consigliabile verificare la compatibilità della camera con la RPi a questo link. Vengono qui infatti documentati dagli utenti i test di funzionamento dei diversi modelli in commercio.
Le camera con interfaccia USB 2.0 compatibile vengono riconosciute immediatamente dalla distribuzione Linux, che include i driver UVC. Le API di V4L permettono di avere a disposizione un semplice meccanismo di cattura. Queste API sono già integrate nelle funzioni di acquisizione di OpenCV.
Leggendo le prove di compatibilità delle camera USB si nota che, in generale, la max frame rate e risoluzione non sono facili da raggiungere. Noi abbiamo testato due camere della Trust che avevamo a disposizione e che non sono ancora documentate a questo link ma non siamo riusciti a raggiungere i requisiti di risoluzione che ci eravamo imposti per 5fps. Un problema in cui ci siamo imbattuti riguarda l’elevata latenza iniziale di acquisizione (circa 2sec.).
In maggio 2013, RPi ha rilasciato ufficialmente un modulo camera basato sul sensore video a 5Mpx l’OV5647 della Omnivision, che usa l’interfaccia CSI, Abbiamo scelto di testare questa soluzione, dimostratasi immediatamente più performante. Le caratteristiche tecniche sono le seguenti.
- Sensore: Omnivision 5647 (5 megapixel)
- Lenti: 3.6mm F/2.0 focale fissa
- Interfaccia: CSI – Connection: Camera Serial Interconnect
- Risoluzione foto (max): 2592×1944 (limitata a1920×1080)
- Risoluzione video (max): 1920×1080 (1080p) 30fps
- Dimensioni: 21.6mm x 25mm x 8.65mm
- Peso: 3g
- Lunghezza cavo: 150mm
La camera deve essere abilitata attraverso il menù che è visibile andando a digitare il comando “sudo raspi-config” sulla console. La camera è gestita dalla GPU VideoCore IV che limita le performance del sensore. Va sottolineato che l’acquisizione video riduce l’area di visione del sensore del 25% mentre la modalità foto non permette di andare oltre i 2 fps a piena risoluzione (a causa del limitato throughtput tra GPU e ARM).
Sono inoltre disposizione a console due utility per testare rapidamente la camera (alcuni esempi di uso di questi comandi sono visibili qui):
- raspistill
- raspivid
Di questi comandi sono anche disponibili i sorgenti, in C, che possono essere scaricati e compilati per scrivere una propria funzione di acquisizione. In questo caso infatti non è più possibile usare le API di V4L ma è necessario usare un meccanismo che adotti MMAL. Con questa nuova camera è inoltre possibile eseguire molti settaggi che non erano possibili con le API di OpenCV basate su V4L. Infatti, nonostante V4L esponga una ricca interfaccia per i settaggi, l’unico settaggio implementato è quello della risoluzione della camera.
Ad esempio, con l’utility ‘raspstill’ sono disponibili le seguenti modalità, modificabili anche mentre la camera è in acquisizione:
- ex: off,auto,night,nightpreview,backlight,spotlight,sports, snow,beach,verylong,fixedfps,antishake,fireworks;
- awb: off,auto,sun,cloud,shade,tungsten,fluorescent, incandescent,flash,horizon.
Per sfruttare la libreria OpenCV è necessario convertire il frame acquisito in un formato compatibile. come il formato Mat.
OPENCV
I riferimenti alla libreria OpenCV sono già contenuti nel repository della distribuzione Raspbian “wheezy”. Per installarla è possible digitare da riga di comando:
- sudo apt-get install libcv-dev libopencv-dev libcv2.3 opencv-doc