Tabla de contenido:
- Paso 1: Cosas utilizadas en este proyecto
- Paso 2: ¿Idea?
- Paso 3: ¿Empezando?
- Paso 4: ¿Grabar Raspbian en la tarjeta SD?
- Paso 5: ¿Recopilar el conjunto de datos? ️
- Paso 6: diseñar una NN y entrenar el modelo ⚒️⚙️
- Paso 7: Probar el modelo ✅
- Paso 8: Juego Piedra-Papel-Tijeras
- Paso 9: ¿Integración del servomotor?
- Paso 10: ¿Funcionamiento del proyecto?
- Paso 11: Código - Project Repo
Video: Piedra, papel, tijera AI: 11 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
¿Alguna vez te has sentido aburrido solo? Juguemos piedra, papel y tijeras contra un sistema interactivo impulsado por inteligencia.
Paso 1: Cosas utilizadas en este proyecto
Componentes de hardware
- Raspberry Pi 3 Modelo B + × 1
- Módulo de cámara Raspberry Pi V2 × 1
- Micro-servomotor SG90 × 1
Aplicaciones de software
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Paso 2: ¿Idea?
Después de trabajar en varios proyectos en diferentes dominios, planeé hacer un proyecto divertido y decidí hacer un juego de piedra, papel y tijeras:)
En este proyecto, haremos un juego interactivo y jugaremos contra la computadora que funciona con inteligencia artificial para tomar decisiones. AI usa la cámara conectada a la Raspberry Pi para reconocer qué movimientos hizo el usuario con la mano, clasificarlos en la mejor categoría (etiqueta) piedra, papel o tijeras. Una vez que la computadora hace su movimiento, el motor paso a paso conectado a la Raspberry Pi apunta hacia la dirección en función de su movimiento.
Reglas que deben tenerse en cuenta para este juego:
- Rock embota la tijera
- El papel cubre la roca
- Tijeras cortan papel
El ganador se decidirá en función de las tres condiciones anteriores. Veamos una demostración rápida del proyecto aquí.
Paso 3: ¿Empezando?
Frambuesa pi
He usado una Raspberry Pi 3 Model B + que tiene grandes mejoras y es más potente que la anterior Raspberry Pi 3 Model B.
Raspberry Pi 3 B + está integrado con el procesador de cuatro núcleos a 1,4 GHz y 64 bits, LAN inalámbrica de doble banda, Bluetooth 4.2 / BLE, Ethernet más rápida y compatibilidad con alimentación por Ethernet (con PoE HAT independiente).
Especificaciones: Broadcom BCM2837B0, Cortex-A53 (ARMv8) SoC de 64 bits a 1,4 GHz, SDRAM LPDDR2 de 1 GB, LAN inalámbrica IEEE 802.11.b / g / n / ac de 2,4 GHz y 5 GHz, Bluetooth 4.2, BLE, Gigabit Ethernet a través de USB 2.0 (rendimiento máximo de 300 Mbps), el encabezado GPIO extendido de 40 pines, puertos HDMI4 USB 2.0 de tamaño completo, puerto de cámara CSI para conectar una cámara Raspberry Pi, puerto de pantalla DSI para conectar una pantalla táctil Raspberry Pi Salida estéreo de 4 polos y compuesto puerto de video, puerto Micro SD para cargar su sistema operativo y almacenar datos Entrada de energía de 5V / 2.5A DC, soporte Power-over-Ethernet (PoE) (requiere PoE HAT por separado).
Servo motor
Utilizamos un servomotor SG-90, un motor de alto par que puede soportar una carga de hasta 2,5 kg (1 cm).
Cámara USB
Una cámara USB para que el juego sea interactivo con el procesamiento de imágenes.
Algunos cables de puente se utilizan para conectar el motor paso a paso y la Raspberry Pi.
Paso 4: ¿Grabar Raspbian en la tarjeta SD?
Raspbian es la distribución de Linux preferida que se ejecuta en Raspberry Pi. En esta guía, usaremos la versión Lite, pero también se puede usar la versión de escritorio (que viene con un entorno gráfico).
- Descarga Etcher e instálalo.
- Conecte un lector de tarjetas SD con la tarjeta SD adentro.
- Abra Etcher y seleccione de su disco duro el archivo.img o.zip de Raspberry Pi que desea escribir en la tarjeta SD.
- Seleccione la tarjeta SD en la que desea escribir su imagen.
- Revise sus selecciones y haga clic en '¡Flash!' para comenzar a escribir datos en la tarjeta SD.
Conecte el dispositivo a su red
- Habilite el acceso SSH agregando el archivo ssh vacío, nuevamente ubicado en la raíz del volumen de inicio en su tarjeta SD.
- Inserta la tarjeta SD en la Raspberry Pi. Arrancará en aproximadamente 20 segundos. Ahora debería tener acceso SSH a su Raspberry Pi. De forma predeterminada, su nombre de host será raspberrypi.local. En su computadora, abra una ventana de terminal y escriba lo siguiente:
La contraseña predeterminada es frambuesa.
Aquí he usado un monitor separado para interactuar con la Raspberry Pi.
Paso 5: ¿Recopilar el conjunto de datos? ️
El primer paso de este proyecto es la recopilación de datos. El sistema tiene que identificar el gesto de la mano y reconocer la acción y hacer que se mueva en consecuencia.
Instalamos varias bibliotecas en Raspberry Pi usando pip install
mando.
sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip install numpy pip install scikit-learn pip install scikit-image pip install h5py pip install Keras pip instalar tensorflow pip instalar Werkzeug pip instalar Keras-Aplicaciones pip instalar Keras-preprocesamiento pip instalar keras-squeezenet pip instalar astor pip instalar tensorboard pip instalar tensorflow-estimator pip instalar mock pip instalar grpcio pip instalar absl-pypip instalar gast pip instalar joblib pip instalar Markdown pip instalar protobuf pip instalar PyYAML pip instalar seis
Si tiene algún problema con el paquete OpenCV, le recomiendo encarecidamente que instale estos paquetes.
sudo apt-get install libhdf5-dev
sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test
Hemos instalado todas las dependencias necesarias para este proyecto. El conjunto de datos se compone de colecciones y arreglos de las imágenes bajo la etiqueta apropiada.
Aquí creamos las imágenes del conjunto de datos para la etiqueta piedra, papel y tijera usando el siguiente fragmento.
roi = marco [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
La imagen se captura para cada etiqueta (piedra, papel, tijera y ninguna).
Paso 6: diseñar una NN y entrenar el modelo ⚒️⚙️
El núcleo de este proyecto es un clasificador de imágenes que clasifica una de tres categorías. Para hacer este clasificador, utilizamos la CNN (red convolucional) previamente entrenada llamada SqueezeNet.
Aquí usamos Keras y TensorFlow para generar el modelo SqueezeNet que puede identificar el gesto. Las imágenes que generamos en el paso anterior se utilizan para entrenar el modelo. El modelo se entrena utilizando el conjunto de datos generado para ninguna de las épocas (ciclos) mencionadas.
El modelo está configurado con los hiperparámetros como se muestra a continuación.
modelo = secuencial ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Abandono (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Activación ('relu'), GlobalAveragePooling2D (), Activación ('softmax')])
Mientras el modelo se está entrenando, puede encontrar la pérdida y precisión del modelo para cada Época y la precisión aumenta en algún momento después de algunas Épocas.
Se necesitaron aproximadamente 2 horas para generar el modelo con la mayor precisión después de 10 épocas. Si se enfrenta a errores de asignación de memoria, siga los siguientes pasos (gracias a Adrian)
Para aumentar su espacio de intercambio, abra / etc / dphys-swapfile y luego edite la variable CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Observe que estoy aumentando el intercambio de 100 MB a 1024 MB. Desde allí, reinicie el servicio de intercambio:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Nota:
Aumentar el tamaño de intercambio es una excelente manera de quemar su tarjeta de memoria, así que asegúrese de revertir este cambio y reiniciar el servicio de intercambio cuando haya terminado. Puede leer más sobre los tamaños grandes que corrompen las tarjetas de memoria aquí.
Paso 7: Probar el modelo ✅
Una vez generado el modelo, produce el archivo de salida "piedra-papel-tijeras-modelo.h5". Este archivo se utiliza como fuente para probar si el sistema puede identificar diferentes gestos con las manos y diferenciar las acciones.
El modelo se carga en el script de Python de la siguiente manera
model = load_model ("piedra-papel-tijeras-modelo.h5")
La cámara lee la imagen de prueba y transforma el modelo de color requerido, y luego cambia el tamaño de la imagen a 227 x 227 píxeles (el mismo tamaño utilizado para la generación del modelo). Las imágenes que se utilizaron para entrenar el modelo se pueden utilizar para probar el modelo generado.
img = cv2.imread (ruta de archivo)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Una vez que se carga el modelo y la cámara adquiere la imagen, el modelo predice la imagen capturada utilizando el modelo SqueezeNet cargado y hace la predicción de los movimientos del usuario.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Predicted: {}". format (move_name))
Ejecute el script test.py para probar el modelo con varias imágenes de prueba.
python3 test.py
Ahora el modelo está listo para detectar y comprender los gestos de las manos.
Paso 8: Juego Piedra-Papel-Tijeras
El juego utiliza una función de generación de números aleatorios para decidir el movimiento de la computadora. Sigue las reglas mencionadas anteriormente para determinar el ganador. El juego está diseñado con dos modos: modo normal y modo inteligente, donde el modo inteligente contraataca el movimiento del usuario, es decir, la computadora gana todos los movimientos contra el usuario.
cap = cv2. VideoCapture (0) # Para capturar la imagen de la cámara
Ahora hagamos el juego en modo Normal donde el sistema / Raspberry Pi toma la imagen de la mano y analiza e identifica el gesto de la mano. Luego, usando un generador de números aleatorios, se juega el movimiento de la computadora. El ganador se elige según las reglas y luego se muestra en la pantalla. Inicie el juego usando el siguiente comando.
python3 play.py
Paso 9: ¿Integración del servomotor?
Por fin, agregue el servomotor a este proyecto. El servomotor es el pin 17 de GPIO de la Raspberry Pi, que tiene la función PWM para controlar el ángulo de rotación.
El servomotor utilizado en este proyecto es SG-90. Puede hacer rotaciones en sentido horario y antihorario hasta 180 °
Las conexiones se dan de la siguiente manera.
Servomotor - Raspberry Pi
Vcc - + 5V
GND - GND
Señal - GPIO17
En este proyecto se utilizan bibliotecas como RPi. GPIO y time.
importar RPi. GPIO como GPIO
tiempo de importación
Luego, el pin GPIO se configura a PWM usando las siguientes líneas
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
El pin 17 de GPIO está configurado para usarse como un PWM a la frecuencia de 50Hz. El ángulo del servomotor se logra configurando el ciclo de trabajo (Ton & Toff) del PWM
deber = ángulo / 18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (deber) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Esto producirá el ángulo de paso deseado para cada pulso, lo que daría el ángulo de rotación deseado.
Ahora tomé la tabla y la corté en tres secciones, para piedra, papel y tijera. El servomotor se fija al centro del gráfico. El puntero / aleta está conectado al eje del servomotor. Este eje apunta al movimiento de la computadora de acuerdo con la lógica calculada en el script.
Paso 10: ¿Funcionamiento del proyecto?
Y ahora, es hora de jugar. Veamos el funcionamiento del proyecto.
Si tuvo algún problema en la construcción de este proyecto, no dude en preguntarme. Sugiera nuevos proyectos que desee que haga a continuación.
Dale un pulgar hacia arriba si realmente te ayudó y sigue mi canal para proyectos interesantes.:)
Comparta este video si lo desea.
Feliz de que se haya suscrito:
¡Gracias por leer!
Paso 11: Código - Project Repo
El código se agrega al repositorio de GitHub que se puede encontrar en la sección de código.
Rahul24-06 / Piedra-Papel-Tijeras -
Recomendado:
Soporte de batería de papel fácil: 5 pasos
Soporte de batería de papel fácil: si le resulta difícil encontrar un soporte para batería de celda de moneda mientras realiza pequeños proyectos con sus hijos o estudiantes como yo, entonces este Instructables es solo para usted. Este portapilas también tiene una posición de ENCENDIDO o APAGADO dependiendo de cómo lo cierre
Juego de piedra, papel y tijera: 6 pasos
Stone Paper Scissor Game: Este es mi primer instructable. Quería escribir uno durante mucho tiempo, pero no tenía ningún proyecto entre manos que pudiera publicar aquí. Entonces, cuando se me ocurrió la idea de este proyecto, decidí que este es el indicado. Así que estaba navegando en el sitio de tensorflow.js, yo
Contador de suscriptores de YouTube con una pantalla de papel electrónico y Raspberry Pi Zero W: 5 pasos (con imágenes)
Contador de suscriptores de YouTube usando una pantalla de papel electrónico y Raspberry Pi Zero W: en este Instructable, le mostraré cómo construir su propio contador de suscriptores de YouTube usando una pantalla de papel electrónico y una Raspberry Pi Zero W para consultar la API de YouTube y actualice la pantalla. Las pantallas de papel electrónico son excelentes para este tipo de proyecto, ya que tienen
Tijeras de piedra, papel: 10 pasos
Piedra, papel, tijeras: Objetivo: Después de completar esto, aprenderá a hacer un juego simple de piedra, papel y tijeras desde cero usando Code.org. Materiales / requisitos necesarios: comprensión básica de la sintaxis de Javascript, una computadora, una cuenta de Code.org
Elevador de tijera controlado por Raspberry Pi: 17 pasos (con imágenes)
Elevador de tijera controlado Raspberry Pi: ¿Por qué un elevador de tijera? ¡Por qué no! Es genial y un proyecto divertido de construir. La verdadera razón para mí es elevar las cámaras de mi proyecto Great Mojave Rover. Quiero que las cámaras se eleven por encima del rover y capturen imágenes de los alrededores. Pero necesitaba