PiedraPapelTijera

Ejercicio del juego Piedra, Papel o Tijera de Catalinita

¡Mira el vídeo y verás cómo se enfada cuando pierde!



Catalinita juega a “piedra, papel o tijera”

No pierdas la oportunidad de jugar con Catalinita a “piedra, papel o tijera”. A ver cuántas veces te gana.

Poner en marcha el programa Catalinita_piedra_papel_o_tijera.js

Este programa es un poco más difícil de poner en marcha que los anteriores, pero no imposible.
Para agilizar la conversación con Catalinita, los textos que ella verbaliza han sido generados previamente.
Para que Catalinita pueda jugar contigo a “piedra, papel o tijera” tienes que hacer seis cosas: 1) Descargar todos los ficheros de la carpeta Catalinita_piedra_papel_o_tijera a la raspberrypi.

  1. Ubicar todos los ficheros descargados en el directorio donde ya estés ejecutando satisfactoriamente el programa conversation.js del TJBot o Catalinita_lorito.js. Posicionarse en ese directorio.
  2. Entrenar un modelo de Visual Recognition para enseñar a Catalinita a distinguir entre piedra, papel o tijera:
    3.1. Asegurar que la credencial del servicio Visual Recognition de Watson está correctamente introducida en el fichero config.js.
    3.2. Crear un modelo nuevo específico para este juego:
    curl -X POST -u “apikey:xxx” \ –form “piedra_positive_examples=@piedra.zip” \ –form “papel_positive_examples=@papel.zip” \ –form “tijera_positive_examples=@tijera.zip” \ –form “negative_examples=@negativos.zip” \ –form “name=piepati” \ “https://gateway.watsonplatform.net/visual-recognition/api/v3/classifiers?version=2018-03-19”
    siendo xxx la credencial del servicio Visual Recognition.
    Después de un rato largo, el comando devolverá las características del modelo (también llamado clasificación) recién creado. Es importante apuntar el nombre otorgado a esta nueva clasificación. Ese nombre será algo como piepati_yyy, y estará a la derecha del parámetro “classifier_id”:
    3.3. Esperar hasta que el modelo esté listo. Esto es así cuando, al ejecutar:
    curl -X GET -u “apikey:xxx” “https://gateway.watsonplatform.net/visual-recognition/api/v3/classifiers/piepati_yyy?version=2018-03-19”
    el parámetro “status”: ofrece el valor ready.
  3. Modificar la librería node_modules/tjbot/lib/tjbot.js para que el modelo de Visual Recognition que use Catalinita al jugar sea el recién entrenado, para ello:
    4.1. Buscar dentro de la librería la función TJBot.prototype.recognizeObjectsInPhoto. (Está alrededor del número de línea 920.)
    4.2. Dentro de esa función, en el párrafo donde se rellena la variable params, localizar la línea:
    images_file: fs.createReadStream(filePath),
    y añadir a continuación lo siguiente (incluyendo la coma final):
    “classifier_id”: “piepati_yyy”,
    4.3. Guardar los cambios hechos en el fichero y cerrarlo.
  4. Instalar el paquete opn:
    npm install opn
    (Este paquete se utiliza para que Catalinita pueda abrir el navegador y mostrar lo que saca ella en cada tirada.)
  5. Ejecutar:
    sudo node Catalinita_piedra_papel_o_tijera.js
    (Debes tener la precaución de cerrar todas las ventanas de las tiradas, cada vez que invoques el programa.)

Usar el programa Catalinita_piedra_papel_o_tijera.js

Puedes interactuar con Catalinita diciéndole simplemente “piedra, papel o tijera”:

  1. Ella te contestará: venga, saca tú.
  2. Deberás enseñarle tu opción acercando tu mano a la cámara a un palmo de distancia. Para que el modelo entrenado funcione a la perfección, es conveniente que la cámara esté situada a la altura de tu cintura, y que detrás de ti haya una pared blanca, o por lo menos, que no haya nadie más, ni brazos, ni manos, ni piernas, ni caras.
  3. Al mismo tiempo que tú sacas, Catalinita por pantalla mostrará lo que saca ella.
  4. Ella evaluará lo que tú has sacado, lo comparará con lo suyo y anunciará quién es el ganador.

¡Ánimo y que tengas mucha suerte!

Más comandos útiles para gestionar la clasificación/modelo de Visual Recognition

Otra forma de extraer el classifier_id y el status es obteniendo la información de todas las clasificaciones asociadas al servicio Visual Recognition que se esté usando. Para hacer esto usa el comando:
curl -u “apikey:xxx” “https://gateway.watsonplatform.net/visual-recognition/api/v3/classifiers?verbose=true&version=2018-03-19”

Para evaluar la eficacia del modelo creado se puede intentar clasificar manualmente una imagen, para ello, basta con ejecutar:
curl -X POST -u “apikey:xxx” –form “images_file=@www” –form “classifier_ids=piepati_yyy” “https://gateway.watsonplatform.net/visual-recognition/api/v3/classify?version=2018-03-19”
siendo www el nombre del fichero jpg, con path completo, que se quiere someter a examen.

Como el número de modelos que se pueden tener en un servicio Visual Recognition es limitado, puede ser interesante borrar modelos que ya no se usen:
curl -X DELETE -u “apikey:xxx” “https://gateway.watsonplatform.net/visual-recognition/api/v3/classifiers/piepati_yyy?version=2018-03-19”

Problemas comunes al usar el programa Catalinita_piedra_papel_o_tijera.js

Si tienes problemas, échale un ojo a los siguientes puntos:

  1. Si dudas de las imágenes que capta tu TJBot, puedes ver las capturas en el directorio /tmp de tu raspberrypi.
  2. Si ves que el modelo entrenado con las imágenes proporcionadas por Catalinita no se ajusta a tus necesidades, no dudes en incorporar en los ficheros .zip más imágenes de cada tipo para enseñar a Catalinita a distinguir mejor entre piedra, papel o tijera.
  3. Si al ejecutar sudo node Catalinita_piedra_papel_o_tijera.js obtienes un error del siguiente estilo:
    «
    verbose: TJBot initializing LED
    verbose: TJBot initializing microphone
    verbose: TJBot initializing servo motor on PIN 7
    2019-06-08 10:15:55 initInitialise: bind to port 8888 failed (Address already in use)
    /home/KKCHU/node_modules/pigpio/pigpio.js:11
    pigpio.gpioInitialise();
    ^
    Error: pigpio error -1 in gpioInitialise
    at initializePigpio (/home/KKCHU/node_modules/pigpio/pigpio.js:11:12)
    at new Gpio (/home/KKCHU/node_modules/pigpio/pigpio.js:25:3)
    at TJBot._setupServo (/home/KKCHU/node_modules/tjbot/lib/tjbot.js:304:19)
    at TJBot. (/home/KKCHU/node_modules/tjbot/lib/tjbot.js:71:18)
    at Array.forEach ()
    at new TJBot (/home/KKCHU/node_modules/tjbot/lib/tjbot.js:56:14)
    at Object. (/home/KKCHU/ppt/ppt.js:46:10)
    at Module._compile (internal/modules/cjs/loader.js:654:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
    at Module.load (internal/modules/cjs/loader.js:566:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
    at Function.Module._load (internal/modules/cjs/loader.js:498:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
    at startup (internal/bootstrap/node.js:201:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3)_
    \>>
    cierra todas las ventanas del navegador que tengas abiertas.
    Debes tener la precaución de cerrar todas las ventanas de las tiradas, cada vez que invoques el programa.