Tengo una cámara Linksys WVC54GC y estoy jugando con la detección del movimiento. Para esto he encontrado un script en bash que tocado un poquito aqui y allá, que hace mas o menos lo que necesito.
#!/bin/sh FRAMERATE=2 SENSITIVITY=30 PNMPSNR=/usr/bin/pnmpsnr cd /mnt/data/.cam/ while true do sleep $FRAMERATE mplayer http://webcam/img/video.asf -really-quiet -frames 1 -vo jpeg djpeg 00000001.jpg > current.ppm date>Ycolour $PNMPSNR current.ppm last.ppm>>Ycolour 2> Y=`awk '/Y color/ {print int($5)}' Ycolour` if [ $Y -lt $SENSITIVITY ] then if [ -d ./`date +%Y%m%d` ] then cp 00000001.jpg ./`date +%Y%m%d`/`date +%y%m%d%H%M%S.jpg` else mkdir ./`date +%Y%m%d` cp 00000001.jpg ./`date +%Y%m%d`/`date +%y%m%d%H%M%S.jpg` fi fi mv current.ppm last.ppm
Esto unido a un script en el init.d
donegonzalo@gnzl:/etc/init gonzalo@gnzl:/etc/init.d$ cat webcamd #!/bin/sh ### BEGIN INIT INFO # Provides: webcamd # Required-Start: networking # Required-Stop: networking # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the webcamd web server. ### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin NAME=webcamd DESC="webcam snapshot motion" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin" SSD="/sbin/start-stop-daemon" FRAMERATE=2 SENSITIVITY=30 PNMPSNR=/usr/bin/pnmpsnr . /lib/lsb/init-functions cd /mnt/data/.cam/ case "$1" in start) echo "Starting $DESC" $NAME su -l gonzalo -c "sh /mnt/data/.cam/startmotiondetection.sh &" ;; *) exit 1 ;; esac exit 0
Hace más o menos lo que quiero.
Si ya se que es muy mejorable ya que el tiempo que le he dedicado es muy poco (modo escusas activado). Si ya se que hay programas como Motion y Zoneminder que hacen esto mas bonito, pero bueno algún dia los miraré.
Mi principal problema es que la única forma que tengo para obtener una imagen fija de la camara es con el comando:
mplayer http://webcam/img/video.asf -really-quiet -frames 1 -vo jpeg
ya que la cámara no me da la posibilidad de obterner la imagen directamente (o al menos no se como hacerlo). Mi problema es que esto no lo quiero ejecutar en un PC, como esta ahora, si no en un NSLU2, que es un aparatito con arquitectura ARM. Pues bien no consigo compilar el mplayer para ARM y encima creo que aunque lo consiga hacer no me va a funcionar ya que los codecs necesarios para ver un stream asf en Linux solo estan en formato binario para x86.
Me gustaría saber como se hace lo mismo que hago con mplayer con vlc (que si lo tengo correctamente instalado en el NSLU2). Otra opción es seguir las instrucciones que veo aqui para cer funcionar la camarita con Motion pero no consigo hacer el reetreaming con ffmpeg, ya que al hacer:
ffmpeg -an -i http://yourwebcam.up/img/video.asf http://localhost:8090/feed1.ffm
me dice que no puede abrir el archivo asf y no tengo ni idea por que.
En fin seguire peleando,