Smartcam è un ottimo progetto.
Il suo scopo è quello di poter sfruttare la fotocamera del proprio cellulare con il proprio computer.
In pratica nel computer viene aperta l’applicazione smartcam che fa da server, sul telefono viene aperto il client smartcam che si connette tramite bluetooth o tramite wireless al computer. Il server inoltre dovrebbe permettere di usare a tutte le applicazioni del computer il video acquisito.
Smartcam esiste per molti telefoni (tra cui android e symbian) e per Windows e Linux.
La versione Windows non l’ho mai provata, ma ho provato la versione Linux.
Vedendo che l’ultima versione risale a 3 anni fa si può già capire che abbia problemi. Infatti sono stati fatti notevoli passi avanti con tutto, a partire dal kernel Linux stesso.
La versione precompilata dell’applicazione funziona, però non si può più usare il suo modulo: è troppo vecchio e già col kernel 2.6.32 non era possibile compilarlo.
Analizzando un po’ il sorgente del cuore si può vedere quanto in realtà sia abbastanza banale il funzionamento: tramite le solite funzioni di rete vengono ricevute le immagini, poi sono scritte con la funzione di C write
su un device particolare. In teoria basterebbe modificare una macro del sorgente affinché usi il modulo v4l2-loopback
o un altro modulo simile.
Già, in teoria.
Infatti l’applicazione è costruita su GTK, però nel frattempo sono uscite le GTK 3, cosa che, visto che c’è stata una major release, ha comportato parecchie modifiche.
Insomma, di tutto quello che c’è poco va bene così com’è.
Però io ho voluto lo stesso provare a sfidarmi. Ho voluto scrivere un server alternativo.
Per questione di velocità ho optato per il python.
La parte della network è stata facilissima. Il difficile (e ancora non fatto) è stata la decodifica delle immagini: non ho ancora capito perché ma header e contenuto dell’immagine sono separati.
L’unico modo per metterli assieme è usare la classe già fatta da loro, che si basa su libjpeg. Ho provato a fare in C ma ho avuto un segmentation fault che non ho saputo risolvere, perciò mi sono arreso e ho cercato almeno di far funzionare la loro classe.
Ebbene, questo è il risultato:
In realtà la JPG l’ho estrapolata con imagemagick ma non penso che sarebbe stato tanto meglio direttamente in RGB24.
Per il momento rinuncio, forse se un giorno avrò voglia continuerò, magari riscrivendo ciò che ho fatto in C++.
Intanto vi ho voluto parlare di questo progetto, molto interessante secondo me.
Però oggettivamente c’è anche un motivo se non è stato più portato avanti, penso: prima funzionava, non aveva senso spendere troppo tempo dato che ormai le webcam sono ovunque, sia sui portatili, sia su certi monitor di computer fissi. E in mancanza di webcam integrata una webcam separata non costa niente, ce ne sono anche da 10€.