Reconocimiento de imagenes para Raspberry Pi


La famosa librería TensorFlow fue originalmente desarrollada por investigadores e ingenieros que trabajan  dentro de la organización de investigación de la máquina de Inteligencia de Google estando el sistema  diseñado para facilitar la investigación en el aprendizaje de máquina, y para que sea rápido y fácil de transición del prototipo de investigación al sistema de producción.

Aunque se piense que es una librería consolida (la ultima versión es la 10,Release 0)  , TensorFlow no está completa, pues está construida  pensando en ser  mejorada, y extendida. El equipo de desarrollo ha hecho una versión inicial del código fuente, y en la actualidad están haciendo esfuerzos internos de desarrollo a utilizar un repositorio público de los cambios del día a día realizados por el equipo en Google. Esperan construir una comunidad de código abierto activa que impulse el futuro de esta biblioteca, proveyendo de retroalimentación y contribuyendo activamente al código fuente.

 

Nuestro cerebro hacen que la visión parecen fácil pues no se necesita ningún esfuerzo para el ser humano de distinguir un león y un jaguar, leer una señal, o reconocer el rostro de un ser humano. Pero estos son en realidad problemas difíciles de resolver con un ordenador: sólo parece fácil porque nuestros cerebros son muy buenos en la comprensión de las imágenes.

En los últimos años el campo de aprendizaje de la máquina ha hecho enormes progresos en hacer frente a estos problemas difíciles. En particular, hemos encontrado que una especie de modelo  llamado convolutional neural network  puede lograr un rendimiento razonable en las tareas de reconocimiento visual duros igualando o superar el rendimiento humano en algunos dominios.

Los investigadores han demostrado un progreso constante en la visión por ordenador mediante la validación de su trabajo contra IMAGEnet ( un punto de referencia académica para la visión por ordenador). Modelos sucesivos siguen mostrando mejoras, y cada vez que ese consigue un  logro,el  resultado nuevo mejora el estado de la técnica: QuocNet , AlexNet , Inception (GoogLeNet) , BN-Inception-v2 . Los investigadores tanto internos como externos a Google han publicado artículos que describen todos estos modelos, pero los resultados son todavía difíciles de reproducir .En este momento se esta  dando el siguiente paso mediante la liberación de código para ejecutar el reconocimiento de imágenes en nuestro último modelo, Inception-v3 .

Inception-v3 está capacitado para el IMAGEnet grande Reconocimiento Visual Challenge utilizando los datos de 2012. Se trata de una tarea estándar en la visión por ordenador, donde los modelos tratan de clasificar las imágenes completas en 1000 clases , al igual que la «cebra», «dálmata», y «lavavajillas «. Por ejemplo, aquí están los resultados de AlexNet la clasificación de algunas imágenes:

 

Para comparar los modelos, examinamos la frecuencia con que el modelo no puede predecir la respuesta correcta como uno de sus 5 mejores conjeturas mediante el denominado «top-5 índice de error» . AlexNet ha logrado mediante el establecimiento de un top 5 , llegar  a una tasa de error del 15,3% en un dataset de validaciones de  2012 . BN-Inception-v2 alcanzan el 6,66% y  Inception-v3 alcanza el 3,46%.Karpathy intentó medir su propio rendimiento y  alcanzó el top-5 tasa de error de 5,1%.

Ahora vamos a ver  un ejemplo  en Python  para cómo utilizar Inception-v3 para  cómo clasificar las imágenes en 1000 clases en Python o C ++ . También es interesante saber cómo extraer características de nivel superior de este modelo que pueden ser reutilizado para otras tareas de visión.

 

Descargue el modelo  classify_image.py  de tensorflow.org cuando el programa se ejecute por primera vez. Usted necesitará unos 200 Mbs de espacio libre disponible en el disco duro.

Las siguientes instrucciones puede ejecutarla  suponiendo  que ha instalado TensorFlow de un paquete PIP y que su terminal reside en el directorio raíz TensorFlow.

cd tensorflow/models/image/imagenet python classify_image.py

El comando anterior clasificar una imagen suministrada de un oso panda.

Si el modelo se ejecuta correctamente, la secuencia de comandos producirá el siguiente resultado:

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.88493) indri, indris, Indri indri, Indri brevicaudatus (score = 0.00878) lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00317) custard apple (score = 0.00149) earthstar (score = 0.00127)

Si desea suministrar otras imágenes JPEG, puede hacerlo editando el  argumento  –image_file.

Si descarga los datos del modelo en un directorio diferente, tendrá que señalar –model_dir al directorio utilizado.

 

Como ejemplo de uso  se  puede  utilizar  una combinación de OpenCV junto con la librería TensorFlow de Google para utilizar redes de neuronas en Google Cloud para entrenar un modelo de clasificación en la nube.

El japones  Kazunori Sato  ha intentado clasificar verdura ( pepinos )   con el uso de esta  librería implementada  en una Raspberry Pi junto a una webcam para analizar visualmente cada  pieza de verdura  y poder clasificarlos  por tamaños  de una manera eficiente.

Mediante una pequeña máquina casera que han diseñado, a la que  han añadido varios  servos(para expulsar las  muestra clasificadas)  junto a  una cinta transportadora  para transportar las muestras ,  todos controlados  por la raspberry pi  consiguen una eficiencia teórica de más de 95% de acierto,   si bien como se puede ver en el ejemplo, el funcionamiento es algo lento.

En el siguiente video puede ver pues una aplicación practica de uso de esta librería:

 

 

 

 

Para obtener información sobre las redes neuronales en general, de Michael Nielsen su libro online gratis es un excelente recurso. Para las redes neuronales convolucionales, en particular, Chris Olah tiene algunas buenas entradas de blog , y el libro de Michael Nielsen tiene un gran capítulo que forman parte. Para obtener más información sobre la aplicación de redes neuronales convolucionales, puede saltar a la TensorFlow redes convolucionales profunda tutorial , o empezar un poco más suavemente con nuestra principiante ML o expertos ML tutoriales MNIST de arranque. Por último, si desea ponerse al día sobre la investigación en esta área, se puede leer la obra reciente de todos los documentos referenciados en este tutorial.» Michael Nielsen es un excelente recurso. Para las redes neuronales convolucionales, en particular, Chris Olah tiene algunas buenas entradas de blog , y el libro de Michael Nielsen tiene un gran capítulo sobre estas.

Para obtener más información sobre la aplicación de redes neuronales convolucionales, puede mirar el tutorial de TensorFlow sobre  redes convolucionales  o empezar un poco más suavemente con  ML 

 

Construccion de un pancreas artificial


Tres años de investigación y desarrollo, algo más de 200 € en material  y dispuesto a usar  su desarrollo en el mismo el mexicano Gustavo Muñoz  finalmente ha  montado un páncreas artificial que le ayuda a sobrellevar la diabetes. Es un caso similar  Dana Lewis ( del  que hablamos en este blog)   y que también tiene diabetes tipo 1 ( donde  el páncreas no produce suficiente insulina – la hormona que hacen que la glucosa disponible para que las células del cuerpo para utilizar como combustible – o, a veces, el páncreas no funciona en absoluto).

Este ingeniero  de forma similar  a Dana ha experimentado con su propio cuerpo para superar los límites de su enfermedad desarrollando también su propio proyecto de páncreas artificial.

El problema de todo este tipo de dispositivos es que hay tras cualquier solución de este tipo siempre inevitablemente ,si hay un factor de éxito y medio funciona , siempre hay un intento de capitalizar la inversión en tiempo de modo que muy pocos comparten el código en repositorios públicos , pues no todo el mundo tiene el espíritu altruista y las ganas de hacerlo incluso sabiendo que así podría ayudar a muchas más personas que comparten esas misma enfermedad ,pero Gustavo  Muñoz es otro tipo de persona y sin duda parece decidido a cambiar las reglas

 

Gustavo  Muñoz  de forma similar a Dana , comenzó con un sistema de alarmas para despertarse  de noche en caso de no poder escuchar la señal de al CGM (Monitorización Continua de Glucosa), un aparato que se implanta bajo la piel y avisa al portador de los cambios en sus niveles de azúcar.  A veces no escuchaba la alarma lo cual lo hizo reflexionar  hasta  decidir crear su propio sistema usando su propio cuerpo a modo de laboratorio para construir su propia solución.

El páncreas es responsable, entre otras funciones de producir y segregar hormonas importantes como la insulina (disminuye los niveles de glucosa sanguínea) y el glucagón (eleva los niveles de glucosa en la sangre),así que su falta o mal funcionamiento puede poner en peligro nuestras vidas excepto que puedas conectarte a un páncreas artificial.

Para funcionar, un páncreas artificial necesita tres dispositivos:

  • Un sensor que se implanta bajo la piel y mide los niveles de glucosa
  • Un dispositivo que inyecta insulina a través de un catéter
  • Un controlador que aun  no se encuentra en el mercado que detecte la glucemia e indique a la bomba de insulina qué hacer.

 

Buscando en la web se encontró  con el excelente  trabajo de Benjamin West, un programador que también padece diabetes tipo 1.

West había realizado experimentos con su bomba de insulina durante dos años y, al terminar, publicó su trabajo de forma altruista  y desinteresada en GitHub aqui,para que cualquiera pueda construir su propio sistema github

Como vemos West escribió un paquete Python proporcionando un conjunto de herramientas para trabajar con datos utilizados y creados por un » moderno», alrededor del año 2010 , el régimen de la terapia con insulina .

Ofrece una herramienta basada en la línea de comandos de texto , y una biblioteca de Python para auditar los datos terapéuticos a partir de una variedad de dispositivos médicos utilizados como pueden ser:.

  • Bombas de insulina serie Medtronic Minimed utilizando el a usbstick
  • Medidores de glucosa  LifeScan
    • OneTouch series
    • Mini / Perfil
  • Dexcom , OneTouch Ping, Bayer , OmniPod . Sin ningún orden en particular.
  • Bayer , próximamente

Los comandos utilizando PYTHONPATHe están en el directorio raíz del repositorio y se supone que ha instalado en su sistema insulaudit ( incluyendo el desarrollo de la versión ) .Utilizan una  función de escaneo de puertos para probar si somos capaces de hablar con una bomba (es sólo intercambiar unos pocos bytes , nada más ::)

# fails
PYTHONPATH=src/ python -m insulaudit.main -v clmm   hello
insulaudit -v clmm hello

La especificación de un puerto parece funcionar . Si no lo hace , vuelva a intentar un par de veces . ::

# using the subcommand stuff:::
PYTHONPATH=src/ python -m insulaudit.main -v clmm --port /dev/ttyUSB0  hello
insulaudit -v clmm --port /dev/ttyUSB0 hello

# run the protocol exercise directly
PYTHONPATH=src/ python src/insulaudit/devices/clmm/proto.py /dev/ttyUSB0
python -m insulaudit.devices.clmm.proto.py /dev/ttyUSB0

# read-pump-model.log - protocol exercise to read pump
model number.  Log of it running successfully 5 times
before it starts failing.  stderr and timestamps were
not capture. :-(

Sobre  el marco básico  la compatibilidad con el protocolo debe ser estabilizada  teniendo la las herramientas   para obtener las siguientes utilidades:

  • convertir hola a algún tipo de exploración
  • introducir nuevos flujos de dispositivos
  • introducir perfiles de dispositivo / fluye consola
  • registros de récord
  • revisar los registros
  • registros de auditoría
  • registros de fusiones
  • buscar
  • reformatear.

El mexicano adaptó  todo este  trabajo a  sus propias herramientas para extraer datos y enviar ciertos comandos a la bomba de insulina. Aún así, tenía que seguir controlando el tratamiento de manera constante, y por eso se animó a implementar ciertas mejoras del paquete de Ben decidiendo desarrollar un sistema que le permitiera configurarlo y olvidarme de él”,un proyecto al que llamó Simpancreas.

 

Tras meses de investigación y pruebas, Gustavo por fin programó una placa de Raspberry como Dana o Benjamin ,pero más tarde la sustituyó por una placa  Intel Edition, más pequeña , acompañado de una batería y una antena

Dado el grave riesgo par la salud que puede producir un  tratamiento inadecuado para reducir los riesgos, Gustavo extrae información y la analiza en gráficos que le permiten tener todo bajo control.

sinpancreas

 

Aunque esta muy cerca de ser autónomo este ingeniero advierte del riesgo que podría suponer para una persona sin sus conocimientos tratar de hacer lo mismo,razón  por la que la  FDA , piden a los desarrolladores que no publiquen todo el código de su trabajo ni unas instrucciones específicas para llevarlo a cabo. Aunque Gustavo colabora con varias organizaciones, solo publica fragmentos de su trabajo y se asegura de que las personas inexpertas no los puedan utilizar sin ayuda.

OpenAPS (en español, Sistema de Páncreas Artificial de Fuente Abierta) es una plataforma que ofrece ayuda, documentación y consejos para garantizar la seguridad de aquellas personas dispuestas a fabricar su propio páncreas artificial.

Por su parte, Gustavo es cofundador junto con Kenneth Stack de Perceptus, una organización que forma a los pacientes a través de gráficos, y ha documentado todo su proceso a través de un blog.

Fuente aqui