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 

 

¿Se puede reparar una batería agotada?


Cuando una batería esta mucho tiempo descargada , o muy vieja , etc… se dice que se ha «sulfatado» porque básicamente , se forman  sales de plomo y azufre (sulfato-de-plomo) que se adhiere a la placa esponjosa del negativo  bloqueando las reacciones químicas. Normalmente llegado a esta batería se da por perdida para siempre y se reemplaza por otra nueva….

Con un poco de astucia ( y sobre todo que ahora que el plomo vale tres  veces mas  ) , las viejas  baterías incluso aunque no sean de plomo o gel (NiCD  o iones de Litio)   aun se puede alargar su vida util¿pero cómo?Pues  vamos a ver dos métodos,  siendo el primero útil solo para las baterías de plomo o las gel de Pb y el segundo método  idóneo para todo tipo de baterías  (Pb ,Gel de Pb  ,NiCd, Li+, etc )

El segundo método como vamos  a ver es el mas efectivo y seguro  !incluso  puede ser útil en caso de emergencia para recuperar combinaciones de pilas domesticas alcalinas!

ATENCIÓN: NO NOS HACEMOS RESPONSABLES DESDE ESTE SITIO DE LOS POSIBLES ADVERSOS  Y PELIGROSOS QUE PUEDAN OCURRIR  EN EL TRANSCURSO DE INTENTAR RENOVAR UNA BATERÍA AGOTADA

 SI INTENTA RECUPERAR UNA BATERÍA AGOTADA PROTÉJASE OJOS  ; BRAZOS Y MANOS   EXTREMANDO LA PRECAUCIÓN.

SOLO INTENTAR EN CASO DE EMERGENCIA   Y CUANDO DEMOS POR PERDIDA LA BATERÍA PUES TENGA EN CUENTA QUE EN  TODO CASO PODEMOS RECUPERAR SOLO EN UN TANTO POR CIENTO LA CAPACIDAD TOTAL DE LA BATERIA QUE DEPENDERÁ DEL ESTADO EN QUE SE ENCUENTRE

METODO  1: AÑADIR AGUA DESTILADA  (BATERÍAS DE GEL O PLOMO)

Bueno la cuestión es que las baterías de plomo ácido  modernas  o las de gel  el electrolito está gelificado y absorbido en los aisladores de entre las placas, que en vez de ser rígidos, son una especie de paño sintético, son baterías «libres de mantenimiento».Con el correr del tiempo esta se secan, lo mismo que cuando las baterías del auto se quedaban sin agua. Así que el truco consiste en sacar los taponcitos de goma que hay debajo de la tapa que ya sacamos y reponerle líquido (pueden ser dos y hasta tres tapas, según el fabricante)

Para intentar reparar la batería necesitará:

  •  Jeringa de 3 cm
  •  Voltímetro o multímetro
  •  Cargador de batería o fuente de alimentación
  •  Los cables de cocodrilo «que se utiliza con la fuente de alimentación»
  •  Agua destilada
  • Muy importante por su seguridad : gafas  y guantes químicos

Atención !No toque el agua que puede salir  de la batería pues  es ácido que al ser tan  corrosivo podría generarle quemaduras muy graves

El método  es valido  para intentar reparar  baterías de gel, compuestas por ácido y plomo simplemente agregando agua destilada en sus celdas para reactivar su carga original pero también es funcional para baterías de plomo selladas.  El método   funciona en el 90% de  los casos pero en caso de recuperarla  la batería funcionará entre el 50% ~ 70% de la capacidad  que tenia.

 

PASOS A SEGUIR:

  1. En la batería sellada nos encontraremos con tapa en la parte superior de la batería:simplemente eliminarlo  poco a poco con un destornillador plano hasta el final donde  nos encontraremos con 3 agujeros cubiertos por tapas de goma. Ahora tenemos que eliminar esta capsula también.
  2. Ahora vamos a medir voltios de esta batería. Por ejemplo  puede ser una lectura de 0,76 voltios,lo cual quiere  decir que la batería esté completamente seco desde el interior
  3. Ahora lo que necesitamos en esta etapa es llenar la batería con agua destilada para activar el ácido de nuevo, por lo tenemos que volver a llenarlo con una jeringa poco a poco o hasta que el agua salga de todos los agujeros y medir la tensión:si  se encuentra que aumentó en mVolts, eso es bueno, así que no se  preocupe
  4. Después de llenar la batería con el agua que necesitamos para asegurarnos de que se mezcla con ácido seca dentro de la batería para reactivar de nuevo  ésta
  5. Debería utilizar cualquier  un cargador   adecuado  a la tensión de la batería y conectarlo  a los bornas
  6. Ahora bien, esperar 5 minutos hasta ver que las burbujas salen de los agujeros. Si no hay burbujas o provienen de cualquiera de los 3 agujeros puede  invertir negativo y positivo y esperar 1 ~ 3 min  máximo (ESTO ES MUY PELIGROSO POR LO QUE DEBE ESTAR PROTEGIDO  Y POR  ELLO  NO DEBE DEJARLA SOLA NI SOBREPASAR EL TIEMPO MÁXIMO DE 3 MINUTOS)
  7. Si salen de los agujeros demasiado rápido como hirviendo cortar de inmediato la alimentación y vuelva a conectar negativa y positiva la derecha de nuevo
  8. Cuando el proceso este regularizado ( salen burbujas por todos los agujeros ) ha terminado el proceso así que puede sacar el  agua no consumida de la parte superior de 3 agujeros con una  jeringa y dejar de cargar la batería
  9. No cubra los agujeros hasta que se recupere la  tensión de la batería (debería  comprobarlo  cada  hora)
  10. Cuando  se seque  el tejido ya puede  cubrir todas los agujeros   reponiendo todos los tapones sacados  en el punto 1
  11. !Felicidades su batería está funcionando de nuevo !

Si quiere saber mas detalles de este proceso  consulte este instructable

MÉTODO 2  :  USO DE UN PUENTE DE DIODOS  Y UN CONDENSADOR

Existe un método bastante práctico ,económico y bastante mas seguro que el método anterior para intentar reparar  todo tipo de baterías  (Pb ,Gel de Pb  ,NiCd, Li+, etc )

La versatilidad del  método es tal que incluso   puede ser  utilizado en caso de emergencia para recuperar combinaciones de pilas domesticas alcalinas,pero eso si ,solo  «pilas »  alcalinas ,basándose es que realmente este tipo de pilas ,aunque le parezca increíble , en realidad si son recargables.

Para intentar reparar una batería necesitará:

  • Un puente de diodos de potencia de 50A  y 10ooV ,como por ejemplo  el modelo KBPC 5010( puede conseguirlo aqui )
  • Un radiador para el diodo
  • Un condensador  entre 10mF a 50mf  1000V no polarizado (dependerá de la capacidad de la batería a recargar). Puede conseguir uno de 2omf y 400V aqui 
  • 2 bornas de cocodrilo
  • 1 cable AC

El Recuperador y cargador de baterías  se basa  en  que las baterías  dejan de admitir carga por la sulfatación de las placas, limpiando  mediante este sistema  el sulfato entre las placas reviviendo las baterías hasta un 85 % de cuando eran nuevas. En el 90 % de los casos son recuperables por bastante tiempo mas de uso usando este sistema

El circuito como puede ver en  el esquema de mas abajo ,no puede ser mas simple ,  pues  como adelantábamos,   solo se utiliza un puente de diodos de potencia ( es muy conveniente acoplarle de hecho un radiador ) y un condensador  no polarizado  de unos 400V  (normalmente usados en el arranque de  motores de alterna)

supercargador

Como punto muy importante,para seleccionar el condensador  es qeu debe estar dimensionado para que no proporcione mas de 1/1o la intensidad máxima soportada por la batería , es decir la batería debe ser cargada con un 10 % del amperaje total de la misma.

Por ejemplo  si la batería tiene una capacidad de 10 amperios/hora  (10AH) , la carga deberá ser como máximo de 1 amperio, regulándose precisamente este amperaje  con la capacidad del condensador (a mayor capacitancia, mayor amperaje de carga),resultando  el voltaje   de salida que recibirá la batería  variable yendo  acomodándose  a medida que adquiera carga

Es muy importante anotar  que la tensión de alimentación de  este circuito sera de 220 o 110 voltios de alterna por lo que habrá que extremar la precauciones  sobre todo a la hora de manipular el circuito,

Como referencia  tenemos aquí una tabla que relaciona  capacidades de condensadores para obtener la corriente necesaria:

4,5V ( 3 pilas AAA en serie) 1,5mF
 5,5V /4 pilas AA en serie)  1,5mF
 bateria de 12V 1,2AH  2,5mF
 Bateria de 3,7V Iones Litio 2,2AH  2,5mf
 Bateria de gel 12v 2,3AH  3,75mf
 Bateria de gel de 4v  4,5AH  5mf
 Bateria de gel 6v 5AH 5mf
 bateria de gel  12v 4,5AH  5mf
 Bateria de gel 12v  7AH  10mf
 Bateria de gel  12v 12AH  15mf
 Bateria Pb 12v  45AH  50mF
   

Nota: si no se dispone o no conoce la capacidad del condensador necesaria  empiece  por la mas baja  y vaya subiendo el valor de este. Si no dispone de condensador de la capacidad adecuada también puede asociar condensadores en paralelo para obtener la capacidad necesaria( en paralelo se suman las capacidades)

Es muy interesante  destacar que, como básicamente  el método para obtener la corriente adecuada esta basado en la experimentación , es muy interesante  que en la carga usemos un voltímetro  y un amperímetro para vigilar  tanto la tensión de la batería  como la corriente absorbida , variando en función de esto el condensador  siguiendo la regla de no superar 1/10 el valor de la capacidad de la batería.

Y un ultimo apunte:  el tiempo necesario dependerá de  la capacidad de la batería : como sabe la capacidad en amperios x hora y sabe la corriente aplicada  en amperios simplemente    tendrá que  dividir  ambos valores para obtener el tiempo en horas  necesarias para  que este cargado su batería

NOTA: Si la tensión es anormalmente alta o muy baja  es síntoma de que la batería no se puede recuperar…!lo siento!