B.A.D. [Parte 2] - OpenCV+RasPi y reconociendo una pelota
Siguiendo con los post de este nuevo proyecto, en este voy a compartir la experiencia con la instalación de OpenCV y cómo reconocer una pelota de tenis desde el RaspBerry Pi. La instalación de OpenCV fue realmente traumática, es demasiado lenta, pero a partir de allí, todo es una poesía, esta libreria de visión por computador es realmente asombrosa.
Instalar OpenCV
Como es habitual en todo este mundo del Raspberry Pi, es fácil encontrar documentación detallada y exhaustiva sobre como hacer esta instalación, de hecho existe algo que es como "La Biblia de OpenCV" que mantiene toda esta documentación, se llama PyImageSearch, con cientos de recursos dedicados a Visión por Computador y Python. Para la instalación seguí una combinación del manual estándar para la versión 3.3.0 y el manual de optimización:
- Raspbian Stretch: Install OpenCV 3 + Python on your Raspberry Pi
- Optimizing OpenCV on the Raspberry Pi


Probando OpenCV desde Python
Si todo salió bien, se podrá cargar OpenCV desde Python con sólo importar la librería. Para esto también se tomó una referencia de PyImageSearch: Accessing the Raspberry Pi Camera with OpenCV and Python, que contiene todo lo básico para probar nuestra cámara con OpenCV, el código usado fue este:
Y el resultado es lo esperado:

Máscaras
Las máscaras de imágenes son actividades de procesamiento que buscan esconder porciones de una imagen dependiendo de algún cálculo sobre la misma imagen, y es la técnica que se usa para realizar identificación de cosas en los videos y las fotos, el detalle se escapa de este blog, pero se puede consultar en Wikipedia: Mask (computing).
Para todo el tema de reconocer los colores, y luego reconocer la pelota, seguí lo desarrollado en un Instructable: Automatic Vision Object Tracking, que está supremamente completo y muy detallado. El código para probar es este:
Y el resultado:
En ese instructable hablan mucho de colores RGB y HSV, yo realmente usé la técnica del instructable: Usar PowerPoint y usar el código que hace la transformación:

Pero evidentemente hay maneras más elegantes. Si se quiere profundizar en esto, en Wikipedia hay artículos tanto de RGB como de HSV.
Detectando la pelota
Ya con los pasos previos ejecutados, y sabiendo que podemos tomar video y hacer cálculos para buscar un color en específico, sólo queda buscar la pelota 😜. Aca nuevamente me basé en el Instructable Automatic Vision Object Tracking y en PyImageSearch Ball Tracking with OpenCV. Debo indicar que ambos recomiendan usar una librería desarrollada por estos últimos: imutils, pero en las pruebas que realice encontré que con la funcion de VideoStream de esta el RasPi se recalentaba más rápido que con la aproximación inicial de RAW, el código que me generaba el recalentamiento prematuro es este:
En mis cálculos, toma alrededor de 6 minutos que se recaliente el RasPi y empiece a sacar el ícono que señala temperaturas de operación de más de 80°C:

Para quienes no conocen los íconos de RasPi, se pueden encontrar acá. Los íconos aparecen en la parte superior derecha de la pantalla:

Usando el código anterior y agregando únicamente las funciones de imutils para detectar bordes encontré un mejor desempeño desde el punto de vista térmico, el código usado es este:
Y haciendo pruebas subía hasta 73°C y luego parecía estabilizarse allí:

Con ambos algoritmos, el resultado es el mismo:

Todo esto se basa en la detección de bordes sobre la máscara que demarca la pelotica, para más información se puede consultar Wikipedia: Edge Detection. Para finalizar, agregue un código para llevar la posición (X, Y) de la pelotica en la pantalla, que seguro será muy útil más adelante:
El resultado es este:

Espero en algún momento le sea muy útil a alguien más.
Comentarios
Publicar un comentario