Ir al contenido principal

Entradas

Mostrando las entradas de 2017

Usando DualShock 4 en C/C++

Hace unas semanas empecé a trabajar en un proyecto con un coche de radio control y se me ocurrió la manera de manejarlo con el control del PS4, el DualShock 4 (DS4). ¿Por qué C/C++? Existen varias bibliotecas para manejar el DS4 por ejemplo, el ds4drv 1 pero dado que el proyecto en el que estoy trabajando está escrito en C/C++ necesito desarrollar la biblioteca. ¿Cómo funciona el DS4? El DS4 es un dispositivo HID 2 este se puede conectar por medio de USB o Bluetooth (ver compatibilidad 3 ) Para establecer la conexión con el DS4 se tiene que enviar el VendorId y ProductId, una vez establecida la conexión este envía "reportes" los cuales son tramas de 64 bytes que contienen información del estado de los botones y del DS4. La tabla 1 muestra la descripción del reporte que consta de 64 bytes. byte index bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 [0] Report ID (USB) [1] X axis (0 = left) [2] Y axis (0 = up) [3] Right Stick axis X [

Usando el narrador de Minecraft

Me encontraba jugando Minecraft en la nueva snapshot 17w14a y vi que implementaron una nueva funcionalidad la cual es un narrador, es decir una voz lee todo lo que parece en el chat y fue cuando me dije ¿Joder, cómo lo hicieron? generalmente este tipo de cosas utiliza muchos recursos. Lo primero fue ubicar que biblioteca utilizan, para eso explore la carpeta del juego y encontré algo. .minecraft/libraries/com/mojang/text2speech/1.5/text2speech-1.5.jar Al parecer es una biblioteca creada por Mojang. Bueno es hora de ver que tiene, al pasar por el descompilador obtuve lo siguiente: ¿Es todo? ¿Dónde esta el resto? Básicamente lo que hacen los de Mojang es invocar otro programa desde java, es decir un wrapper. ¿Pero que programa invocan? viendo las clases encontré que usan un jni para ejecutar una biblioteca en c llamada libfliteWrapper.so De nuevo descompilando libfliteWrapper.so obtenemos: Vemos que existe una función llamada "say" como parametro el tex

Clasificador de gatos y perros usando TensorFlow

El otro día estaba buscando información acerca de redes de convolución y encontré un estupendo video 1 en youtube, el cual explicaba como realizar un clasificador de imágenes en 5 min, así que dije ¿Por que no hago un clasificador de gatos y perros, pero a mi estilo?  - why not?. Configurando todo Básicamente es utilizar el ejemplo de TensorFlow llamado retrain.py que es un script de entrenamiento de una red de convolución Inception-v3 2 y entrenar nuestra red con las imágenes que queremos clasificar, en este caso gatos y perros. Vamos a necesitar muchas pero muchas imágenes de gatos y perros así que  para obtener las imágenes de nuestro entrenamiento tenemos dos posibles ideas. * Ir a Imagenet y obtener el archivo con todas las url de las imágenes y usando wget descargarlas. * Descargar las imágenes de google images utilizando un plugin para chrome o firefox.  Una vez obtenidas las imágenes para nuestro entrenamiento vamos a crear nuestro proyecto, primero tenemos qu