Tabla de contenido:

Piedra, papel, tijera AI: 11 pasos
Piedra, papel, tijera AI: 11 pasos

Video: Piedra, papel, tijera AI: 11 pasos

Video: Piedra, papel, tijera AI: 11 pasos
Video: PIEDRA PAPEL o TIJERA (en COREANO) #shorts 2024, Noviembre
Anonim
Piedra Papel Tijera AI
Piedra Papel Tijera AI

¿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?

Image
Image

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?

Empezando ?
Empezando ?
Empezando ?
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?

¿Grabar Raspbian en la tarjeta SD?
¿Grabar Raspbian en la tarjeta SD?
¿Grabar Raspbian en la tarjeta SD?
¿Grabar Raspbian en la tarjeta SD?
¿Grabar Raspbian en la tarjeta SD?
¿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:

ssh [email protected]

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? ️

¿Recopilando el conjunto de datos? ️
¿Recopilando el conjunto de datos? ️
¿Recopilando el conjunto de datos? ️
¿Recopilando 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 ⚒️⚙️

Diseñar una NN y entrenar el modelo ⚒️⚙️
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 ✅

Probando el modelo ✅
Probando el modelo ✅
Probando el modelo ✅
Probando el modelo ✅
Probando el modelo ✅
Probando 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

Juego Piedra-Papel-Tijeras
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?

Image
Image

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: