Tabla de contenido:

Varita de Harry Potter de trabajo real con visión por computadora: 8 pasos (con imágenes)
Varita de Harry Potter de trabajo real con visión por computadora: 8 pasos (con imágenes)

Video: Varita de Harry Potter de trabajo real con visión por computadora: 8 pasos (con imágenes)

Video: Varita de Harry Potter de trabajo real con visión por computadora: 8 pasos (con imágenes)
Video: ¿Es la inteligencia artificial la nueva varita mágica en el mundo de Harry Potter? 2024, Mes de julio
Anonim
Image
Image
Varita de Harry Potter de trabajo real con visión artificial
Varita de Harry Potter de trabajo real con visión artificial
Varita de Harry Potter de trabajo real con visión artificial
Varita de Harry Potter de trabajo real con visión artificial
Varita de Harry Potter de trabajo real con visión artificial
Varita de Harry Potter de trabajo real con visión artificial

"Cualquier tecnología suficientemente avanzada es indistinguible de la magia" - Arthur C. Clarke

Hace unos meses, mi hermano visitó Japón y tuvo una verdadera experiencia mágica en el Mundo Mágico de Harry Potter en los Universal Studios gracias a la tecnología de Computer Vision.

En el Mundo Mágico de Harry Potter en Universal Studios, los turistas pueden realizar "magia real" en ciertos lugares (donde está instalado el sistema de captura de movimiento) usando varitas especialmente hechas con cuentas retrorreflectantes en la punta. Las varitas se pueden comprar en una tienda de Ollivander real, que son exactamente como las que se muestran en las películas de Harry Potter, pero recuerde: "Es la varita la que elige al mago": P

En esos lugares determinados, si la persona realiza un gesto particular con la varita, el sistema de captura de movimiento reconoce el gesto y todos los gestos corresponden a un hechizo determinado que provoca ciertas actividades en el área circundante como encender la fuente, etc.

Entonces, en este Instructable, mostraré cómo puede crear un sistema de captura de movimiento económico y efectivo en casa para realizar "magia real" abriendo una caja con el movimiento de su varita: D usando solo una cámara de visión nocturna normal, algunos dispositivos electrónicos, y algo de código Python usando la biblioteca OpenCV Computer Vision y Machine Learning !!!

Paso 1: la idea básica y las piezas necesarias

La idea básica y las piezas necesarias
La idea básica y las piezas necesarias
La idea básica y las piezas necesarias
La idea básica y las piezas necesarias
La idea básica y las piezas necesarias
La idea básica y las piezas necesarias
La idea básica y las piezas necesarias
La idea básica y las piezas necesarias

Las varitas que se compran en el Mundo Mágico de Harry Potter en Universal Studios tienen una cuenta retrorreflectante en la punta. Esas perlas retrorreflectantes reflejan una gran cantidad de luz infrarroja que emite la cámara en el sistema de captura de movimiento. Entonces, lo que los humanos percibimos como una punta no tan distintiva de la varita moviéndose en el aire, el sistema de captura de movimiento percibe como una mancha brillante que se puede aislar fácilmente en la transmisión de video y rastrear para reconocer el patrón dibujado por la persona y ejecutar la acción requerida. Todo este procesamiento se lleva a cabo en tiempo real y hace uso de la Visión por Computador y el Aprendizaje Automático.

Se puede usar una cámara de visión nocturna simple como nuestra cámara para la captura de movimiento, ya que también emiten luz infrarroja que no es visible para los humanos, pero que se puede ver claramente con una cámara que no tiene filtro de infrarrojos. Entonces, el flujo de video de la cámara se alimenta a una raspberry pi que tiene un programa de Python que ejecuta OpenCV que se utiliza para detectar, aislar y rastrear la punta de la varita. Luego usamos el algoritmo SVM (Simple Vector Machine) de Machine Learning para reconocer el patrón dibujado y, en consecuencia, controlar los GPIO de la raspberry pi para realizar algunas actividades.

Los materiales requeridos:

1) Una Raspberry Pi 3 modelo B y los accesorios necesarios como teclado y mouse

2) Módulo de cámara Raspberry Pi NoIR (sin infrarrojos)

3) Varita de Harry Potter con retrorreflector en la punta: no te preocupes si no tienes uno. Se puede utilizar cualquier elemento con retrorreflector. Por lo tanto, puede usar cualquier palo similar a una varita y aplicar cinta retrorreflectora, pintura o cuentas en la punta y debería funcionar como se muestra en el video de William Osman: Vea el video

4) 10 LED infrarrojos

5) Una impresora 3D y filamento PLA de su elección

6) Adaptador de pared de 12 V - 1 A y conector de CC

7) Un servomotor

8) Una caja vieja y un rayo desde la rueda de un ciclo

9) una pistola de pegamento caliente

10) Impresiones de algunos logotipos e imágenes relacionados con Harry Potter en una hoja de papel brillante

11) Sábanas de terciopelo verde y amarillo.

NOTA: También intenté usar una vieja cámara web normal para visión nocturna quitando su filtro infrarrojo, pero terminé dañando / desplazando su lente, lo que afectó mucho la calidad del video y no pude usarlo. Pero si quieres intentarlo, puedes seguir este gran instructivo. Haz clic aquí.

Paso 2: ¡Instale el módulo OpenCV

Ahora es el momento del primer y probablemente el paso más largo de todo este proyecto: la instalación y construcción del módulo OpenCV en su Raspberry Pi.

La instalación de las dependencias para el módulo OpenCV no toma mucho tiempo, pero el proceso de construcción puede demorar de 2 a 3 horas. Entonces, ¡Abróchese el cinturón!:PAG

Hay muchos tutoriales en línea que puede seguir para instalar el módulo OpenCV 4.1.0. Aquí está el enlace del que seguí: Haga clic aquí

NOTA: Recomiendo encarecidamente instalar el módulo OpenCV en un entorno virtual como se muestra en el tutorial, ya que evitará varios tipos de conflictos que pueden ocurrir debido a la instalación de dependencias de diferentes módulos o al trabajar con diferentes versiones de Python.

Paso 3: Impresión del soporte de la cámara

Impresión del soporte de la cámara
Impresión del soporte de la cámara
Impresión del soporte de la cámara
Impresión del soporte de la cámara
Impresión del soporte de la cámara
Impresión del soporte de la cámara

La picamera NoIR no tiene filtro de infrarrojos, por lo que se puede utilizar como cámara de visión nocturna, pero aún carece de una fuente de luz infrarroja. Todas las cámaras de visión nocturna tienen su propia fuente de luz infrarroja que emite rayos IR en la oscuridad que son invisibles a simple vista, pero los rayos pueden ser vistos por la cámara sin filtro infrarrojo después de reflejarse en cualquier objeto.

Entonces, básicamente necesitamos una fuente de luz infrarroja y algo para montar la cámara. Para ello diseñé un sencillo modelo 3D de un objeto sobre el que podríamos montar la cámara que estaría rodeada de 10 leds IR en un círculo. El modelo se creó con SketchUp y se imprimió con Black PLA en unos 40 minutos.

Paso 4: acabado del soporte de la cámara

Finalización del soporte de la cámara
Finalización del soporte de la cámara
Terminando el soporte de la cámara
Terminando el soporte de la cámara
Terminando el soporte de la cámara
Terminando el soporte de la cámara

Después de imprimir el modelo, primero lo lijé con un papel de lija de grano 80 y luego comencé a colocar los leds IR en sus orificios de acuerdo con el diagrama que se muestra arriba.

Aseguré los leds en su lugar con un poco de pegamento caliente y luego uní los cables positivo y negativo de dos leds consecutivos y luego los soldé para crear una conexión en serie de los leds.

El cable positivo de un LED y el cable negativo del LED junto a él en la parte inferior se dejaron sin soldar para conectar los extremos positivo y negativo del adaptador de pared de 12 voltios.

Paso 5: el modelo de aprendizaje automático capacitado

Con el fin de reconocer la letra dibujada por una persona, entrené un modelo de aprendizaje automático basado en el algoritmo Support Vector Machine (SVM) utilizando un conjunto de datos de alfabetos en inglés escritos a mano que encontré aquí. Los SVM son algoritmos de aprendizaje automático muy eficientes que pueden dar una alta precisión, ¡alrededor del 99,2% en este caso! Leer más sobre SVM

El conjunto de datos tiene la forma de archivo.csv que contiene 785 columnas y más de 300, 000 filas donde cada fila representa una imagen de 28 x 28 y cada columna en esa fila contiene el valor de ese píxel para esa imagen con una columna adicional en el comienzo que contiene la etiqueta, un número del 0 al 25, cada uno correspondiente a una letra inglesa. A través de un código Python simple, corté los datos para obtener todas las imágenes de solo las 2 letras (A y C) que quería y entrené un modelo para ellas.

He adjuntado el modelo entrenado (alphabet_classifier.pkl) y también el código de entrenamiento, siéntase libre de revisarlo o hacer cualquier cambio para entrenar el modelo con diferentes letras o probar diferentes algoritmos. Después de ejecutar el programa, automáticamente guarda el modelo entrenado en el mismo directorio donde se guarda su código.

Paso 6: ¡El código que hace que todo suceda

¡El código que hace que todo suceda!
¡El código que hace que todo suceda!

Después de crear el modelo entrenado, el paso final es escribir un programa en Python para nuestra Raspberry Pi que nos permita hacer lo siguiente:

  • Accede al video desde la picamera en tiempo real
  • Detectar y rastrear manchas blancas (en este caso, la punta de la varita que se ilumina en la visión nocturna) en el video
  • Comience a rastrear la ruta de la gota en movimiento en el video después de algún evento desencadenante (explicado a continuación)
  • Dejar de rastrear después de otro evento desencadenante (explicado a continuación)
  • Devuelve el último fotograma con el patrón dibujado por el usuario
  • Realice un preprocesamiento en el marco como umbral, eliminación de ruido, cambio de tamaño, etc.
  • Utilice el último fotograma procesado para la predicción.
  • Realice algún tipo de magia controlando los GPIO de la Raspberry Pi de acuerdo con la predicación

Para este proyecto creé una caja temática de Harry Potter que puedo abrir y cerrar usando un servomotor controlado por el GPIO de la Raspberry Pi. Dado que la letra 'A' significa 'Alohamora' (¡uno de los hechizos más famosos de las películas de Harry Potter que permite a un mago abrir cualquier candado!), Si una persona dibuja la letra A con la varita, la pi ordena al servo Abre la caja. Si la persona dibuja la letra 'C' que significa cerrar (ya que no pude pensar en ningún hechizo apropiado usado para cerrar o bloquear: P), el pi ordena al servo que cierre la caja.

Todo el trabajo relacionado con el procesamiento de imágenes / videos, como la detección de manchas, el seguimiento de la ruta de las manchas, el preprocesamiento del último fotograma, etc., se realiza a través del módulo OpenCV.

Para los eventos desencadenantes mencionados anteriormente, se crean dos círculos en el video en tiempo real, un círculo verde y uno rojo. Cuando la mancha ingresa a la región dentro del círculo verde, el programa comienza a rastrear la ruta tomada por la mancha después de ese momento, lo que permite a la persona comenzar a crear la letra. Cuando la mancha alcanza el círculo rojo, el video se detiene y el último fotograma se pasa a una función que realiza el preprocesamiento en el fotograma para que esté listo para la predición.

He adjuntado los archivos de código en este paso. Siéntase libre de revisarlo y hacer los cambios que desee.

NOTA: Tuve que crear dos archivos de Python separados trabajando con diferentes versiones de Python, uno que importa el módulo OpenCV (Python 2.7) y otro que importa el módulo sklearn (Python 3.5) para la predicción después de cargar el modelo entrenado, ya que mi OpenCV fue instalado para la versión de Python 2.7 mientras que sklearn se instaló para python 3.5. Entonces, utilicé el módulo de subproceso para ejecutar el archivo HarryPotterWandsklearn.py (para la predicción) de HarryPotterWandcv.py (para todo el trabajo de opencv y la grabación de video en tiempo real) y obtener su salida. De esta forma solo tengo que ejecutar el archivo HarryPotterWandcv.py.

Paso 7: el mecanismo de apertura de la caja

El mecanismo de apertura de la caja
El mecanismo de apertura de la caja
El mecanismo de apertura de la caja
El mecanismo de apertura de la caja
El mecanismo de apertura de la caja
El mecanismo de apertura de la caja

Tenía una caja vieja de color rojo alrededor que usé para este proyecto.

Para el mecanismo de apertura de caja:

  1. Pegué en caliente un servo cerca de la parte trasera de la caja en un trozo de cartón cerca del borde de la caja.
  2. Luego tomé un radio de la rueda de un ciclo y lo pegué en caliente al brazo del servo.
  3. El otro extremo del radio se adjuntó a la tapa de la caja con un trozo de alambre.
  4. El positivo del servo se conectó a + 5V Pin 2 en Raspberry Pi.
  5. El negativo del servo se conectó al pin 39 de GND.
  6. La señal del servo se conectó al pin 12

Paso 8: Hacer la caja temática de Harry Potter

Haciendo la caja temática de Harry Potter
Haciendo la caja temática de Harry Potter
Haciendo la caja temática de Harry Potter
Haciendo la caja temática de Harry Potter
Haciendo la caja temática de Harry Potter
Haciendo la caja temática de Harry Potter

Para hacer la caja con el tema de Harry Potter, imprimí algunas imágenes en color de varias cosas como el logotipo de Harry Potter, el escudo de Hogwarts, el escudo de cada una de las cuatro casas, etc.en una hoja brillante de tamaño A4 y las pegué en la caja en varios lugares.

También utilicé una sábana de terciopelo de color amarillo para cortar tiras y las pegué en la tapa para darle a la caja el mismo color que la de la Casa Gryffindor. Cubrí el interior de la tapa y el cartón para servo con una hoja de terciopelo verde. En el interior de la tapa pegué más símbolos y un emblema que mostraba los animales que representan cada casa de la Escuela Hogwarts.

Luego, finalmente, metí todas mis cosas relacionadas con Harry Potter en la caja que incluía una bufanda de Gryffindor, un diario con el uniforme de Hogwarts y la varita de saúco utilizada en este proyecto: D

Recomendado: