Gracias a una Raspberry Pi por medio del procesamiento de imágenes en efecto podemos hacer más inteligente nuestro vehículo y añadir nuevas funcionalidades, pero para ello necesitaremos los siguientes componentes:
- Raspberry Pi 3 Model B(unos 38€ en Amazon) o también Raspberry Pi Zero que cuesta algo mas barata(unos 25€ con caja en Amazon)
- Raspberry Pi Camera Module (se puede compar por unos 15€ en Amazon)
- Flex Cable for Raspberry Pi Camera or Display – 2 meters (puede comprrlo aqui en Amazon por unos 7,29€ )
- Adafruit CSI or DSI Cable Extender Thingy for Raspberry Pi (opcionalmente)
Conexión del módulo de cámara
El modulo de cámara de Pi tiene un mayor rendimiento que una cámara USB por lo que lo ideal es usar una cámara del tipo compatibles con Raspberry Pi (se puede comprar por unos 15€ en Amazon)
No es problema la distancia pues con un cable plano de 200 cm suele ser suficiente para llevar la cámara hasta la posición de conducción (puede comprarlo aqui en Amazon por unos 7,29€ )
Se puede pues llevar el cable plano al l frente del coche y luego conectado a una pantalla de táctil de 7″ de modo que la Pi y la pantalla táctil pueden ser alimentados por el adaptador USB en el coche.
Estos son los pasos para instalar la cámara especifica para su uso , con la Raspberry Pi
-
- Localice el puerto de la cámara y conecte la cámara:
- Poner en marcha la Raspberry Pi
- Abra la Herramienta de configuración de frambuesa Pi desde el menú principal:
- Asegúrese de que está activado el software de la cámara:
- Si no está activado, habilítelo y reinicie su Pi para comenzar. Asimismo si va utilizar una pantalla táctil también necesitara activar I2C y SPI
- Localice el puerto de la cámara y conecte la cámara:
Es decir resumidamente; con la Raspberry Pi apagada, debe conectar el módulo de la cámara al puerto de la cámara de la Raspberry Pi,ahora encienda el Pi y asegúrese de que se activa el software.
Añadiendo reconocimiento de imágenes
En un post anterior vimos como podemos superponer un imagen escalada a nuestro hw que nos determinara con bastante aproximación si vamos a encontrar obstáculos a la hora de introducir la marcha atrás ..¿pero se puede mejorar ?
Pues en efecto se puede ,pues podemos usar OpenCV con python lo cual permitirá analizar lo que está en la imagen y definir los parámetros para lo que se encuentre.
La idea sería tomar las imágenes y establecer un límite en la parte inferior (cerca del parachoques) para la «zona de alarma»: justo entonces al detectar cualquier objeto grande en la iamgen capturada , si la mayor parte del área de los objetos de la parte inferior entra en la «zona de alarma», entonces debería enviar un mensaje de alerta.
En los tutoriales de instalación de OpenCV se recomienda compilar desde la fuente; sin embargo, en el último año ha sido posible instalar OpenCV a través de pip, el propio administrador de paquetes de Python.
Si bien la instalación desde la fuente le dará el mayor control sobre su configuración de OpenCV, también es la más difícil y la que más tiempo consume asi que si está buscando la manera más rápida posible de instalar OpenCV en su sistema, pues lo aconsejabñe es usar pip para instalar OpenCV
Una de las desventajas de la instalación de OpenCV es que usted no tiene ningún control sobre la compilación en sí, ya que los archivos binarios están creados previamente para usted, lo que, aunque es bueno, también significa que no puede incluir optimizaciones adicionales.
Para la Raspberry Pi, estamos de suerte pues Dave Jones (creador del módulo Python picamera ) y Ben Nuttall de la piwheels.org , administran para la comunidad Raspberry Pi, un repositorio de paquetes Python que proporciona wheels ARM (es decir, paquetes de binarios precompilados) para la Raspberry Pi.
Al usar PiWheels, podemoss instalar OpenCV en cuestión de segundos, y(lo mismo se aplica a otras bibliotecas de Python que pueden tardar mucho tiempo en compilarse, incluidos NumPy, SciPy, scikit-learn, etc).
Si está utilizando Raspbian Stretch, le complacerá saber que el comando pip comprobará PiWheels en busca de un binario precompilado antes de que compruebe PyPI, permitiendo que su Pi guarde un montón de ciclos de CPU (y usted un montón de tiempor)! Si termina usando pip para instalar OpenCV en su Raspberry Pi, puedes estar seguro de que estás usando la versión optimizada.
Comencemos aprendiendo cómo instalar OpenCV en nuestra Raspberry Pi.
Instale los requisitos previos en su Raspberry Pi
La Raspberry Pi requiere que instale algunos paquetes de sistema antes de comenzar:
El administrador de paquetes de Python, «pip», se puede obtener a través de wget:
Instalar OpenCv
No se recomendaría esta opción si desea poder utilizar diferentes versiones de OpenCV en entornos aislados.. Pero muchas personas implementan su Raspberry Pis con un solo propósito / proyecto y no necesitan entornos virtuales. Dicho esto, es bastante complicado limpiarlo si cambia de opinión más tarde y quiere usar entornos virtuales, por lo que se recomienda que omita esta opción y sigas la Opción B.
Para instalar OpenCV en su sistema Raspberry Pi, asegúrese de usar sudo como este:
En cuestión de segundos, OpenCV está listo para entrar en los paquetes de sitio de Raspberry Pi junto con cualquier otro paquete que tenga instalado.
Antes de comenzar con el código, tenemos que instalar OpenCV en el Pi primero. Por suerte se puede hacer de forma muy sencilla . Para ello abrir la consola del sistema y ejecutar pip3 install opencv-python
Esto tardara unos minutos y la salida debería dar algo similar a esto:
[email protected]:~ $ pip3 install opencv-python
Collecting opencv-python
Downloading https://www.piwheels.org/simple/opencv-python/opencv_python-3.4.3.18-cp35-cp35m-linux_armv7l.whl (7.6MB)
100% |████████████████████████████████| 7.6MB 38kB/s
Collecting numpy>=1.12.1 (from opencv-python)
Downloading https://files.pythonhosted.org/packages/83/6b/d03277eacf113697675cd659086a4dcf9472108e2f1a83884c0271bdca46/numpy-1.15.3.zip (4.5MB)
100% |████████████████████████████████| 4.5MB 62kB/s
Building wheels for collected packages: numpy
Running setup.py bdist_wheel for numpy … done
Stored in directory: /home/pi/.cache/pip/wheels/2c/e4/e7/1942c96c02074ab004084d3501ae056b9beffac38749658102
Successfully built numpy
Installing collected packages: numpy, opencv-python
Successfully installed numpy-1.15.3 opencv-python-3.4.3.18
[email protected]:~ $
En los tutoriales de instalación de OpenCV se recomienda compilar desde la fuente; sin embargo, en el último año ha sido posible instalar OpenCV a través de pip, el propio administrador de paquetes de Python. Si bien la instalación desde la fuente le dará el mayor control sobre su configuración de OpenCV, también es la más difícil y la que más tiempo consume. Si está buscando la manera más rápida posible de instalar OpenCV en su sistema, querrá usar pip para instalar OpenCV, pero hay algunas cosas que pueden hacer que se tropiece en el camino, así que asegúrese de leer el resto de este post.
Script en Python
Una vez OpenCV está instalado, podemos crear un nuevo archivo de Python y empezar en el código.
En las lineas siguientes podemos ver el código completamente documentado, que se puede visitar el repositorio de github de gigafide.
import time
import cv2
import numpy as np
from picamera.array import PiRGBArray
from picamera import PiCamera
import RPi.GPIO as GPIO
buzzer = 22
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer, GPIO.OUT)
camera = PiCamera()
camera.resolution = (320, 240) #Una resolución más pequeña significa un procesamiento más rápido
camera.framerate = 24
rawCapture = PiRGBArray(camera, size=(320, 240))
kernel = np.ones((2,2),np.uint8)
time.sleep(0.1)
for still in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
GPIO.output(buzzer, False)
image = still.array
#create a detection area
widthAlert = np.size(image, 1) #obtener el ancho de la imagen
heightAlert = np.size(image, 0) #obtener la altura de la imagen
yAlert = (heightAlert/2) + 100 #determina la coordenada y del area
cv2.line(image, (0,yAlert), (widthAlert,yAlert),(0,0,255),2)
#dibujar una linea para mostrar el area
lower = [1, 0, 20]
upper = [60, 40, 200]
lower = np.array(lower, dtype="uint8")
upper = np.array(upper, dtype="uint8")
#utilizar la gama de colores para crear una mascara para la imagen y aplicarla a la imagen
mask = cv2.inRange(image, lower, upper)
output = cv2.bitwise_and(image, image, mask=mask)
dilation = cv2.dilate(mask, kernel, iterations = 3)
closing = cv2.morphologyEx(dilation, cv2.MORPH_GRADIENT, kernel)
closing = cv2.morphologyEx(dilation, cv2.MORPH_CLOSE, kernel)
edge = cv2.Canny(closing, 175, 175)
contours, hierarchy = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
threshold_area = 400
centres = []rasp
if len(contours) !=0:
for x in contours:
#encuentra el area de cada contorno
area = cv2.contourArea(x)
#encuentra el centro de cada contorno
moments = cv2.moments(x)
#elimine los contornos que son menores que nuestro umbral
if area > threshold_area:
(x,y,w,h) = cv2.boundingRect(x)
centerX = (x+x+w)/2
centerY = (y+y+h)/2
cv2.circle(image,(centerX, centerY), 7, (255, 255, 255), -1)
if ((y+h) > yAlert):
cv2.putText(image, "ALERTA!", (centerX -20, centerY -20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255),2)
GPIO.output(buzzer, True)
cv2.imshow("Display", image)
rawCapture.truncate(0)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
GPIO.output(buzzer, False)
break
Ahora este script puede ser nombrado como car_detector.py y lanzarlo desde la consola .
Ojo no basta con lanzarlo F5 desde el propio Python pues dará probablemente error a l ahora de importar al libreria cv2, pero no se preocupe situarse en la ruta del scrript en prython y ejecutar
sudo python car_detector.py
A partir desde ahí debería funcionar la detección de imágenes con lo que capte la imagen de la Raspberry Pi
En el siguiente vídeo podemos ver el script en acción
Como vemos en elvideo en pequeña escala, lo hizo bastante bien detectando un montón de objetos innecesarios, ( aunque a veces detecta las sombras como objetos.)En un escenario del mundo real, los resultados fueron sorprendentemente precisos ,pero si es cerca de las condiciones perfectas, Tenga en cuenta que el código es básico actualmente y necesitaria muchas más pruebas y depuración)
De los dos métodos,este método , pero el primer método es más confiable en múltiples situaciones. Así que si usted fuera a hacer esto para su coche, iría con el método inicial ( el que usa overlay).
Conexión hacia la Raspberry Pi via vnc
Ya que se ha conectado exitósamente a la consola de comandos por ssh , seguro que le interesa también poderse conectar tambien al interfaz gráfico por lo que ahora nos toca instalar y configurar el servidor de VNC sobre Raspberry Pi en su tablet/smartphone.
Para instalar y configurar el VNC viewer en su tablet/smartphon en android siga los siguientes pasos:
- Descargue la app Vnc Viewwer desde Google Play desde la url oficial https://play.google.com/store/apps/details?id=com.realvnc.viewer.android
- Al ejecutar la app por primera vez le pedira una cuenta de vnc, de modo qeu si no la tiene tendra que creala desde la propia aplicacion introduciendo una cuenta de correo, un nombre , apellido,pais y un catcha,
- En nuestro correo electrónico recibiremos un email que debemos validar para confirmar que cuenta nos pertenece
- Una vez que haya confirmado los datos puede intentar volver a entrar en la app VNV Viewer ingresando las credenciales que introdujo
- Ahora siga el procedimiento similar al del ssh
- Haga clic en el el Boton del signo más en la parte inferior izquierda de la pantalla y seleccione la opción Nuevo Host.
- Entrar los siguientes datos:
Alias: cualquier nombre es aceptable como por ejemplo Raspberry Pi
Username: pi
Nombre de host: la dirección Ip obatnida con el comando ifconfig
Contraseña: la pwd que haya puesto
Los demás campos se pueden dejar espacios en blanco, luego toque la marca de verificación en la derecha superior. Después de eso, haga clic en una Conectar cuando se le preguntó » Si desea conectar el dispositivo
-
Ahora valide todos los datos y quedara almacenada en el Address Book estos datos de conexión para cuando los necesite
- Para conectarse a su Raspberry Pi , dado que ya ha creado la conexión, pulse sobre el icono nuevo que aparece en la pantalla de inicio
- Enseguida deberían aparecer las credenciales de acceso y probablemente el pwd en blanco que deberemos completar .
- Finalmente progresar la conexión pulsando en CONTINUE
![Screenshot_2018-11-04-23-00-28-892_com.realvnc.viewer.android[1]](https://soloelectronicos.files.wordpress.com/2018/11/screenshot_2018-11-04-23-00-28-892_com-realvnc-viewer-android1.png?w=243&h=432)
- Una vez dado el botón de conectar debería aparecer la pantalla principal de Raspbian que ahora podremos controlar desde nuestro smartphone
- Podemos ver la imagen de la cámara ahora desde el propio teléfono
Mas información en :https://www.hackster.io/tinkernut/raspberry-pi-smart-car-8641ca
Debe estar conectado para enviar un comentario.