Vamos a darle otra «vuelta de tuerca» a las posibilidades que nos ofrece la captura de imágenes desde la cámara USB conectada a nuestra Raspberry Pi. Para ello no vamos a tocar nada nuevo en cuanto a hardware se refiere, estos es, que seguimos haciendo uso de la cámara que se haya mostrado compatible para nuestra Raspi. Lo que si vamos a hacer es parametrizar algo más el comando uvccapture y, a la vez, utilizar alguno de los recursos que Linux nos ofrece. Para visualizar las imágenes obtenidas continuamos usando el comando display, el cual forma parte de los incluídos en el paquete ImageMagick ya comentado en la entrada anterior sobre cámaras USB.
En resumen, lo que vamos a ver hoy es:
– Cómo capturar imágenes de forma secuencial.
– Cómo guardar la información de las capturas.
Capturando imágenes secuencialmente.
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
1 |
Nota: pulsamos Ctrl-c en el terminal para |
1 |
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.
Guardando las imágenes capturadas
Uno de los parámetros del comando uvccapture permite la ejecución de un comando Linux nada más terminar de ejecutar la captura. Así que vamos a hacer uso de esta propiedad. Para ello usamos el parámetro -c del mismo. Los pasos a seguir para conseguir esto son:
(1) Creamos un directorio donde alojar las capturas de cámara.
(2) Creamos un fichero «ShellScript» que ejecute una copia con cambio de nombre (evitamos así la sobrescritura del mismo)
(3) Ejecutamos el comando uvccapture con el parámetro -c asociado a nuestro «ShellScript»
Paso (1)
En nuestro ejemplo estamos trabajando en el directorio /pi/tempo/ , y para alojar las imágenes vamos a crear el directorio capturas, quedando este por tanto en /pi/tempo/capturas/
Creamos la carpeta y le damos unos permisos adecuados para que – en este caso – pueda alojar en él los ficheros cualquier usuario.
1 |
Nota: hemos de tener cuidado si guardamos una cantidad excesiva |
1 |
de ficheros, ya que podemos quedarnos sin espacio en nuestra tarjeta |
1 |
SD (o dispositivo USB si estamos trabajando desde el mismo). |
Paso (2)
Ahora vamos a crear un fichero tipo «shell script» que se encargará de efectuar la copia. Como quiera que su «misión» será efectuar un back-up de imágenes podemos denominarlo – por ejemplo – bui.sh. Para ello usamos el editor nano
sudo nano bui.sh
y tecleamos el código siguiente:
#Copia de capturas de video
AHORA=$(date +»%d%m%Y_%m%S»)
cp snap.jpg capturas/»cap_$AHORA.jpg»
Como siempre, salimos guardando el fichero con Ctrl-x + S + <Enter>
Nota sobre el ShellScript (para Windowseros):
En Linux un fichero de tipo shellscript es, de alguna manera, similar a los ficheros .bat de Windows, aunque mucho más potente. En nuestro ejemplo incorporamos variables definidas a nuestro gusto (denotadas por $), comandos estándar del sistema (cp en este caso) y parámetros que el propio sistema incorpora, como es el caso de date y que nos sirve para conformar el nombre único de fichero que damos a cada captura. Si estamos interesados en particularizar dicho dato podemos buscar muchas más opciones dentro del comando date; tan solo ejecutando man date obtendremos toda la información al respecto.
Paso (3)
Una vez creado el ejecutable será conveniente asegurarnos de darle los máximos permisos de ejecución. Para ello efectuaremos:
sudo chmod 777 bui.sh
Y ahora todo lo que tendremos que hacer es llamar a nuestro capturador pero parametrizando la toma de imágenes. Para ello , y haciendo uso de nuestro nuevo fichero «bui.sh«. ejecutaremos:
uvccapture -m -B70 -C40 -S5 -t3 -c»./bui.sh»
1 |
Nota: pulsamos Ctrl-c en el terminal para |
1 |
finalizar el bucle de captura. |
En nuestro ejemplo vemos que la captura efectuada – sobre una pantalla de TV – ha tomado las imágenes deseadas, las ha renombrado en función de la hora de adquisición y, finalmente, las ha copiado en el directorio preparado al efecto.