Programar fácil con Arduino

Programar fácil con Arduino, entiende cómo funciona el mundo.

  • Inicio
  • Blog
  • Podcast
  • ¿Quién soy?
  • Contactar
  • Acceder
Usted está aquí: Inicio / Podcast / 87. Vídeo con Raspberry Pi, crea tu sistema de vigilancia

87. Vídeo con Raspberry Pi, crea tu sistema de vigilancia

Comentarios(6)
Luis del Valle Hernández

http://api.spreaker.com/download/episode/8966066/podcast87.mp3

Podcast: Descargar (32.9MB)

Vídeo con Raspberry Pi

En el capítulo de hoy te voy a hablar de cómo podemos capturar el vídeo con Raspberry Pi, para crear nuestro propio sistema de vigilancia. Pero este no es el único proyecto que podemos crear. En el momento que conectamos una cámara a la Raspberry Pi, se nos abre un mundo de oportunidades. Si lo combinamos junto a la Visión Artificial, sacaremos el máximo provecho y rendimiento.

Ya te he hablado en otras ocasiones sobre la Visión Artificial, te dejo a continuación todos los artículos y capítulos del podcast.

  • 18. Realidad Aumentada
  • 67. Big data y visión artificial
  • 81. Visión artificial, OpenCV y Python
  • 86. Sensor Kinect, inteligencia artificial al alcance de todos
  • ¿Por qué aprender visión artificial?
  • Detección de movimiento con OpenCV y Python

No voy a hacer más hincapié en las ventajas y beneficios que nos ofrece esta ciencia. Hoy vamos a ver un caso práctico donde analizamos un vídeo con Raspberry Pi.

Empezaremos por el principio, veremos que es lo que necesitamos para empezar y el coste que supone. Luego continuaremos con la configuración del hardware, Raspberry Pi y cámara. Por último te daré lo básico para empezar. El primer algoritmo que debemos implementar para detectar movimiento con Raspberry Pi, OpenCV y Python.

CURSO GRATIS

Introducción a la Visión Artificial con OpenCV y Python

Apúntate y empieza ahora mismo con el curso.

Vídeo con Raspberry Pi

Raspberry Pi es un ordenador de propósito general de muy bajo coste. Lo que más me gusta de él es su bajo consumo, podemos tenerlo conectado todo el día. Para que te quede más claro, la Raspberry Pi 2 y 3 consumen unos 4 W/hora. Una torre puede consumir hasta 100 veces más pero pongamos que consume 200W/hora, 50 veces más. Imagínate lo que te puedes ahorrar si lo tienes todo el día encendido. Por este motivo, este dispositivo puede ser un gran aliado en nuestras instalaciones y proyectos.

Dentro de los posibles usos dentro del análisis de vídeo con Raspberry Pi encontramos algunos como los siguientes:

  • Espejo inteligente con reconocimiento facial.
  • Detector de presencia con grabación de vídeo.
  • Usos posibles con Kinect
  • Visión artificial dentro de la robótica

Material necesario

Vamos a ver ahora que material vamos a necesitar:

  • Raspberry Pi 2 Model B (41,31 €)
  • Tarjeta Micro SD 16GB (7,49€)
  • Cable alimentación Raspberry Pi 5V 2A (6,99€)
  • Cable HDMI (2€)
  • Ratón y teclado USB (18€) o inalámbrico (18,75€)
  • Cámara de Raspberry Pi 5 MP y 1080p (22,62€)

No es necesario comprar todo el material. Seguramente tengas una tarjeta Mirco SD, o un teclado y ratón. También puedes utilizar un cargador de móvil para alimentar la Raspberry Pi pero ojo, este debe suministrar 5V y 2A.

Una vez que ya tengas todo el material pasamos a hacer la instalación básica.

Instalación básica de Raspberry Pi

Hay multitud de tutoriales en Internet muy buenos. Te recomiendo que veas este tutorial de Gabriel Viso de Pitando. La versión que yo utilizo es Raspbian Jessie y con la que seguiré en este capítulo.

Una vez que lo tengamos todo instalado, es importante seguir los siguientes pasos para instalar Python + OpenCV. Empezaremos por Python y todos los paquetes necesarios orientados a la programación científica con este lenguaje de programación.

Actualizar paquetes

Lo primero que debemos hacer es actualizar el sistema y los paquetes que tenemos instalados en la Raspberry Pi. Primero abre una línea de comandos y ejecuta lo siguiente.

1
sudo apt-get update

Cuando haya terminado ejecuta este otro, aplicará las actualizaciones que se han descargado.

1
sudo apt-get upgrade

Ten paciencia, puede tardar un poco. Es importante siempre trabajar con las últimas versiones del software. Así estaremos seguros de que se han corregido bugs de seguridad y demás problemas que hayan surgido.

Instalar paquetes básicos de Python

Escribir en una línea de comandos el siguiente comando.

1
sudo apt-get install build-essential python-dev python-distlib python-setuptools python-pip python-wheel libzmq-dev libgdal-dev

Esto nos instalará los siguientes paquetes:

  • build-essential
  • python-dev
  • python-distlib
  • python-setuptools
  • python-pip
  • python-wheel
  • libzmg-dev
  • libgdal-dev

Puedes comprobar que versión de Python tienes instalada escribiendo el comando python -V.

python-version

Instalar los paquetes de Python científico

Para poder trabajar con OpenCV y Python, necesitamos ciertos paquetes que nos hará la vida más fácil. Puedes leer el artículo donde explico los requerimientos de OpenCV con Python. También te aconsejo que veas el curso de Introducción a la Visión Artificial con OpenCV y Python.

1
2
sudo apt-get install python-numpy python-matplotlib python-mpltoolkits.basemap python-scipy python-sklearn python-statsmodels


Este comando instala los siguientes paquetes:

  • python-numpy
  • python-matplotlib
  • python-mpltoolkits.basemap
  • python-scipy
  • python-sklearn
  • python-statsmodels

Instalar OpenCV

Quizás una de las cosas más complicadas de esta instalación sea la de hacer combinar todo lo necesario para que OpenCV funcione correctamente. Este framework se puede instalar de diferentes maneras. Bajo mi experiencia, aconsejo la instalación con este comando.

1
sudo apt-get install libopencv-dev python-opencv

Una vez instalado ya podemos empezar a dar los primeros pasos con la visión artificial. Puedes comprobar que todo funciona correctamente escribiendo lo siguiente en una línea de comandos.

1
python

Intenta importar estas dos librerías

1
2
import cv2
import numpy as np

Debes obtener un resultado como este, sin errores.

prueba-paquetes-python-opencv

Instalación de la cámara en la Raspberry Pi

Para instalar la cámara en la Raspberry Pi, solo tienes que insertar un extremo de la cinta en la placa. Es muy sencillo. Te dejo otro tutorial de Gabriel Viso donde lo explica paso a paso.

Instalar Picamara

Vamos a necesitar un paquete para acceder a la cámara desde Python. El paquete se llama Picamara. Ejecuta esta serie de comandos.

1
sudo apt-get install python-picamera python3-picamera

Esto nos instala los paquetes necesarios. Ahora solo falta actualizar la instalación.

1
2
sudo apt-get update
sudo apt-get upgrade

Con todo esto, si hemos seguido bien los pasos, ya podemos empezar a programar con Python. Dentro de Raspberry Pi encontramos el IDE oficial que nos puede resultar de mucha ayuda.

Programación algoritmo detección de movimiento

No te voy a hablar de en que consiste este tipo de algoritmos. Ya escribí una entrada en el blog donde daba un ejemplo. Basándome en este artículo he modificado el código y lo he adaptado para ejecutar el vídeo con Raspberry Pi. El código te lo dejo a continuación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from picamera import PiCamera
import time
import cv2
 
# Inicializamos la cámara con resolución 640x480
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=(640, 480))
 
# Tiempo de espera para que la cámara arranque
time.sleep(0.5)
 
# Inicializamos el primer frame a vacío.
# Nos servirá para obtener el fondo
fondo = None
 
# Capturamos frame a frame de la cámara
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
# Obtenemos el array en formato NumPy
image = frame.array
 
# Convertimos a escala de grises
gris = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
    # Aplicamos suavizado para eliminar ruido
gris = cv2.GaussianBlur(gris, (21, 21), 0)
 
# Si todavía no hemos obtenido el fondo, lo obtenemos
# Será el primer frame que obtengamos
if fondo is None:
            fondo = gris
 
    # Calculo de la diferencia entre el fondo y el frame actual
resta = cv2.absdiff(fondo, gris)
# Aplicamos un umbral
umbral = cv2.threshold(resta, 25, 255, cv2.THRESH_BINARY)[1]
# Dilatamos el umbral para tapar agujeros
umbral = cv2.dilate(umbral, None, iterations=2)
 
    # Copiamos el umbral para detectar los contornos
contornosimg = umbral.copy()
 
# Buscamos contorno en la imagen
contornos, hierarchy = cv2.findContours(contornosimg,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
 
# Recorremos todos los contornos encontrados
for c in contornos:
# Eliminamos los contornos más pequeños
if cv2.contourArea(c) < 500:
continue
 
# Obtenemos el bounds del contorno, el rectángulo mayor que engloba al contorno
(x, y, w, h) = cv2.boundingRect(c)
# Dibujamos el rectángulo del bounds
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
 
        
# Mostramos las diferentes capturas
cv2.imshow("Imagen Movimiento", image)
cv2.imshow("Umbral", umbral)
cv2.imshow("Resta", resta)
cv2.imshow("Contornos", contornosimg)
key = cv2.waitKey(1) & 0xFF
 
# Reseteamos el archivo raw para la siguiente captura
rawCapture.truncate(0)
 
# Con la letra s salimos de la aplicación
if key == ord("s"):
break


Vídeo

Puedes ver el siguiente vídeo donde te muestro como funciona el algoritmo.

Ventajas de la detección de movimiento

Cuando estamos analizando un vídeo con Raspberry Pi, debemos ser muy óptimos en cuanto al rendimiento. No tenemos que olvidar que Raspberry Pi es lo que es, un mini ordenador. Nos permitirá abaratar costes y reducir el consumo. Pero también tendremos que optimizar nuestro código a las nuevas circunstancias. Esto implica que en el tratamiento de vídeo con Raspberry Pi, debamos utilizar técnicas como la detección de movimiento.

Esta técnica consiste en detectar los objetos en movimiento dentro de una escena. Una vez localizados podemos utilizar esa detección para centrarnos en los objetos en movimiento y desechar el resto de la imagen. Un ejemplo sería si queremos reconocer objetos. Esto se puede hacer a través de diferentes algoritmos como SIFT o SURF. El gran inconveniente que tienen es que el coste de computación es muy alto. Esto implica que casi sea imposible analizar imágenes grandes en tiempo real y además añadimos las limitaciones de Raspberry Pi.

Por lo tanto, en estos casos, cuando queremos analizar vídeo con Raspberry Pi, debemos de tirar de métodos que nos optimicen el tiempo de computación. Eso es lo que haremos con la detección de movimiento.

CURSO GRATIS

Introducción a la Visión Artificial con OpenCV y Python

Apúntate y empieza ahora mismo con el curso.

Conclusión

Aunque en ocasiones resulte más complicado crear nuestro propio software, las ventajas que esto nos aporta son innumerables. En el campo de la visión artificial, ningún algoritmo es estándar. Siempre tendremos que adaptarlo a nuestro propio proyecto y solo seremos capaces de hacerlo si nosotros mismos creamos nuestro software.

Muchas gracias a todos por los comentarios y valoraciones que haces en iVoox, iTunes y en Spreaker, me da mucho ánimo para seguir con este proyecto.

¿VAS COPIANDO Y PEGANDO CÓDIGO COMO UN POLLO SIN CABEZA?

Mini-curso de Arduino para principiantes y pollos.

Por si quieres aprender (gratis) de qué va esto de Arduino.

7 vídeos + 1 caso práctico

Explicado para que lo entienda
hasta tu abuela.

__CONFIG_colors_palette__{"active_palette":0,"config":{"colors":{"30800":{"name":"Main Accent","parent":-1},"f2bba":{"name":"Main Light 10","parent":"30800"},"trewq":{"name":"Main Light 30","parent":"30800"},"frty6":{"name":"Main Light 45","parent":"30800"},"flktr":{"name":"Main Light 80","parent":"30800"}},"gradients":[]},"palettes":[{"name":"Default","value":{"colors":{"30800":{"val":"rgb(59, 136, 253)","hsl":{"h":216,"s":0.98,"l":0.61}},"f2bba":{"val":"rgba(59, 136, 253, 0.1)","hsl_parent_dependency":{"h":216,"s":0.98,"l":0.61,"a":0.1}},"trewq":{"val":"rgba(59, 136, 253, 0.3)","hsl_parent_dependency":{"h":216,"s":0.98,"l":0.61,"a":0.3}},"frty6":{"val":"rgba(59, 136, 253, 0.45)","hsl_parent_dependency":{"h":216,"s":0.98,"l":0.61,"a":0.45}},"flktr":{"val":"rgba(59, 136, 253, 0.8)","hsl_parent_dependency":{"h":216,"s":0.98,"l":0.61,"a":0.8}}},"gradients":[]},"original":{"colors":{"30800":{"val":"rgb(59, 136, 253)","hsl":{"h":216,"s":0.98,"l":0.61}},"f2bba":{"val":"rgba(59, 136, 253, 0.1)","hsl_parent_dependency":{"h":216,"s":0.98,"l":0.61,"a":0.1}},"trewq":{"val":"rgba(59, 136, 253, 0.3)","hsl_parent_dependency":{"h":216,"s":0.98,"l":0.61,"a":0.3}},"frty6":{"val":"rgba(59, 136, 253, 0.45)","hsl_parent_dependency":{"h":216,"s":0.98,"l":0.61,"a":0.45}},"flktr":{"val":"rgba(59, 136, 253, 0.8)","hsl_parent_dependency":{"h":216,"s":0.98,"l":0.61,"a":0.8}}},"gradients":[]}}]}__CONFIG_colors_palette__

TinyGS estaciones terrestres de código abierto

Bienvenidos a un capitulo nuevo de «La tecnología para todos«. Hoy vienen al podcast Oscar, German y José Manuel, para contar sobre Tiny GS la red … [+ info...]

raspberry pi vs intel nuc

Raspberry Pi vs Intel NUC

Bienvenidos a «La tecnología para todos«. En este capitulo de la sexta temporada junto a German y José Manuel, se plantea una incógnita: ¿Qué … [+ info...]

ESP-32

ESP32 Wifi y Bluetooth en un solo chip

ESP32 es una familia de microcontroladores de la empresa Espressif Systems. Su analogía más clara es la de un ESP8266 con esteroides, que incluye … [+ info...]

Copyright © 2021 · Programar Fácil · Aviso legal

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando, consideramos que acepta su uso.Aceptar Política de privacidad y cookies
Política de cookies

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Siempre activado

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Non-necessary

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.

GUARDAR Y ACEPTAR