Archivo de la categoría: Inteligencia Artificial

Computer Vision con R. OpenCV de andar por casa

Trabajando con Computer Vision aprecio que estamos muy limitados por las máquinas que usamos, o tiene mucho sentido montar GPUs en casa del tamaño del aire acondicionado y por supuesto no tiene sentido el consumo energético que implica. Aquí estoy yo montando una GPU para el análisis de imágenes.

Este tema implica que la Computer Vision no lo podrá usar el común de los data scientist, a los necesarios conocimientos técnicos y matemáticos se añade el disponer de unos recursos tecnológicos que no están al alance de cualquiera. Sin embargo, los conocimientos técnicos y matemáticos los puedes adquirir o puedes aprovecharte de los entornos colaborativos. Pero, podemos iniciarnos en el reconocimiento de imágenes con R y la librería openCV y si salen algunos temas en los que estoy enredando es posible que la reducción de dimensionalidad y la geometría nos ahorre máquinas y energía.

Vamos a emplear dos ejemplos para ver las posibilidades de openCV más R. Partimos de una primera imagen en la que hay 4 personas jugando al futbol y un balón está volando en el aire. Siento no saber de donde saqué esta foto, si tiene algún tipo de derecho hacédmelo llegar.

library(opencv)
library(tidyverse)

ub = "https://analisisydecision.es/wp-content/uploads/2020/11/futbol.png"

futbol <- ocv_read(ub)

Tenemos la imagen cargada y empezar por ocv_edges(futbol) para ver los límites de las imágenes:

Con ocv_face(futbol) podemos ver las caras que identifica Seguir leyendo Computer Vision con R. OpenCV de andar por casa

Optical Character Recognition (OCR) con R y tesseract

Una pincelada sobre Optical Character Recognition con R. El paquete tesseract de R permite aplicar el reconocimiento óptico de caracteres con R de una forma bastante sencilla, es uno de los múltiples líos en los que me estoy metiendo, si llega a buen puerto pondré más. Tenemos esta imagen:

Necesitamos tanto el paquete tesseract como el magick y ejecutando en R:

library(tesseract)
library(magick)

img <- image_read("https://analisisydecision.es/wp-content/uploads/2020/06/prueba_OCR.png")
str(img)
cat(image_ocr(img))
Tipos de uniones (join) de tablas con Python Pandas

By rvaquerizo | 16/05/2020 | No hay comentarios | Formacién, Monogréticos, Python

Recopilacién de las uniones més habituales con Python Pandas en una sola entrada. No se realiza equivalencias con sal join, la intencién es tener de
‘forma resumida los cédigos para realizar left join inner join y concatenacién de data frames de Pandas. Hay amplia documentacion esto es una
sintesis. Los data frames empleados para ilustrar [..]

Fácil en principio y parece tener problemas con las tildes. Si llegan a buen puerto mis proyectos iré poniendo algunas posibilidades más. Saludos.

Latent semantic analysis y la importancia de las matemáticas

Vivimos “días extraños”, tan extraños que en España se están planteando prescindir de la asignatura de matemáticas en la enseñanza obligatoria. Es evidente que las personas que gobiernan hoy (25/05/2020) España habrían suspendido matemáticas. Sin embargo, es curioso que haya pocos matemáticos ejerciendo cargos políticos, ¿puede ser que los matemáticos no tengan esa vocación por mejorar la vida de los demás? En fin, esta crítica a la ignorancia numérica y al egoísmo matemático me sirve de “extraña introducción” al Latent semantic analysis (LSA) como siempre los aspectos teóricos los podéis encontrar en otros sitios. Y todo este conjunto de frases inconexas hilan con la entrada en el blog de mi amigo J.L. Cañadas en muestrear no es pecado porque, reducción de dimensionalidad, el lenguaje y la importancia de las matemáticas es en realidad el Latent Semantic Analysis.

Si preguntas a un estadístico ¿qué es la reducción de dimensionalidad? Te contará lo que dice Cañadas, “analizar la varianza total de los datos y obtener las combinaciones lineales mejores en el sentido de máxima varianza” esto es lo mismo que preguntar a una persona que se ha leído un libro, “hazme un resumen en un párrafo”. En ese caso estás buscando una combinación de ideas que te permitan resumir un texto en el menor espacio posible, evidentemente asumes que te dejas cosas, estás asumiendo que las cosas varían, metes la menor variabilidad posible en un párrafo asumiendo toda la variación del texto. Entonces, todo ese follón de la reducción de dimensionalidad es algo parecido a un resumen objetivo de un texto algo que realiza cualquier persona cuando te describe un libro, un artículo o una anécdota. Las matemáticas pueden estructurar el conocimiento cognitivo que permite sintetizar un texto.

Programar el funcionamiento de un cerebro humano así a lo mecagüen es complicado, pero tenemos proyectos en marcha que ya están trabajando con ello, uno de estos proyectos es el paquete LSAfun que es capaz de realizar este tipo de síntesis. La idea es usar espacios semánticos para modelar relaciones entre los conceptos de un texto, podríamos emplear para ello la Wikipedia (por ejemplo). Es caso es que voy a emplear el paquete LSAfun para que me resuma la intervención de Pedro Sánchez en la última sesión del Congreso de los Disputados de España () porque la homeopatía política que vivimos está sustentada en un lenguaje completamente insustancial y que es posible que pudiéramos resumir en una sola frase:

#install.packages('LSAfun')

library(LSAfun)

ubicacion="c:\\temp\\intervencion.txt"
texto = read.table (ubicacion, sep="\r", encoding = 'UTF-8')
texto = toupper(texto)
genericSummary(texto, k=1, language="spanish", breakdown=T)


[1] " en particular el ministro de sanidad ha aprobado tres ordenes para fortalecer nuestro sistema nacional de salud tanto desde el punto de vista de los medios humanos como de los recursos disponibles en unas circunstancias tan extraordinarias como las actuales y en concreto ha ordenado las siguientes materias se ha aprobado la prorroga de la contratacion de los medicos residentes en el ultimo ano de formacion de algunas especialidades medicas y de enfermeria tambien especialmente criticas en la lucha contra el covid tales como la geriatria la medicina intensiva la microbiologia y la parasitologia se han suspendido las rotaciones de los medicos residentes para que estos puedan prestar servicios en aquellas unidades en las que se precise un refuerzo del personal se podra trasladar a medicos residentes de una comunidad autonoma a otra que tenga mayores necesidades asistenciales para la redistribucion de la asistencia en todo el territorio y se podra contratar de modo extraordinario y en algunos casos a personas con un grado o licenciatura en medicina aunque carezcan del titulo de especialista podra reincorporarse a profesionales sanitarios jubilados medicos y medicas enfermeros y enfermeras menores de setenta anos personal emerito y personal con dispensa absoluta para funciones sindicales todo ello para contar con el mayor numero de profesionales sanitarios en esta crisis en caso de que las circunstancias asi lo requirieran tambien se podra contratar de modo extraordinario a estudiantes de los grados de medicina y de enfermeria en su ultimo ano de formacion con el fin de realizar labores de apoyo y auxilio sanitario bajo la supervision de otros profesionales"

Afortunadamente la función genericSummary reconoce el lenguaje español aunque imagino que los espacios semánticos estarán menos desarrollados. Ahí tenemos todo un día de trabajo resumido en una frase que recoge las ideas clave de la sesión del Congreso. Aprovecho desde aquí para alentar a alguna compañía a realizar un análisis de las intervenciones desde el inicio de la democracia en España hasta ahora, sería una competición de datos (hackathon en lenguaje soplapollístico) muy interesante. Saludos.

Inteligencia Arficial frente a un juego de niños. La partícula tonta de Nicolás

Pablo Picasso decía que en aprender a pintar como los pintores del renacimiento tardó unos años pero pintar como los niños le llevó toda la vida y en ocasiones creo que hacemos las cosas difíciles porque nos creemos que hacemos cosas difíciles y entonces llega un niño de nueve años y dice “Papá un punto que primero vaya a la izquierda y luego a la derecha no es tan difícil”.
Os pongo en antecedentes, el pasado 7 de mayo fui al AWS Summit de Madrid porque Sergio Caballero iba a contar uno de los casos de uso. Los de AWS no se deben ni imaginar de las maravillas que ha hecho Sergio en el Ayuntamiento de Alcobendas porque sólo dejaron que hablara 10 minutos, muy torpes ellos, su trabajo es mejor escaparate que el planteado por Mai-Lan Tomsen, un error en el planteamiento de la jornada. El caso es que había una “competición” de vehículos que circulaban por un circuito guiados por complicados algoritmos de inteligencia artificial. Vimos algún “bucanero serio” de alguno de los participantes, ya sabemos reinforcement learning, pero reinforcement reinforcement. Otros participantes más o menos honrosos, en fin, distraído. Viendo la competición me entraron ganas de participar y al llegar a casa me siento a preparar un algoritmo que recorriera el circuito del Jarama de Madrid, no un circuito cualquiera un circuito donde yo he visto ganar carreras a Jorge Martínez Aspar.

Portátil y R, empiezo mi trabajo con imager, busco en la Wikipedia el circuito, lo cargo, genero un data frame, selecciono puntos y comienzo a diseñar mi propia estrategia de reinforcement learning combinadas con técnicas de machine learning, algo como “SVM direccionables” se acerca por detrás mi hijo y me suelta “Papá un punto que primero vaya a la izquierda y luego a la derecha no es tan difícil”. Bueno, pues en 20 minutos sale esto:

De momento no funciona pero no me digáis que no es genial la idea, lo que hace con pocas líneas de código y una consulta en sql. En el repositorio de analisisydecision tenéis el código en R que realiza esta maravilla, he llamado al código partícula tonta y tiene aspectos interesantes en cuanto al uso de la librería imager de R para el tratamiento de imágenes y como transformo una imagen en un data frame de coordenadas y por supuesto la genial idea de Nicolás.

Por cierto, al ver el resultado Nicolás dijo que no sólo derecha e izquierda, también era necesario un arriba y abajo. Tengo abandonado el proyecto, como muchos, pero la anécdota me ayudó en mi trabajo.