CCTV con Raspberry Pi y Detección de Movimiento
CCTV con Raspberry Pi y Detección de Movimiento
SEDE GUAYAQUIL
‘‘INGENIERO ELECTRÓNICO’’
TEMA:
AUTOR:
TUTOR:
_________________________
C.I: 0802293829
ii
Documento Derechos de Autor
En concordancia, suscribo este documento en el momento que haga entrega del trabajo
final en formato impreso y digital a la biblioteca de la Universidad Politécnica Salesiana.
_______________________
C.I: 0802293829
iii
Certificado de Dirección del Trabajo de Titulación
Yo, Ing. Teddy Jhennse Negrete Peña, que bajo mi dirección y asesoría fue desarrollado
el proyecto de titulación: ‘‘Diseño e implementación de un sistema de circuito cerrado de
televisión con detección de movimiento, supervisión remota con aplicación android
alertas vía email y sms de bajo costo aplicando el sistema Raspberry Pi para el laboratorio
de computación de la Unidad Educativa Ramón Bedoya Navia’’, para la obtención del título
de Ingeniero Electrónico.
Por medio de la presente certifico que el documento cumple con los requisitos
establecidos en el instructivo para la estructura y desarrollo de Trabajos de Titulación para
pregrado de la Universidad Politécnica Salesiana.
__________________________
C.I: 0912419611
iv
Dedicatoria
v
Agradecimiento
Quiero agradecer a la Unidad Educativa Ramón Bedoya Navia por haber permito el
desarrollo de este proyecto de titulación en sus instalaciones, y así contribuir al desarrollo de la
misma como ex alumna de la antigua escuela Patria Nueva la cual funcionaba allí y servir a
beneficio del plantel.
vi
Resumen
This project consists of the implementation of a closed television system that allows
detecting movement through video cameras and captures and video frames during detected
movement events.
Raspberry Pi free hardware computers have been used for development due to their high
computing capacity and low cost compared to other development modules. In addition, for its
versatility in terms of programming in low-level languages.
For the development of the detection algorithm, the model based on background
subtraction was implemented, which consists of making the difference between a base
photograph and an analysis photograph to know if there is variation in the site, giving rise to a
movement alert. The movement alerts are made through email and to avoid the triggering and
continuous sending of alerts, a web interface has been added in which you can configure the
times in which the alert is sent. The photographs and video frames captured are stored in a central
server for later viewing by the user through an Android application for system supervision.
viii
ÍNDICE GENERAL
DEDICATORIA ........................................................................................................................................ V
AGRADECIMIENTO ............................................................................................................................... VI
1 INTRODUCCIÓN................................................................................................................................... 2
ix
2.1 CIRCUITO CERRADO DE TELEVISIÓN.......................................................................................................... 9
x
3 MARCO METODOLÓGICO .................................................................................................................. 26
xi
4.4.4 ALARMA ......................................................................................................................................... 82
CONCLUSIONES ................................................................................................................................... 86
RECOMENDACIONES ........................................................................................................................... 87
REFERENCIAS BIBLIOGRÁFICAS............................................................................................................. 89
5 ANEXOS ........................................................................................................................................... 91
xii
Índice de Figuras
xiv
Figura 49 Diagrama electrónico .....................................................................................56
Figura 58 a) Filtro de grises imagen 58a, b) Filtro de grises imagen 58b y c) Filtro de grises
imagen 58c ...............................................................................................................................68
xv
Figura 71. Almacenamiento de tramas de video de eventos de movimiento ..................79
xvi
1 Introducción.
2
El actual proyecto de titulación consta de 4 capítulos:
3
1.1 Descripción del Problema
Esto hace que el predio al no contar con las seguridades adecuadas pueda ser víctima
de delincuentes, ante esta situación de vulnerabilidad resulta imprescindible la implementación
de un sistema de vídeo vigilancia que cubra todas áreas de el mismo.
1.2 Antecedentes
En el año 2016 uno de los departamentos ubicado en el Condominio Salmón fue irrumpido, donde
malhechores sustrajeron dentro del inmueble bienes de valor para los residentes, a esto se suma
la falta de seguridad del sector y el crecimiento delincuencial de Guayaquil, teniendo las cifras
más altas de delitos en el país según un informe de la Policía Nacional del Ecuador en el año
2019, por esta razón la vivienda que se sitúa en la tercer planta del edificio se encuentra
desprotegida ante algún acto delictivo.
1.3 Importancia
El tema seguridad es uno de los más importantes a nivel mundial, el tener instalado un sistema
de circuito cerrado de televisión en una edificación ya sea un hospital, universidad, colegio, casa,
4
centro comercial, áreas públicas proporciona un estado de seguridad a las personas que se
encuentran en su entorno ya sean trabajadores, visitantes, etc.
El uso los sistemas de circuito cerrado de televisión con detección de movimiento y supervisión
remota es una de las tendencias de vanguardia que utilizan hoy en día la mayoría de sitios
mencionados.
Este sistema es un gran impedimento para la delincuencia ya que estos al percatarse de las
cámaras instaladas se retiraran del lugar inmediatamente, una de las grandes ventajas de este
proyecto es el monitoreo remoto que tiene la vivienda, donde está la implementación del
proyecto, dado que los beneficiarios pueden acceder de forma remota desde su celular por
medio de una aplicación Android, desde cualquier ubicación en tiempo real a las imágenes del
sitio y adicional reciben alertas vía sms y email, en el celular que se encuentra configurado con
el sistema, en el momento que se detecte movimiento en el sitio monitoreado.
1.4 Alcance
Se debe mencionar que este proyecto de titulación tendría como beneficiario a la Unidad
Educativa Ramón Bedoya Navia, ubicada en la cuidad de Esmeraldas, por la crisis del COVID19
que ha afectado a nivel mundial a la población y ha cobrado un sin número de vidas humanas,
desde el mes de marzo del 2020 a la fecha presente abril del 2021, el COE nacional de Ecuador
estableció un confinamiento a la ciudadanía siendo este desde marzo 2020 a mayo 2020, con un
sin número de restricciones en cuestión de movilidad entre ciudades, cada cantón maneja su
propio COE cantonal, adicional suspendió las clases de forma presencial en todo el territorio
nacional, viéndose así afectado la implementación de este proyecto, debido a que las escuelas
públicas y colegios se mantienen cerrados en la actualidad abril 2021, por lo expuesto el consejo
de carrera de ingeniería electrónica de esta Universidad aprobó la modificación del sitio de la
implementación en el domicilio del estudiante y el proyecto se lleve a cabo de una manera
satisfactoria, esperando la compresión de los lectores.
5
alerta, es decir, se tomarán dos fotos consecutivas y se analizará la diferencia entre las mismas,
estas diferencias serán encontradas con un algoritmo de visión artificial lo que permitirá detectar el
movimiento de un objeto.
En el momento que se determine que hubo movimiento de un objeto en las fotos fuera de los
horarios permitidos, es decir, cuando se supone que no debería haber nadie en las instalaciones
se enviarán alertas vía email y SMS a los usuarios previamente definidos.
El beneficiario de este proyecto son los residentes de una vivienda ubicada en la tercera planta
del condominio Salmón en el centro de la ciudad de Guayaquil, donde se implementa tres
cámaras para el circuito cerrado de televisión, el cual cubre todos los ángulos de visión en los
escenarios a monitorear.
1.5 Delimitación
1.5.1 Espacial.
El actual proyecto se realiza en una vivienda en la tercera plata del condominio Salmón,
en La dirección Esmeraldas 400 entre Padre Vicente Solano y Luis Vernaza Lazarte, Barrio
Orellana, sector centro de la ciudad de Guayaquil.
6
Figura 2 Ubicación geográfica de la vivienda (Google, 2020).
1.5.2 Temporal
El presente proyecto se llevará a cabo desde abril 2019 hasta abril del 2021.
1.5.3 Institucional
1.6 Justificación
En vista de los altos índices de delincuencia en la actualidad que se pueden observar en la ciudad
de Guayaquil, resulta imprescindible tomar todas las medidas de seguridad necesarias para
proteger la integridad física de las personas que habitan en el hogar y del mismo modo los activos
que se encuentran en él, sobre todo en zonas que tienen vulnerabilidad.
7
La vivienda en el condominio Salmón no cuenta con los recursos para la implementación
de un sistema de circuito cerrado de video vigilancia, siendo este indispensable para la seguridad
en las instalaciones del hogar.
Los activos en este inmueble tienen un costo elevado, y la seguridad física de quienes lo
habitan es una prioridad que hay que resguardar, debido a que el edificio anteriormente ha sufrido
actos delincuenciales es importante que cuente con un sistema de circuito cerrado de video
vigilancia.
1.7 Objetivos
Desarrollar un circuito cerrado de televisión con envío de alertas vía email, sms y
supervisión remota a través de una aplicación Android en una vivienda por detección de
movimiento mediante el sistema Raspberry Pi.
8
2 Fundamentación Teórica
2.1.1 Definición.
Las siglas CCTV traducidas al español quieren decir circuito cerrado de televisión, el cual
está diseñado para supervisar, vigilar distintos tipos de ambientes y actividades, como protección
de personas, activos y sistemas, el cual permite visualizar de forma remota el área vigilada, la
transmisión en vivo se puede ver desde cualquier navegador web, incluso desde el móvil en
tiempo real, se denomina circuito cerrado porque a diferencia de la televisión abierta la señal no
se transmite abiertamente ya que permite un acceso limitado y restringido de las imágenes a
otros usuarios, se ha convertido en un dispositivo indispensable y un multiplicador de la fuerza
de seguridad común en la sociedad ya sea en un supermercado, hospital, hoteles, residencia,
etc.
9
2.1.2 Circuito cerrado de Televisión Analógico.
• Cámara: Las cámaras son el ojo del sistema y es un componente esencial, su única
función es proporcionar una vista del sitio bajo vigilancia mediante el envío de una
señal electrónica a través de un cable de video, la selección efectiva de la cámara
requiere un conocimiento detallado de la cámara, aplicación, arquitectura de soporte y
entorno host.
• Lentes: La lente de una cámara CCTV es el primer elemento en la cadena de imagen,
que consiste en la lente, cámara, sistema de transmisión, software de gestión y análisis
10
de imágenes, y monitor. La lente enfoca la luz o la energía IR en el sensor de
imágenes. La función de una lente es entregar una imagen sin distorsión, precisa,
uniformemente enfocada al sensor de imágenes.
• Viviendas y monturas: Parte del diseño e instalación de un sistema de CCTV incluye
la selección de la cámara viviendas y soportes. La selección de la carcasa del CCTV
y los accesorios de montaje están directamente relacionados con los requisitos
operativos del sistema, que se desarrollan durante las fases de diseño y adquisición
de un proyecto de instalación de CCTV. En cualquier aplicación, la carcasa y los
accesorios de montaje son seleccionado sobre la base de varios criterios: como es el
caso de las condiciones ambientales, que incluyen temperaturas de operación y clima,
de igual forma la humedad y corrosión; no hay que olvidar las consideraciones
arquitectónicas, que son importantes para la estética del hardware y puede afectar el
diseño arquitectónico o cambiar el valor de la propiedad.
• El monitor: Recibe la señal enviada por la cámara y la convierte en una imagen en
una pantalla de televisión. Se debe proporcionar al menos un monitor en cada estación
de visualización en el sistema de CCTV para poder ver la vista proporcionada por la
(s) cámara (s)
• Conmutadores y multiplexores: En los sistemas de CCTV que tienen más cámaras
que monitores y dispositivos de grabación, se utilizan conmutadores y multiplexores
par el enrutamiento de la señal de video. Los conmutadores son más simples en
concepto que los multiplexores. Se pueden configurar de forma manual o automática
para enviar video analógico o digital a un monitor o una grabadora.
• Grabadoras de video: La capacidad de grabación es esencial para la evaluación,
investigación y recolección de evidencia. La grabación de video se ha transformado de
sistemas basados en cinta a sistemas de disco duro digital. Si bien algunos sistemas
aún utilizan cinta, la popularidad del video digital ha impulsado la demanda de
grabadoras con almacenamiento en disco duro. Los sistemas de CCTV analógicos
tradicionales en los que el video se graba en grabadoras de videocasetes (VCR) son
raros en el entorno actual y han sido controlados rápidamente por DVR y NVR en redes
IP.
Es un sistema de red de video basado en cámaras, el video es transportado sobre una red
IP a través de conmutadores de red y se registra en un servidor de PC con el software de gestión
11
de video instalado, el sistema es completamente digital, pues no se utilizan componentes
analógicos.
Características:
• Las cámaras IP se pueden mover a cualquier lugar de una red IP (incluso inalámbrica).
• Las cámaras IP pueden funcionar en una red inalámbrica PoE 1 , las cámaras IP
modernas tienen la capacidad de funcionar sin una fuente de alimentación adicional
así mismo pueden trabajar con el protocolo PoE que proporciona energía a través del
cable Ethernet.
• Cifrado y autenticación: las cámaras IP ofrecen transmisión segura de datos a través
de métodos de cifrado y autenticación como WPA, WPA2, TKIP, AES.
• Se pueden configurar cámaras de red y los servidores de video y acceder a ellos de
forma remota, lo que permite a diferentes usuarios autorizados a visualizar video en
vivo y grabado en cualquier momento y desde prácticamente cualquier ubicación en
red del mundo. En un sistema CCTV analógico tradicional, los usuarios necesitarían
encontrarse en un centro de control para ver y gestionar video, y el acceso al video
1 Quiere decir Alimentación a través de Ethernet, es una tecnología que permite que los cables de red
2.2 Raspberry Pi
Estas son varias de las aplicaciones de Raspberry Pi: en la protección del hogar, centro
de medios, aplicaciones de domótica, estación meteorológica, controlador de robots, rastreador
de robots, controlador de cámaras web, controlador de motor eléctrico, controlador de juego.
2.3 Raspberry Pi 3 B+
Este modelo Raspberry Pi salió al mercado en el año 2018 en el mes de marzo, compitiendo
con sus antecesores es el último de los Pi 3, tiene un costo de $35 dólares.
14
Figura 7 Modelo Raspberry Pi 3 B+
3 Es un circuito integrado que contiene todos los circuitos y componentes necesarios de un sistema
electrónico en un solo chip.
15
2.3.1 Hardware.
Este pequeño ordenador tiene las siguientes dimensiones en la de 8.5 por 5.3 cm, posee
un chip integrado de Broadcom BCM2837, con un procesador ARM 53, puerto HDMI, puerto
ethernet, puerto usb, ranura para micro SD, conectores de audio.
2.3.3 CPU
El CPU de este modelo contiene ARM Cortex-A53 de cuatro núcleos y 64 bits, los cuatro
núcleos permiten que el procesador Cortex A53 realice actividades computacionales, de gestión
de datos y de procesamiento de entrada / salida de manera rápida y eficiente. El procesador
ARMv8 funciona a 1.4 GHz y a un bajo voltaje (3.3VDC).
16
2.3.4 Almacenamiento
A diferencia de sus antecesores como los primeros modelos Pi 1 se inició con una
memoria RAM de 256 Mb, posterior a esto el Pi 1 B aumento su RAM a 512 MB, debido al
incremento de los componentes la Fundación Raspberry Pi diseño sus nuevos modelos Pi y Pi 3
con 1 GB de RAM, para aumentar la gestión de datos.
2.3.5 GPIO
17
2.3.6 Puerto HDMI
El Raspberry Pi 3 B + proporciona cuatro puertos USB 2.0. Esos cuatro puertos son
compatibles con un concentrador combinado LAN9514 y un circuito integrado (IC) de controlador
Ethernet. El USB IC es fabricado por Microchip. El USB es compatible con el host On-The-Go
(OTG), lo que permite que el SBC alimente otros dispositivos y aplicaciones de Universal Serial Bus.
Los requisitos de fuente de salida para cada puerto USB son + 5V a 500mA.
2.3.8 Sofware.
La tarjeta Raspberry Pi es adquirida sin Sistema Operativo; el S.O. se debe cargar e instalar
en una tarjeta Micro SD, esta es introducida en uno de sus puertos el dispositivo. Existen dos
18
opciones: en primera opción es descargar de la fuente oficial de Raspberry y la segunda opción es
descargar de las diferentes fuentes educativas autorizadas (Raspberry Shop, 2019).
Otra elección interesante es Noobs, una herramienta aplicativa que permite la instalación
de las varias distribuciones Linux. Noobs, no necesita tener conexión a internet mientras se está
instalando. Este aplicativo tan solo se debe cargar en la tarjeta SD, esta tarjeta debe tener un
almacenamiento de al menos 4GB. Noobs también permite instalar aplicativos como RaspBMC
y Raspbian sin inconvenientes.
2.4 Raspbian
Para el presente proyecto se utilizarán dos módulos de cámara V2 dentro del laboratorio
de cómputo que será monitorizado, este módulo de cámara tiene como principales funciones
tomar fotos o videos de alta definición, el mismo funciona con todos los modelos de Raspberry
Pi en el mercado como es el 1,2,3,4, sus principales características:
La cámara Pi NoIR es una cámara que permite realizar tomas en ambientes de poca luz,
con un lente de enfoque fijo a bordo, posee 8 megapíxeles con sensor de imagen Sony IMX219,
es capaz de imágenes estáticas de 3280 x 2464 píxeles, y asimismo admite video 1080p30,
720p60 y 640x480p60 / 90. El filtro Infrarrojo está presente en la lente de la cámara NoIR la cual
facilita la captura de imágenes en ambientes con poca luz. En este proyecto se empleará cámaras
NoIR y todas tienen compatibilidad con Raspbian.
20
Figura 13 Cámara de Raspberry Pi NoIR V2
2.6 Python
21
El intérprete de Python y la extensa biblioteca estándar están disponibles en formato
fuente o binario sin cargo para todas las plataformas principales, y se pueden distribuir
libremente. Todas las versiones de Python son de código abierto, históricamente, la mayoría,
pero no todas, las versiones de Python también han sido compatibles con GPL5 (Python Software
Foundation, 2019).
2.8 Router
Web Server traducido al español significa servidor web, el cual es un sistema que entrega
contenido o brinda servicios, manteniéndose a la espera de peticiones de ejecución de manera
adecuada a usuarios finales través del internet, este consta de un servidor físico como una
máquina, un sistema operativo de servidor y un software utilizado para facilitar la comunicación
HTTP (protocolo de transferencia de hipertextos).
2.10 Java
24
• Ofrece un gran rendimiento ya que Java admite subprocesos múltiples y concurrencia, lo
que lo convierte en un lenguaje altamente interactivo y receptivo.
• Seguro y sencillo
• Independiente de la plataforma: podemos escribir código Java en una plataforma (sistema
operativo) y ejecutarlo en otra plataforma sin ninguna modificación.
• Orientado a objetos: Java es un lenguaje orientado a objetos. Esto ayuda a que nuestro
código Java sea más flexible y reutilizable.
• Velocidad: el código Java bien optimizado es casi tan rápido como los lenguajes de nivel
inferior como C ++ y mucho más rápido que Python, PHP, etc (programiz.com, 2019).
25
3 Marco Metodológico
Las metodologías son todos los métodos, técnicas y procedimientos usados para abordar
un problema de forma ordenada y eficiente para hallar una solución adecuada al mismo.
26
Figura 18 Flujo de trabajo para el desarrollo
27
Figura 19 Flujo del proceso de detección de movimiento
Para detectar el movimiento se debe obtener el fondo estático, esto en la captura de las
tramas fotográficas.
La base de la resta de fondo es tener una imagen sobre la cual se hará la referencia para
el cálculo del algoritmo. En la figura 20 se muestra la imagen base sobre la cual se obtendrá la
matriz de referencia.
28
Figura 20 Imagen base para la resta de fondo
29
Figura 21 Captura con latencia
30
Un problema con la solución de bajar la resolución de la imagen es que se tenga menos
capacidad de identificación de rostros encado de algún evento de intromisión en el lugar. Para
solventar esto, otra solución es obtener una matriz sencilla de procesar aplicando un filtro para
escala de grises, mucho más sencillo que las matrices de una imagen a colores.
Aplicando filtro para cuantización de colores y tener una imagen bmp y reducir la complejidad
de la matriz, tal como se muestra en la figura 23.
A vista simple no resulta buena idea ya que al cuantizar los colores se lleva al extremo a
tonos oscuros, suturando los valores rgb y dejando el mismo valor para dos tonos oscuros,
aunque sean diferenciales. La figura 24 muestra las zonas vulnerables donde se pierde detección
por la saturación de las matrices al aplicar el algoritmo con el filtro de cuantización.
31
Figura 24 Zonas vulnerables con filtro de cuantización
Una solución a lo anterior es usar la escala de grises, lo más cercano a una imagen bmp
para que la función de densidad de probabilidad de los pixeles sea más simple.
Las siguientes líneas permiten tener una matriz más simple y proceder a tomar la base
de fondo, la primera imagen de la trama es tomada como constante a partir de la cual se hace la
resta de fondo y se detecta el movimiento.
32
Figura 25 Filtro de grises aplicado a la imagen de fondo.
33
Figura 26 Filtro de grises aplicado a la imagen del evento.
Las siguientes líneas realizan la diferencia usando las funciones para resta de fondo entre
la imagen actual y la anterior.
Calcular la diferencia entre dos tomas es una simple resta, en la cual tomamos el valor
absoluto diferencias de intensidad de píxeles. La figura 27 muestra el resultado de la resta.
34
Parte de la matriz en la zona de movimiento antes de la captura:
35
La diferencia en promedio de 10 puntos permite disparar la captura indicando que se ha
producido un movimiento.
36
Figura 27 Resultado de la resta con filtro de grises
37
Figura 29 Parámetros de servidor SMTP
El cuerpo del correo debe ser redactado en un archivo Python que se ejecute junto con
el programa principal, tal como en la figura 30 se configuran los parámetros de correo. Las líneas
de encabezado del emisor y remitente deben colocarse de lo contrario no se ejecuta el envío.
En el servidor de correo del destinatario debe comprobarse el envío del email cuando el
servicio es ejecutado. La figura 31 muestra el correo recibido en el destinatario enviado por el
cliente que realiza en envío desde el servidor SMTP en el Raspberry.
Para la alerta por SMS ha sido conveniente usar un módulo de comunicación GSM
compatible con microcontroladores comerciales como Arduino, ya que existen librerías que
38
permiten hacer más sencilla la implementación. El módulo usado es el SIM900 que se muestra
en la figura 32. Este módulo trabaja en cuatro bandas GSM de 850 / 900 / 1800 / 1900 Mhz, en
este Proyecto se empleó por la banda de 900 Mhz en la cual opera la telefonía celular en Ecuador.
39
La interfaz web de configuración de alarma se realiza a través de solicitudes por el puerto
80, http. La hora se extrae de la sincronización NTP de la cual disponen los raspberries.
En la figura 34 y 35 se muestra un diagrama de operación de la interfaz y la interfaz gráfica
respectivamente.
Para la exposición de los vídeos se implementa un micro servicio rest que permita
transmitir los vídeos en formato mp4, que se encargará de realizar la búsqueda de los vídeos en
el filesystem del servidor central.
Para el control del acceso a la app y creación de nuevos usuarios, se crea un micro servicio
con una conexión a la base de datos, para registrar y consultar usuarios.
41
A continuación, se muestran los rest implementados.
1. /api/buscar/{usuario}
Permite la realizar el login, por medio del nombre del usuario y contraseña establecida
al momento del registro como se muestra en la figura 37, figura 38 y figura
39.
42
Figura 38 Pantalla de inicio de sesión.
43
Figura 39 Identification de credenciales.
2. /api/listaUsuario
Este rest permite dar paso a la consulta de todos los usuarios registrados en la base
de datos del sistema y listarlos tal como se muestra en la figura 40.
44
Figura 40 Lista de usuarios
3. /api/guardar
Para la creación de nuevos usuarios se implementa el rest ahora mencionado, de ese
modo se lleva a cabo el registro de un usuario tal como en la figura 41, guardando toda la
información en la base de datos del servidor del sistema.
45
Figura 41 Creación de un usuario a través de la aplicación.
46
Figura 42 Proceso de visualización de datos en la app.
1. /video/listaCamaras
47
Figura 43 Directorio de cámaras
2. /video/listaDirCamaras/{camara}
Este rest permite realizar la consulta de los directorios internos de cada cámara y
exponerlos como se muestra en la figura 44, organizados por fechas.
48
Figura 44 Directorios de cámaras organizados por fechas.
3. /video/listaVideo/{camara}/{dir}
Permite realizar la consulta de toda la información alojada en un directorio interno de
la cámara.
49
todo lo alojan en el servidor local, al que accede el cliente desde la aplicación móvil descrita
en la sección anterior.
En este proyecto se pretende implementar el concepto de nube personal, es por eso que
no se ha dispuesto del uso de nubes que pertenecen a los servicios conocidos como Google
drive, OneDrive, Dropbox, etc. Aunque existen muchas opciones similares se ha querido
aprovechar la arquitectura descrita en el capítulo anterior para realizar una nube personal y
entender el concepto de esta. El almacenamiento en la nube nos permite tener respaldo de
archivos y compartir los mismos en un espacio físico al que podemos acceder a través de la red,
eso es lo que se hace en GDrive y sus similares. Entonces para la nube personal de este sistema
se ha implementado un sistema que gestiona permisos y accesos por red para compartir archivos
desde un computador hacia otro a través de la red. Se ha usado el sistema SAMBA. Samba
permite compartir los archivos tal como se ha descrito anteriormente. En la figura 46 se muestra
un diagrama de flujo del proceso de respaldo de las imágenes y videos en el computador central
que a su vez gestiona los archivos para visualización desde la App móvil.
50
Figura 46. Diagrama de flujo Sistema Nube personal
El sistema arranca y a su vez con los procesos descritos en los apartados 3.7, 3.8 y 3.9
se ejecutan los programas de copia de archivos, los permisos de acceso con los que se arma la
nube personal. Todos los archivos de las cámaras se almacenan en el disco duro de la
computadora que actúa de servidor central.
51
carcasa de las cámaras. En el siguiente capítulo se muestra la implementación final de la
carcasa.
Una vez confirmado la disponibilidad se procede a situar los elementos de la red circuito
cerrado (servidor, cámara 1, cámara 2 y cámara 3) dentro del departamento, asegurando la
cobertura de total del departamento, minimizando los puntos ciegos.
52
3.13 DIAGRAMA ELECTRÓNICO
53
comunicación entre ellos y el servidor central se realiza a través de la red inalámbrica wifi, como
se muestra en la figura 45 que expone la arquitectura del sistema.
4 IMPLEMENTACIÓN Y ANÁLISIS
4.1 INSPECCIÓN
Para la ubicación de las cámaras es necesario elegir puntos en los cuales la visión de la
cámara tenga buena cobertura. En las figuras 50a, 50b y 50c se muestran los puntos en los
cuales se ha considerado idóneo instalar las cámaras. Para la operación del sistema es necesario
suministrar de energía y cobertura de red de datos a los módulos de las cámaras de vigilancia.
En los puntos mostrados en las figuras 50a, 50b y 50c se han encontrado: buen ángulo de visión
para las cámaras y buena intensidad de señal wifi. La buena intensidad de señal wifi nos permite
economizar en el despliegue de una red ethernet para la cobertura. Sin embargo, por la falta de
un punto eléctrico en los sitios en mención ha sido necesario instalar un punto de tomacorriente
de 120 voltios para suministrar de energía eléctrica a cada parte del sistema cctv. En la figura 51
se muestra la medición de intensidad de señal wifi, usando un aplicativo móvil para escanear
redes wifi.
54
a)
b)
55
c)
Las figuras 52a, 52b y 52c muestran el despliegue de la instalación eléctrica hasta donde es
necesario energizar los puntos para energizar las cámaras.
56
a) b)
c)
Para la instalación de las cámaras del sistema se ha configurado el DHCP para evitar
problemas de conexión en caso de reconfiguración del router en el rango de las direcciones IP.
57
Esto para tener independencia de eventos de mantenimiento de la red wifi, situación que originó
un problema al perder conexión por usar una dirección IP que luego de la configuración del router
quedó fuera del rango establecido en el equipo router En las figuras 53a, 53b, 53c, 53d y 53e se
muestra el proceso de instalación y configuración de cámaras en los sitios mostrados en la
sección anterior.
a) b)
58
c)
d)
59
e)
El ángulo de visión de cada una de las cámaras desde el punto de instalación son los que
se muestran en las figuras siguientes. Punto de instalación de cámara 1 en la figura 54a y ángulo
de visión en la figura 54b. Punto de instalación de cámara 2 en la figura 55a y ángulo de visión
en la figura 55b. Punto de instalación de cámara 3 en la figura 56a y ángulo de visión en la figura
56b.
60
a) b)
a) b)
a) b)
61
4.4.2 DETECCIÓN DE EVENTOS DE MOVIMIENTO
Una vez implementado el sistema cctv, se procede a visualizar los resultados obtenidos.
En las figuras 57a, 57b y 57c se muestra una imagen capturada y almacenada luego de un evento
de detección de movimiento en la cámara 1, se muestra el evento que causó la detección y la
imagen previa capturada por la cámara con la que se contrasta según el algoritmo desarrollado
y expuesto en el capitulo anterior.
a)
62
b)
c)
En las figuras 58a, 58b y 58c se muestra el filtro de grises aplicado a las imágenes durante
el evento. Según el algoritmo, el filtro es aplicado para obtener la matriz equivalente de la imagen,
en lugar de una matriz RGB que haría más complejo el proceso. Con las matrices equivalentes
63
de estas imágenes se puede hacer el proceso de resta de fondo, base del algoritmo
implementado, de este modo con el resultado de la resta de fondo se puede inferir el evento.
a)
b)
64
c)
Figura 58 a) Filtro de grises imagen 58a, b) Filtro de grises imagen 58b y c) Filtro de grises imagen 58c
En las figuras 59a, 59b y 59c se muestra el filtro de cuantización aplicado a el evento para
guía y contraste con el proceso de resta de fondo. Se observan la sección donde el evento se
detecta.
a)
65
b)
c)
66
Figura 60 Sección de imagen que dispara la detección evento 1
En las figuras 62a y 62b; 63a y 63b; 64a y 64b y 65 se muestran las imágenes capturadas
por la cámara 2 en los procesos detección, filtrado de grises, filtrado de cuantización y sección de
imagen que dispara el evento, respectivamente. Siguiendo el proceso de detección descrito para la
cámara 1 se tiene:
67
a) Imagen de fondo
b) Evento detectado
En las figuras 63a y 63b se muestra la aplicación del filtro de grises a las imágenes que
fueron usadas por el algoritmo.
68
a) Imagen de fondo
b) Evento detectado
En las figuras 64a y 64 b se muestra la aplicación del filtro de cuantización a las imágenes
procesadas por la cámara 2 para el evento de detección.
69
a) Imagen de fondo
b) Evento detectado
70
Figura 65 Sección de imagen que dispara la detección, cámara 2
En las figuras 66a y 66b; 67a y 67b; 68a y 68b y 69 se muestran las imágenes capturadas
por la cámara 3 en los procesos detección, filtrado de grises, filtrado de cuantización y sección
de imagen que dispara el evento, respectivamente. Siguiendo el proceso de detección descrito
para la cámara 1 se tiene:
71
b) evento detectado
a) Imagen de fondo
72
b) Evento detectado
a) Imagen de fondo
73
b) Evento detectado
74
4.4.2 ALMACENAMIENTO DE DATOS
75
Figura 71. Almacenamiento de tramas de video de eventos de movimiento
76
Figura 72. Pantalla Inicio sesión aplicación móvil
77
a) b)
c) d)
78
4.4.4 ALARMA
79
En la figura 75 se muestra el flujo del programa, desde la línea de comandos, luego de
una detección y un mensaje de consola donde se indica que la rutina del servicio smtp para
envío de correo electrónico por alerta ha sido realizada con éxito.
La alerta por SMS se muestra en la figura 77, y la alerta por mail se puede visualizar en las
figuras 76a y 76b, donde se muestra el título del mensaje y el contenido del mismo.
80
Figura 76. a) Envío de alerta, b) Contenido del mensaje
81
Figura 77. Alerta por SMS
CONCLUSIONES
Se implementó una interfaz web que actualiza la hora de disparo de alerta mediante
actualizaciones por solicitudes http que recibe.
Para hallar coincidencia en las alertas de las alarmas ha sido necesario incluir un
programa que constantemente escuche las solicitudes http para actualizar el horario de disparo
de alarma y sincronice con el servidor NTP la hora local.
Para este Sistema donde solo se requiere enviar es suficiente el empleo del protocolo
SMTP, que permite enviar correos de forma simple en una sola vía, no ha sido necesario
desarrollar un subproceso que reciba alguna instrucción por correo electrónico.
RECOMENDACIONES
Mejorar el algoritmo para realizar seguimiento de movimiento, lo que permitiría tener mejor
resguardo en el sistema cctv.
Mejorar el sistema para que permita validad el movimiento relativo y así poder colocar las
cámaras en movimiento y detectar movimiento de terceros objetos.
Usar módulo RTC en casos donde el sistema no tendría cobertura a internet impidiendo que
se sincronice la hora mediante el protocolo NTP.
83
Mejorar la carcasa de modo que se pueda implementar una carcasa de protección IP65 para
exteriores ya que el sistema actual es para interiores.
84
Implementación de un sistema de video vigilancia remota para hogares, utilizando
herramientas de software libre, autores: Bryam Genaro Abril Sarmiento y Patricio Xavier Cuzco
Arévalo.
REFERENCIAS BIBLIOGRÁFICAS
D-Link Corporation. (1 de Julio de 2019). Wireless AC750 Dual Band Router. Obtenido de D-Link
: https://www.dlink.com/en/products/dir-819-wireless-ac750-dual-band-router
(2018). https://hackr.io/blog/what-is-java.
Mata, F. J. (2010). VIDEOVIGILANCIA: CCTV USANDO VIDEOS IP. España: Vértice. Recuperado
el 7 de Agosto de 2019
Python Software Foundation. (26 de 6 de 2019). What is Python? Executive Summary. Obtenido de
Python: https://www.python.org/doc/essays/blurb/
85
https://www.raspbian.org
Sayeed, A. (2 de Enero de 2018). Web Server Configuration in Linux with Apache, MariaDB and
PHP. Obtenido de System Zone: https://systemzone.net/web-server-configuration-inlinux-
with-apache-mariadb-and-php/
86
5 ANEXOS
5.1 PRESUPUESTO
Subtotal $ 1,738.10
87
5.2 CRONOGRAMA
17 18 19 20 21 a 24
Actividad 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Adquisición
de los
equipos
Diseño del
circuito de
CC-TV
Diseño e
implementa
ción del
sistema de
seguridad
Instalación
del sistema
Diseño y
configuraci
ón del
sistema
Pruebas de
reconocimi
ento de
imágenes
Prueba final
del sistema
DETECCIÓN:
88
from imutils.video import VideoStream
import argparse import datetime
import imutils
import time import
cv2
else:
vs = cv2.CapturaVideo(args["video"])
primera_trama = None
while
True:
# text
trame_f = vs.read() trame_f = trame_f if args.get("video", None) is
None else trame_f[1] text = "no cipiado"
if trame_f is None:
break
if primera_trama is None:
89
primera_trama = gray
continue
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(trame_f, (x, y), (x + w, y + h), (0, 255, 0), 2)
text = "Occupied"
PROGRAMA DE ALERTA:
correo_origen='[email protected]' contrasena='Hpina2020'
correo_destino='[email protected]'
print("mail enviado")
server.quit()
WiFiServer server(80);
91
// Variable to store the HTTP request
String header;
92
// Assign output variables to GPIO pins
const int output26 = 26; const int
output27 = 27; int dia=2; int hora=20;
int minuto=15; int segundos=0;
void setup() {
Serial.begin(115200); timer =
timerBegin(0, 80, true);
void loop(){
97
(header.indexOf("GET /21/ma/off") >= 0) { h21 = '0'; } else if
(header.indexOf("GET /22/ma/on") >= 0) { h22 = '1'; } else if
(header.indexOf("GET /22/ma/off") >= 0) { h22 = '0'; } else if
(header.indexOf("GET /23/ma/on") >= 0) { h23 = '1'; } else if
(header.indexOf("GET /23/ma/off") >= 0) { h23 = '0'; }
//CONFIGURACION DE DÍAS
//LUNES
// Display current state, and ON/OFF buttons for GPIO 26
// client.println("<body><h2>DIAS</h2>");
98
client.println("<body><h2>_________________________________</h2>");
99
if '0') "><button class=\"button\ "><button class=\"button button2
"><button "><button
(d1== {client.println("<a href=\"/01/d/on\
">MARTES</button></a>");} else {client.println("<a href=\"/01/d/off\
\">MARTES</button></a>");}
if (d2== '0') {client.println("<a href=\"/02/d/on\
class=\"button\">MIERCOLES</button></a>");} else {client.println("<a href=\"/02/d/off\
class=\"button button2\">MIERCOLES</button></a>");} if (d3== '0')
{client.println("<a href=\"/03/d/on\"><button
class=\"button\">JUEVES</button></a>");} else {client.println("<a href=\"/03/d/off\"><button
class=\"button button2\">JUEVES</button></a>");} if (d4== '0')
{client.println("<a href=\"/04/d/on\"><button
class=\"button\">VIERNES</button></a>");} else {client.println("<a href=\"/04/da/off\"><button
class=\"button button2\">VIERNES</button></a>");}
if (d5== '0') {client.println("<a href=\"/05/d/on\"><button
class=\"button\">SABADO</button></a>");} else {client.println("<a href=\"/05/d/off\"><button
class=\"button button2\">SABADO</button></a>");} if (d6== '0')
{client.println("<a href=\"/06/d/on\"><button
class=\"button\">DOMINGO</button></a>");} else {client.println("<a href=\"/06/d/off\"><button
class=\"button button2\">DOMINGO</button></a>");}
client.println("<p></p>");
//h
// Display current state, and ON/OFF buttons for GPIO 27
client.println("<body><h2>____________________________________________________</h2
>");
//client.println("<p>h - State " + h00 + "</p>");
// If the h00 is off, it displays the ON button
if (h00=='0') {client.println("<a href=\"/00/ma/on\"><button
class=\"button\">00:00</button></a>");} else {client.println("<ahref=\"/00/ma/off\"><button
class=\"button button2\">00:00</button></a>");}
if (h01== '0') {client.println("<a href=\"/01/ma/on\"><button
class=\"button\">01:00</button></a>");} else {client.println("<ahref=\"/01/ma/off\"><button
class=\"button button2\">01:00</button></a>");}
if (h02== '0') {client.println("<a href=\"/02/ma/on\"><button
class=\"button\">02:00</button></a>");} else {client.println("<ahref=\"/02/ma/off\"><button
class=\"button button2\">02:00</button></a>");}
100
if '0') "><button class=\"button\ "><button class=\"button button2
"><button "><button
if (h03== '0') {client.println("<a href=\"/03/ma/on\"><button
class=\"button\">03:00</button></a>");} else {client.println("<ahref=\"/03/ma/off\"><button
class=\"button button2\">03:00</button></a>");}
101
if '0') "><button class=\"button\ "><button class=\"button button2
"><button "><button
class=\"button\">15:00</button></a>");} else {client.println("<ahref=\"/15/ma/off\"><button
class=\"button button2\">15:00</button></a>");}
if (h16== '0') {client.println("<a href=\"/16/ma/on\"><button
class=\"button\">16:00</button></a>");} else {client.println("<ahref=\"/16/ma/off\"><button
class=\"button button2\">16:00</button></a>");}
(h17== {client.println("<a href=\"/17/ma/on\
">17:00</button></a>");} else {client.println("<a href=\"/17/ma/off\
\">17:00</button></a>");}
if (h18== '0') {client.println("<a href=\"/18/ma/on\
class=\"button\">18:00</button></a>");} else {client.println("<ahref=\"/18/ma/off\
class=\"button button2\">18:00</button></a>");}
if (h19== '0') {client.println("<a href=\"/19/ma/on\"><button
class=\"button\">19:00</button></a>");} else {client.println("<ahref=\"/19/ma/off\"><button
class=\"button button2\">19:00</button></a>");}
if (h20== '0') {client.println("<a href=\"/20/ma/on\"><button
class=\"button\">20:00</button></a>");} else {client.println("<ahref=\"/20/ma/off\"><button
class=\"button button2\">20:00</button></a>");}
if (h21== '0') {client.println("<a href=\"/21/ma/on\"><button
class=\"button\">21:00</button></a>");} else {client.println("<ahref=\"/21/ma/off\"><button
class=\"button button2\">21:00</button></a>");}
if (h22== '0') {client.println("<a href=\"/22/ma/on\"><button
class=\"button\">22:00</button></a>");} else {client.println("<ahref=\"/22/ma/off\"><button
class=\"button button2\">22:00</button></a>");}
if (h23== '0') {client.println("<a href=\"/23/ma/on\"><button
class=\"button\">23:00</button></a>");} else {client.println("<ahref=\"/23/ma/off\"><button
class=\"button button2\">23:00</button></a>");}
client.println("</body></html>");
102
if '0') "><button class=\"button\ "><button class=\"button button2
"><button "><button
// The HTTP response ends with another blank line
client.println();
// Break out of the while loop
break;
} else { // if you got a newline, then clear currentLine
currentLine = "";
}
103
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
}
}
// Clear the header variable
header = "";
// Close the connection
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
alarma();
void alarma()
{
switch (dia)
{ case 1:
if(d0=='1'){comp_hora();}
break; case 2:
if(d1=='1'){comp_hora();}
break;
104
case 3:
if(d2=='1'){comp_hora();}
break; case 4:
if(d3=='1'){comp_hora();}
break; case 5:
if(d4=='1'){comp_hora();}
break; case 6:
if(d5=='1'){comp_hora();}
break; case 7:
if(d6=='1'){comp_hora();}
break;
}
}
void comp_hora()
{
switch (hora)
{
case 0:
if(h00=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 1:
if(h01=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 2:
if(h02=='1'){digi
talWrite(19,
LOW);di
gitalWrite(4,
105
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 3:
if(h03=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 4:
if(h04=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 5:
if(h05=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 6:
if(h06=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 7:
if(h07=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 8:
if(h08=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 9:
if(h09=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 10:
if(h10=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
106
case 11:
if(h11=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 12:
if(h12=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 13:
if(h13=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 14:
if(h14=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 15:
if(h15=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 16:
if(h16=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 17:
if(h17=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 18:
if(h18=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 19:
if(h19=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
107
break;
case 20:
if(h20=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 21:
if(h21=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 22:
if(h22=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
case 23:
if(h23=='1'){digitalWrite(19, LOW);digitalWrite(4,
LOW);Serial.println("ALARMA");}else{digitalWrite(19, HIGH);digitalWrite(4, HIGH);}
break;
}
}
//CODIGO ENVIO DE ALERTA SMS void envioMensaje() //FUNCION PARA
ENVIO DE MENSAJES DE TEXTO
{
Serial2.print("AT+CMGF=1\r"); // comando AT para configurar el Serial2 en modo texto
delay(200);
Serial2.println("AT + CMGS = \"0986780896\"");//reemplzar por el número a enviar el
mensaje
delay(200);
Serial2.println("HOLA");// Reemplzar por el texto a enviar delay(200);
//Finalizamos este comando con el caracter de sustitución (→) código Ascii 26 para el
envio del SMS
Serial2.println((char)26);
delay(200);
Serial2.println();
108
}
Guía de usuario de aplicación android https://drive.google.com/drive/folders/10GpuiGn-
DkQSgWLsFdwzu5G8U8R0nVM3?usp=sharing
SSvp/view?usp=sharing
4xbt2_2NQ0scpki1CWDLw4WgBXJayG?usp=sharing
109