Un equipo muy interesante para usar en la RaspberryPi es una cámara.
El soporte de cámaras en Linux es un tema muy amplio. Nosotros hemos probado con éxito el modelo Logitech C910.
Mostramos algunas cosas que se pueden hacer con SimpleCV y la Raspberry Pi.
Todo es realizado desde la línea de comandos sin necesidad de desplegar la imagen inmediatamante,
Materiales
- Cámara. Usamos una Logitech C910
- Raspberry Pi con linux Occidentalis
- Fuente de poder 5V @ 2A
- Acceso a Inet
Instalando Software
Se debe instalar SimpleCV con los siguientes comandos (obtenidos desde este link)
sudo apt-get install ipython python-opencv python-scipy python-numpy python-setuptools python-pip
sudo pip install https://github.com/sightmachine/SimpleCV/zipball/master
Luego creamos la carpeta images con el siguiente comando
mkdir images
Codificando en Python
A continuación mostramos algunos ejemplos sobre uso de SimpleCV. Como se indicó anteriormente estas pruebas se realizan desde la línea de comandos sin necesidad de acceder al escritorio.
Foto única. El código Python usado es el siguiente
# Author : Manuel Carrasco
#
# Site : www.iot.cl
# Date : 13/05/2013
# Adapted from Practical Computer Vision p13
#
from SimpleCV import Camera, Image
import time
cam = Camera(prop_set={"width":320, "height":240})
# Snap a Picture
img = cam.getImage()
# Save picture
img.save("images/foto.jpg")
Secuencia de fotos 1. Si se requiere obtener una secuencia de fotos podemos usar la opción de setimages de la siguiente manera
# Author : Manuel Carrasco
#
# Site : www.iot.cl
# Date : 13/05/2013
# Adapted from Practical Computer Vision p34
#
from SimpleCV import Camera,ImageSet
import time
cam = Camera(prop_set={"width":320, "height":240})
camImages = ImageSet()
#Set maximum of 3
maxImages = 3
for counter in range (maxImages):
img = cam.getImage()
camImages.append(img)
time.sleep(4)
camImages.save("images/")
Secuencia de fotos 2. Otra opción para la secuencia de fotos es hacer una iteración con un ciclo for. Agregamos la posibilidad de indicar la cantidad de fotos que se requiere.
from SimpleCV import Camera, Image
import time
cam = Camera(prop_set={"width":320, "height":240})
p = int(raw_input("Ingrese numero de fotos: "))
for x in range(1, p+1):
# Snap a Picture
img = cam.getImage()
time.sleep(4)
# Save picture
img.save("images/ftest" + str(x) + ".jpg")
Pruebas varias.Hay muchas cosas que se pueden hacer con SimpleCV y aquí solo mostramos un ejemplo más
from SimpleCV import Image
import time
img = Image('lenna')
binlena = img.binarize()
binlena.save("images/binlena.jpg")
time.sleep(3)
edgelena = img.edges()
edgelena.save("images/edgelena.jpg")
Al revisar las imagenes obtenidas vemos lo siguiente
Bibliografía
Practical computer vision using SimpleCV
Uso de SimpleCV en RPi
Hola! Muy interesante tu tutorial! Apenas estoy haciendo mis primeros pasos con SimpleCV y la Raspberry Pi. Se puede hacer un programa que no se ejecute línea por línea? Me refiero a que, sí se puede crear un programa en simpleCV que tome varias fotos y que cada una de ellas, las procese, una por una y analice algunas cosas? Que se termine sólo cuando el usuario se lo indique o hasta cierto tiempo? Espero me puedas resolver esta duda
Hola Oscar:
Como en todo programa hay más de un modo para hacer lo que dices. Por ejemplo
1) realizar el procesamiento e incluir timer con sleep(t segundos) todo esto desde un ciclo for, para tener una cantidad conocida de ciclos que realizar.
2) Agregar funciones que implementen lo que necesitas y realizas las acciones tras cada llamada a la función.
Si quieres detalles sobre que es posible (y que no) te recomiendo el libro «Practical Computer Vision with SimpleCV» disponible en Amazon como e-book y físico.
Saludos
Manuel Carrasco
Co-founder
http://www.iot.cl
hola amigo muy buen post. Estamos realizando un proyecto escolar en el cual usamos una raspberry pi y una cámara web y lo que necesitamos es que la cámara reconozca objetos de color rojo, somos nuevos en esto y te agradeceríamos un poco de ayuda. Gracias