Proyecto desarrollado como parte de la Práctica Calificada 3 (PC3) del curso Machine Learning (CC57). Implementa un sistema de visión artificial que permite al robot NAO reconocer jugadas del juego Piedra–Papel–Tijeras usando un modelo de Deep Learning ejecutado en un servidor externo.
El sistema utiliza un enfoque cliente-servidor:
-
Robot NAO (Python 2.7):
- Captura imágenes mediante
ALVideoDevice - Serializa las imágenes con
pickle(protocol=2) - Envía las imágenes por socket TCP
- Recibe la predicción del modelo y anuncia el resultado mediante TTS
- Captura imágenes mediante
-
Servidor de Inferencia (Python 3.x):
- Deserializa la imagen recibida
- Preprocesa la imagen para MobileNetV3
- Ejecuta el modelo CNN entrenado
- Devuelve la clase predicha al NAO
-
Modelo CNN:
- Arquitectura: MobileNetV3 Small
- Entrenado con un dataset fusionado de 3 repositorios de Kaggle
- Clases: piedra (0), papel (1), tijeras (2)
- Python 2.7
- NAOqi SDK
- ALVideoDevice
- ALTextToSpeech
- Python 3.12
- TensorFlow 2.17
- OpenCV
- Sockets TCP
- MobileNetV3 Small
RockPaperScissors-NAO-CNN/
│
├── dataset/
│ ├── build_dataset.ipynb
│ └── links datasets.txt
│
├── modelo/
│ ├── Modelo CNN.ipynb
│ └── modelo_rps_mobilenetv3.keras
│
├── servidor/
│ └── servidor_tf_final.py
│
├── nao_client/
│ └── rps_game_nao_final.py
│
├── utils/
│ ├── test_webcam_to_server.py
│ └── test_client_py27_final.py
│
├── docs/
│ ├── diagrama de arquitectura.png
│ └── capturas_evidencia/
│
├── README.md
├── requirements.txt
└── .gitignore
cd servidor/
python servidor_tf_final.pycd nao_client/
python rps_game_nao_final.py- NAO anuncia el turno del Jugador 1
- Captura imagen → envía al servidor
- Recibe predicción → NAO la anuncia
- Repite con el Jugador 2
- Determina ganador usando reglas del juego
- NAO anuncia el resultado