Requisito previos
La consulta de la lista de compatibilidad puede ayudar pero podemos comprobarlo en desde linea de comandos para verificar si el sistema la identifica correctamente.
Antes de conectar la cámara al sistema iremos al terminal y teclearemos el comando dmesg | tail, lo que hará que se nos muestren los últimos mensajes generados por la RasPi. Ahora conectamos la cámara a la Raspberry Pi y repetimos el comando anterior ( dmesg | tail), y en este caso se nos deberán mostrar algunos mensajes que hagan referencia al nuevo hardware detectado.
Otra comprobación interesante es verificar si la cámara ha sido detectada como dispositivo Linux, para ello teclearemos ls /dev , lo que hará que aparezca , si es que el sistema la detecta , como dispositivo /dev/videoX ( normalmente /dev/video0 pero asegurese con un ls /dev)
sudo apt-get install imagemagickDe forma previa podemos instalar el software para poder visualizar de una forma cómoda los ficheros obtenidos para poder verlos desde el propio terminal dentro del entorno gráfico pues la visualización de imágenes desde el entorno gráfico se puede efectuar con solo "pinchar" en la imagen a mostrar desde el navegador gráfico de archivos para los cual podemos instalar el sw de imagen magick
Para instalar el paquete citado basta teclear:
Existen varias utilidades para capturar imágenes desde un web cam veamoslas:
sudo apt-get install fswebcam
Fswebcam
En efecto la herramienta fswebcam, que funciona bajo línea de comandos, nos permite capturar imágenes a través de la Webcam USB, para ello en primer lugar, instale el paquete: fswebcam
con el comando sudo , es decir:
Ahora escriba el comando seguido de un nombre de archivo y una imagen se tomaron con la cámara web y se guardarán al nombre de archivo especificado como por ejemplo fswebcam /dev/video0 image.jpg
Este comando mostrará la siguiente información:
[email protected]:~ $ fswebcam -d /dev/video0 pepe.jpg --- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. No input was specified, using the first. Adjusting resolution from 384x288 to 352x288. --- Capturing frame... Captured frame in 0.00 seconds. --- Processing captured image... Writing JPEG image to 'pepe.jpg'
Como vemos la resolución por defecto es pequeña y ademas se complementa en la parte inferior con un pequeño banner que muestra la fecha y hora.
En caso de utilizar una web cam hd, para especificar la resolución podemos forzar que la imagen para sea tomada a mayor resolución , para ello se puede utilizar la bandera: 1280 x 720
-r
fswebcam -r 1280x720 -d /dev/video0 pepe2.jpg
Este comando mostrará la siguiente información:
--- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. No input was specified, using the first. Adjusting resolution from 1280x720 to 640x480. --- Capturing frame... Captured frame in 0.00 seconds. --- Processing captured image... Writing JPEG image to 'pepe2.jpg'
Puede quitar el banner inferior puede añadir el siguiente parámetro:--no-banner :
El cual muestra la siguiente información:
--- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. No input was specified, using the first. --- Capturing frame... Corrupt JPEG data: 2 extraneous bytes before marker 0xd6 Captured frame in 0.00 seconds. --- Processing captured image... Disabling banner. Writing JPEG image to 'image3.jpg'.
Ahora con ese parámetro ya se toma la imagen a resolución completa sin banner
Script de captura
Puede escribir un script de Bash para que tome una foto con la webcam por lo que la secuencia de comandos que vamos a vera continuación guarda las imágenes en el directorio,
En primer lugar crear el subdirectorio primero en:/home/pi/webcam
webcam con
mkdir webcam
Para crear una secuencia de comandos, abra su editor de la opción y escriba el siguiente código de ejemplo:
Este script tome una fotografía y usa como nombre del archivo con una marca de tiempo.
Para poder ejecutar el script webcam.sh
en primer lugar nos gustaría hacer el archivo ejecutable:
Luego ejecutar con:
Al ejecutarlo dar la siguiente salida:
--- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. No input was specified, using the first. --- Capturing frame... Corrupt JPEG data: 2 extraneous bytes before marker 0xd6 Captured frame in 0.00 seconds. --- Processing captured image... Disabling banner. Writing JPEG image to '/home/pi/webcam/2013-06-07_2338.jpg'.
Time-lapse con cron
Usted puede utilizar para tomar una fotografía en un intervalo dado, como cada minuto para capturar un time-lapse. cron ,
para ello primero abra la tabla cron para editar:
Esto tampoco pedirá que editor que desea utilizar, o abrirá en su editor predeterminado. Una vez que tenga el archivo abierto en un editor, agregue la línea siguiente para tomar una fotografía cada minuto (refiriéndose a la secuencia de comandos de Bash desde arriba):
Guardar y salir y usted debería ver el mensaje:
Asegúrese de que su gscript no permite guardar cada fotografía tomada con el mismo nombre de archivo. Esta acción sobrescribirá la imagen cada vez.
Uvcpature
Para poder utilizar las prestaciones de nuestra cámara web también podemos instalar los paquetes uvccapture y libv4linux-0
install uvccapture libv4l-0Antes de hacerlo puede ser preciso (recomendable) actualizar las fuentes de instalación con: sudo apt-get update y para descargar los paquetes ejecutaremos:
sudo apt-get
Conectada la cámara y teniendo los programas adecuados ya instalados, vamos a realizar una prueba simple de que todo está funcionando correctamente. Desde el terminal tomamos una instantánea con los parámetros estándar (opción -m) :
uvccapture -m
Ahora listamos la carpeta para comprobar que se capturó el fichero snap.jpg (nombre por defecto de la captura) y luego lo visualizamos mediante el comando display snap.jpg
En caso de que el fichero capturado () salga bastante obscuro podemos ver como están los ajustes por defecto de la cámara mediante el parámetro -v , u vccapture -m -v
uvccapture -m -B50 -C10 -o"captura.jpg"También si el brillo está muy bajo, podemos capturar una nueva imagen pero subiéndolo bastante mediante el comando ( parámetro -B) uvccapture -m -B50
Además de los parámetros comentados, el comando uvccapture nos permite otra serie de interesantes opciones, como por ejemplo podemos parametrizar una nueva captura - modificando brillo y contraste - pero guardando la misma en un fichero llamado "captura.jpg"
Por si fuera poco el comando uvccapture permite que efectuemos de forma secuencial, - y en un lapso de tiempo elegido por nosotros - la captura consecutiva de tomas desde la cámara USB. No debemos confundir esta posibilidad - aunque se le parezca - con la toma de un " stream " o flujo de vídeo continuo. Lo que obtendremos al efectuar esta captura consecutiva es imágenes cada cierto intervalo. Así que vamos a verlo con un ejemplo...
Ejecutamos el comando uvccapture con el parámetro -t , el cual hace que se capture una imágen cada cierto número de segundos (3 segundos en nuestro ejemplo), el cual, si no se especifíca algo diferente se guardará en el fichero snap.jpg.
uvccapture -m -B70 -C40 -S5 -t3 (pulsar VTRL+c para finalizar el bucle de captura)
El resultado de la captura será una toma cada 3 segundos que se guardará en el fichero por defecto (snap.jpg). La única desventaja de este método radica en que el fichero de captura se "machaca" con cada una de ellas, por lo que solo estará a nuestra disposición el último de los generados.
Para subsanar esto podemos hacer uso de una de las prestaciones del programa uvccapture que nos permite ejecutar un comando Linux inmediatamente después de efectuar una captura. ¿Y que podemos ejecutar?... pues parece claro que lo más idóneo sería algún tipo de comando o sucesión de estos que nos permita salvaguardar la última captura, de forma y manera que al realizarse la siguiente toma esta no sea "machacada" impunemente de forma muy similar a como vimos en el script anterior.
Otras herramientas útiles
Otras herramientas están disponibles que puede ser útil cuando se utiliza la cámara o una webcam:
- SSH Utilizado para acceder remotamente el Raspberry Pi en su red local
- SCP Sirve para copiar ficheros sobre SSH ypara obtener copias de las fotografías tomadas en la Pi en el ordenador principal
-
rsync : Uso para sincronizar la carpeta de imágenes tomadas en una carpeta entre el Pi al ordenador
rsync
-
cron Utilizar para programar tomar una fotografía en un intervalo dado, como cada minuto para capturar un time-lapse
cron
Mas información en raspberrypi.org