28 de abril de 2008
Idea para informáticos
A esos ingenieros españoles del software que aún no han hecho un proyecto de relevancia internacional, me gustaría darles una idea para un revolucionario buscador: ¿por qué no buscar, además de en el texto, también dentro de las imágenes? Lo digo porque sabéis que Google es muy bueno buscando texto, pero al buscar fotografías simplemente busca el texto que rodea a esa foto y os la saca. Esto es un poco chapuzas y genera muchos resultados irrelevantes.

Si una imagen es una ristra de bytes, lo mismo que un archivo de texto, ¿por qué no se puede comparar esa ristra de bytes con el criterio de búsqueda igual que con el texto? Claro, el criterio de búsqueda sería una imagen y los resultados serían imágenes. Dirá algún informático que eso es imposible porque los recursos de CPU que consumirían tales búsquedas lo harían inviable. Claro, esto es lo que decían los de Altavista cuando alguien les pedía buscar el texto en toda la página y no sólo en las palabras claves. Por eso salieron los de Google y los arrasaron. También eso dijeron los de Flickr cuando alguno les propuso hacer lo mismo que con las fotos pero con vídeos, salieron los de Youtube y los arrasaron. Siempre hay formas de optimizar los recursos de hardware, y al mismo tiempo ese hardware no deja de bajar de precio.

Haced el buscador de imágenes en lenguaje C y montadlo en una red de servidores linux con buenos procesadores. Luego lo rentabilizáis con anuncios tipo adwords. El perfil de ingeniero que puede hacer bien eso es un ingeniero de sistemas más que de software, porque el software lo puedo hacer hasta yo.

Os digo cómo funciona: en lugar de una caja de texto, un campo "file" para subir la foto que quiero comparar. A partir de ahí, arroja resultados: foto 1, coincidencia del 98%; foto 2, coincidencia del 93%; etc. Sacaría esas fotos muy similares independientemente del tamaño y si las hubiesen recortado. Claro, con un buen software sería capaz de encontrar bloques coincidentes de bytes de manera que aunque las hubiesen recortado el buscador las encontraría.

¿Y para qué serviría ese buscador? Para encontrar qué se hace por ahí con mis fotos, dónde han puesto mi cara y si alguno está en badoo poniendo fotos de mi ex novia. Y también me sería muy útil para nuevosamigos.net, porque la gente sube fotos que no me acabo a veces de creer. Y antes o después aparecerá el problema de las fotos de terceros.

08:37:22 ---------------------  

2016 en Denia (Alberto Noguera)
El implacable retrato del desencanto y la corrosión de las ilusiones en la España de principios de siglo.
Comprar por 3,59€ en Amazon.

61 comentarios:

Yop:
Ya se está haciendo.
28 de abril de 2008 a las 09:08.  

 alberto 
:

¿está "en construcción"? ¿Me puedes decir dónde?
28 de abril de 2008 a las 09:09.  

eLAKESYS:
Algo así:
http://www.xcavator.net/
28 de abril de 2008 a las 09:27.  

 alberto 
:

No, así no: el criterio de búsqueda debería de ser una imagen. Como dijo ZP: "SÍ que se puede haZer".
28 de abril de 2008 a las 09:39.  

Javier:
Algo así tengo entendido que es lo que usa la guardia civil para rastrear los archivos de contenido pedófilo
28 de abril de 2008 a las 10:48.  

barbol:
cuidado, altavista buscaba en toda la página, no sólo en keywords. no hay diferencia entre cómo trataba altavista la página y cómo lo hace google. lo que pasa es que google tiene una capa social que no tenía el otro.

buscadores de imágenes partiendo de imágenes he visto unos cuantos, siempre experimentales en universidades, alguno habrá por ahí tratando de despuntar pero no integrado en un gran buscador. eso seguro.
28 de abril de 2008 a las 11:06.  

yo:
adelante si tanto sabes...
28 de abril de 2008 a las 11:16.  

Manué:
Alberto, los contraejemplos que has puesto a lo de "eso no se puede hacer" consisten en proyectos que cualquier tonto con muchos recursos podría haber hecho. Lo de Google es sólo una búsqueda en un contenido mucho más amplio (más CPU) y lo de Youtube es un alojamiento de archivos mucho más grandes (más disco duro). Para lo que tú propones es necesario, además, más inteligencia humana. Hace falta utilizar unos algoritmos complejísimos que pocos equipos humanos saben desarrollar, aunque hay abiertas desde hace muchísimos años miles de líneas de investigación en ese sentido. Las más avanzadas están en manos de empresas privadas, que cobran millonadas cada vez que montan el sistema de CCTV de una red de metro o de un aeropuerto.

Por otro lado, estos sistemas tampoco son mucho más complejos que Google Earth. Por lo tanto, lo que cabe esperar es que Google o alguien por el estilo compre uno de estos proyectos y lo ofrezca como servicio gratuito.
28 de abril de 2008 a las 11:18.  

Florecilla Silvestre:
Me extrañaría que un equipo de google no se haya puesto a ello hace ya tiempo. Uno de los problemas es que no serviría de nada buscar imágenes idénticas (en tal caso, una clave hash por imagen daría y sobraría). Para hacer la cosa interesante, el algoritmo debería permitir hacer match de imágenes semejantes, lo que significa imágenes con distinto tamaño, con manipulaciones cromáticas e incluso rotadas. En mi opinión deberías dividir en bloques, descartar la componente de color y hacer subsampling. Luego, transformada Fourier o wavelet y mecanismo de matching basado en mínima distancia cuadrática o asín. De esa manera, podrías introducir el típico thumbnail en blanco y negro y obtener matchs de la base de datos con la imagen a mayor resolución en color. Esto obligaría a mantener una base de datos enorme con muchas imágenes y luego un monton de bloques de datos derivados de cada imagen usados en el proceso de match. Contendrían las transformadas 2d de los segmentos de dicha imagen rotados en distintos ángulos y después de hacerles subsamplings (zoom out) a distintas distancias.

Si te he escrito esto así, a bote pronto, es porque a un montón de tipos mas se les ha ocurrido el proceso que te he dicho e incluso mejor (no hay informáticos sueltos por ahí ni nada ...). Seguro que si haces una búsqueda en las típicas revistas de la IEEE y la ACM te encuentras un par de papers de gente que ya lo han intentado.

A propósito, que la potencia de proceso requerida para un sistema así sería de proporciones burbujiles. Pero de la del tulipán.
28 de abril de 2008 a las 11:32.  

Davor:
Menuda tontuna de idea. El tener que comparar con una imagen es una idea erronea de base, y el proyecto nace muerto por usabilidad cero. No niego que puede ser util para las cuatro cosas que Alberto quiera hacer, pero no servirá practicamente para nada mas.

Ademas, me parto. Me gustaría ver eso de que 'el software lo puedo hacer hasta yo'. Fantasmada 100% de informático frustrado. Igual que mezclar la idea, los requerimientos funcionales, y una especificación técnica tan vaga como 'hacedlo en lenguaje C y con servidores linux'.

Eso en mi tierra es oir campanas pero no saber donde.
28 de abril de 2008 a las 11:55.  

Ramiro:
Cada letra de un texto es 1 byte (8 bits), y cada pixel de una imagen decente puede tomar un color de una paleta de 65536 colores (65536 bits). Si buscamos "hola" tenemos 32 bits para comparar y si búscamos una imagen jpg de 31kb con una resolución de 425x285 píxeles tenemos 7.938.048.000 bits para comparar. Si Google tarda medio segundo en darte resultados para 32 bits, ¿cuanto tardará para esa bestialidad de bits?

Yo creo que hoy por hoy la idea no es buscar imágenes por comparación de todos sus bits (no tenemos todavía capacidad óptima), pero sí se podría generar un patrón poligonal de una imagen para minimizar la cantidad de información a buscar y compararlo con otros patrones generados de otras imágenes. Sería como indexar matemáticamente polígonos que corresponden a imagenes.
28 de abril de 2008 a las 12:00.  

InTheater:
alberto, permiteme responderte, la idea de basse muy buena (creo que ya la han pensado varias personas antes), pero la ejecucion se torna casi imposible

lo que comentas, creo que se llama "reconocimiento de patrones graficos", y solo a modo de apunte...
- haria falta recodificar todas la imagenes a un formato compatible en el cual los bitas a buscar tuvieran significado antes de ser "decodificados" por el plugin en cuestion (sobre decir que los bites de la misma imagen en BMP, JPG standard y JPG progresivo poco tienen que ver)
- haria falta "re-editar" todas las fotos de forma que mostraran unos patrones similares, basta decir que la misma cara girada unos 15 grados, o en espejo poco tendra que ver con la original

y esto solo el principio,
te sigue pareciendo tan simple ??

(una verdadera suerte que nuestro cerebro no trabaje ni en bits, ni en codecs... y hasta aqui puedo hablar)
28 de abril de 2008 a las 12:02.  

Vodkitar:
Hola Alberto.

Creo que te estás metiendo en un terrerno pantanoso que no es el tuyo. Tu idea "revolucionaria" no lo es tanto ya que se lleva varios años trabajando en un tipo de buscador de imágenes alternativo a la indización vía texto. Esto no es nuevo, como digo, ya se conocen las limitaciones de las búsquedas por texto y hay diversos proyectos a cabo en los que los informáticos están trabajando mano con mano con los bibliotecarios (mis colegas); el que me ha parecido más llamativo es el de IBM llamado QBIC (Query by Image Content)

http://www.hermitagemuseum.org/fcgi-bin/db2www/qbicSearch.mac/qbic?selLang=English

Me gustaría que le echases un vistazo porque se trata de un buscador experimental que rastrea las imágenes mediante formas y colores y que resulta muy novedoso. Como ves, ya se está trabajando en este tema (desde 1998), te dejo una referencia a un artículo de una revista del ramo:

http://www.elprofesionaldelainformacion.com/contenidos/1998/noviembre/el_tratamiento_documental_de_la_imagen_electronica.html

Como ves no es nada nuevo.

Por otra parte tienes Piclens que es un addon para los navegadores que no soluciona el problema de la indización, pero que sí mejora seniblemente la navegación por los resultados de Flickair o google, te recomiendo que lo pruebes porque es bastante espectacular.

Un saludo, espero que sea de tu interés.
28 de abril de 2008 a las 12:07.  

uno que pasa:
Esa idea es más vieja que el mear. Anda que no hay equipos de investigadores trabajando en ello desde hace mucho y muchos años.

Hartos están los investigadores en procesamiento de imágenes e inteligencia artificial para que llegues tú con "el perfil de ingeniero que puede hacer bien eso es un ingeniero de sistemas más que de software, porque el software lo puedo hacer hasta yo."
28 de abril de 2008 a las 12:44.  

roke:
Quizás sería mejor buscar "trozos" de fotos puesto que en realidad entre fotos (por iluminación, contraste, etc...) ya hay suficientes diferencias. Quizás fuese algo parecido a lo que se hace en genética con las búsquedas de fragmentos de genes, tú buscas trozos y luego a partir de ahí puedes localizar genes o genomas completos..es lo que se hace en los blast...
28 de abril de 2008 a las 13:00.  

Manolo:
Alberto, hace tiempo que Google y otros estan haciendo pruebas.
http://feeds.feedburner.com/~r/Techcrunch/~3/279191749/

Esta noticia tiene unos dias, y hace al menos 2 años que regularmente leo sobre el tema.

Si alguien puede hacerlo es Google, lo veo complicado viniendo de estudiantes españoles, y en C....

Como inventor me parece que no te ganarias el sueldo
28 de abril de 2008 a las 14:09.  

Chinchao:
A parte de que no creo que sea un tema que pueda investigar fácilmente una pesona, sino mas bien un equipo de desarrolo, creo que google ya esta mirando el tema :).
http://google.dirson.com/post/2767-google-adquiere-neven-vision/
y de hecho segun dice este sitio hasta ha integrado algo de esa tecnologia en el buscador de imagenes:
http://sacovicios.blogspot.com/2007/06/google-y-el-reconocimiento-de-imgenes.html
28 de abril de 2008 a las 14:39.  

 alberto 
:

Sois una especie de festival del humor: casi nadie ha entendido lo que realmente quiero hacer. Aunque Florecilla Silvestre sí: "una clave hash por imagen daría y sobraría". Y muy interesante lo que dice Javier: la Guardia Civil podría ya estar utilizando eso para detectar pornografía infantil.

Se trata de buscar exactamente la misma imagen, creo que el programa ImageMagick lo sabe hacer. Lo otro por supuesto que lo entiendo complicado. Hay un libro que se llama "Homo Cybersapiens" que explica esos temas de la inteligencia artificial y se mete mucho en el tema de las redes neuronales, que supongo que será lo que investiguen por ahí.

Bonito también el que dice: "las cuatro cosas que quiere hacer Alberto". Pues esas cuatro cosas pueden hacer rico a alguien. Pero vosotros tal vez prefiráis proyectos hispanos de más enjundia.
28 de abril de 2008 a las 14:46.  

pepefernandez:
Si de comparar patrones se trata y detectarlos en el menor tiempo posible, no es la via algorítima el mejor camino, sino las redes neuronales artificiales acopladas a algun filtro, como alguien ha sugerido, probablemente wavelets.

Esta es la tecnología que se utiliza para reconocimiento de voz, escritura de cartas(en correo), reconocimiento de imágenes. Incluso han diseando ultimamente un tipo, basada en las de Kohonen -bonito nombre- que tienen capacidad de autoentrenamiento.

Por aquí van los tiros, saludos.
28 de abril de 2008 a las 14:58.  

Davor:
Por lo visto Alberto, has descubierto la rueda por leerte cuatro libros pseudo informaticos. Prueba a leer algo de reconocimiento de imagenes (libros serios) antes de rebuznar tantas tonterias. Verás que sencillo es ese 'software que puedes hacer hasta tú'.

El perfil de ingeniero... que sabes tu de ingenieria, maestrillo?

De verdad piensas que tu idea es lo más mínimamente original?
28 de abril de 2008 a las 15:10.  

 alberto 
:

Ya veo que eres uno de esos info-palangana-mático que llora por su bajo sueldecito y porque hay "intrusismo" en las páginas PHP. No entiendes ni tan siquiera lo que quiero decir, y luego vienes con "usabilidad cero". ¿Tú sabes lo que es la usabilidad?

Y luego me llamas "maestrillo": ¿pretendes que me avergüence de mi trabajo como educador y envidie tu puestecillo pica-código? Anda y cierra ya el navegador, que se nos baja la productividad.
28 de abril de 2008 a las 15:39.  

Anónimo:
Por favor Alberto, no seas prepotente. Vamos a ver yo trabajo para una empresa de ingeniería que se dedica a las búsquedas, tiene un sistema de anuncios y colores infantiles en el logo, como se llama, si esa gorda, si esa, ah! google. La idea que has tenido la ha tenido varía gente antes. Mira esto http://labs.systemone.at/retrievr/ , hay tambien un proyecto gnu http://www.imgseek.net/.
Algo mas aquí de info aquí http://en.wikipedia.org/wiki/CBIR

Te puedes leer la documentacion y la investigación en la que se basa, pero yo creo que no es trivial. O por lo menos para mi. Y yo curro en esto.
28 de abril de 2008 a las 16:04.  

Davor:
Verás, ni lloro por mi bajo sueldo (45 mil libras esterlinas al año), ni tengo un puestecillo pica-codigo, de hecho hace tiempo que no toco una linea de codigo, asi que has dado en hueso. Y tengo 27 años. Tampoco he necesitado picar PHP en mi vida.

He acabado entendiendo la idea esa que has parido (despues de varias aclaraciones con los comentarios, muy bien no te has explicado de principio), y me reafirmo en que ni has leido una sola linea de algo parecido a un libro de ingeniería de software, ni tampoco has leído una sola publicación técnica. Tu idea tampoco es original.

También leo entre lineas un desprecio implícito hacia los informáticos. Hay muchos que somos algo mas que picacodigos, pero es que hasta los picacodigos tienen muchísimas cosas que enseñarte en este (nuestro) terreno.

Te metes en terrenos que no son los tuyos porque has leido cuatro publicaciones de pseudo ciencia informatica.

Mejor hablanos de astrologia, anda...

PS: Releyendo, he visto que lo de maestrillo estaba fuera de lugar. De hecho respeto bastante a los maestros, y por ese término, mis disculpas.
28 de abril de 2008 a las 17:14.  

Jouss:
Google ya lo está intentando

http://www.nytimes.com/glogin?URI=http://www.nytimes.com/2008/04/28/technology/28google.html&OQ=_rQ3D3&OP=65ee9c5cQ2FQ51Q24XHQ51Q5BsQ3EQ2AtssvQ2BQ51Q2BYYQ27Q51YQ25Q51Q2BQ27Q51vXQ3E71sxs-Q7DQ51Q2BQ27-ss-xXQ3A7vEx

http://digg.com/tech_news/VisualRank_Google_algo_rankin_images_tht_look_most_similar
28 de abril de 2008 a las 18:02.  

miguel:
Alberto, creo que no sabes mucho del trabajo de un "ingeniero de software". La gestión de un proyecto como el que se comenta , incluye la participación de diversos perfiles. "Picacodigos" , matemáticos, ingenieros de sistemas y por supuesto, la ingenieria de software aunando y gestionando los esfuerzos de todos. Pensar que el trabajo de un ingeniero informático lo puede hacer cualquiera, y es picar y picar codigo, es pensar , que por construir un cobertizo eres arquitecto.

Respecto a la idea, es eso. Una idea, pero lo que importa en estos casos, es la implementación.

Recomiendo a todos un libro sobre ¿emprender? titulado "El libro negro del emprendedor" , en el que se abordan los que a juicio del autor, son los errores mas comunes en las personas que emprenden un proyecto de negocio.

Y uno de ellos es creer que la idea lo es todo.

La web semantica es una de ellas, y los buscadores que realicen busquedas de este tipo, una idea mejor todavia. El problema, como siempre es la implementación.
28 de abril de 2008 a las 18:14.  

Victor:
En los sistemas de gestión documental ya existe, principalmente en los de medios de comunicación.
Hasta Canal 9 lo tiene (o eso nos aseguraba la profesora en la uni).
Básicamente funciona tal cual comentabas, le metes la imagen, analiza los bits que la conforman y busca en la BD similitudes.
28 de abril de 2008 a las 19:13.  

eljos:
Ya se utiliza ese sistema pero en ámbitos restringidos, por ejemplo, la policía y la interpol para buscar imágenes robadas, para identificar huellas, para validar usuarios por el iris, etc.

Para que cualquiera se entretenga por internet, no es que no se le haya ocurrido a nadie, es que es absurdo. ¿y tú cómo usuario vas y pintas un garabato y haces la búsqueda, no?

Saludos.
28 de abril de 2008 a las 20:08.  

astronauta:
Me dedico a algo parecido a lo que comenta el anónimo de las 16:16h.

Respecto a los "hashes", no tiene sentido hacerlo de una imagen completa, salvo para buscar copias idénticas de la misma. Para buscar subimágenes, incluso escaladas, lo que se hace es convertir la imágen "objetivo" ("target") en un conjunto de vectores representativos, a partir de estos vectores, puedes generar un primer nivel de indexación, para simplificar las comparaciones posteriores. Comparar "bytes" o "pixels" para localizar similitudes entre imágenes es absurdo, es la geometría lo que permite amortiguar la complejidad de las imágenes.

Sobre lo de hacerlo en "C", que si bien me gusta y me gano el pan con el C/C++, el lenguaje es eso, un lenguaje, no tiene nada "mágico". Lo importante es la algoritmia y las estructuras de datos.

El análisis de patrones no es algo que se aprenda en un par de tardes, de la misma manera que un médico de familia no sabe operar a corazón abierto.

He estado a punto de no contestar, pues tu exposición, me ha parecido un insulto a la inteligencia. Sin acritud te lo digo (no hace falta que publiques este post).
28 de abril de 2008 a las 22:36.  

Manu:
Buenas Alberto
Como Zapatero te metes en algo que te queda grande, el tema del software. Pero todo es empezar.

>Se trata de buscar exactamente la misma >imagen

1- Eso es trivial. Trivial.
2- No sirve para nada porque una pequeña alteración nos hará muy difícil encontrar la imagen modificada. Como ya han dicho antes grandes mentes están en ello y la cosa está en pañales.

Saludos
29 de abril de 2008 a las 01:58.  

Nerec, el psicopedabobo:
Ni idea del tema, me parece que Alberto ha desbarrado.
Eso sí, cómo se pica alguien que tiene motes para todas las profesiones cuando le toca el turno a él.
Es la pata coja de éste buen comentarista, periodista, qué vamos a hacerle. Al menos aquí sí que han caído muchos comentarios negativos, eso le honra.
29 de abril de 2008 a las 11:16.  

Edgar:
Soy casi ingeniero informático (superior) y lo que plantea Alberto es una buena idea. Incluso factible aunque la búsqueda no sea 100% aproximad :)

Se podrían pasar las imágenes de la BD a una resolución fijada en formato fijado (para ocupar menos, 480 de altura y la anchura pues la proporción que tuviera antes y en formato JPG).

Igualmente, en este país no creo que nadie tire eso adelante aunque se pueda (aunque sea un problema de fuerza, sería un algorismo voraz; creo que un clásico depende de las limitaciones que le pongas, no buscaría del todo bien pero menos es nada)
29 de abril de 2008 a las 12:27.  

Manu (The Java Real Machine):
Alberto, si te refieres a buscar la misma imagen, sí puede ser viable...

Pero habría que tener en cuenta que algo tan sencillo como coger una imagen, un jpeg por ejemplo, y guardarla de nuevo con alguna leve modificación, ya nos generaría un archivo distinto a nivel de bits... por no hablar de cambiar el formato (de jpg a gif, o a png).

Y eso conllevaría a que la clave HASH generada para el archivo original, fuese distinta de la clave HASH de la copia del archivo...

Por ello en lo que se investiga es en identificar patrones en la imagen, y almacenar esa información para la indexación...
29 de abril de 2008 a las 12:33.  

Informatico alucinado:
Noticia de anteayer:

http://www.nytimes.com/2008/04/28/technology/28google.html
29 de abril de 2008 a las 14:18.  

Jose:
Informate un poco antes de hablar sobre ciertas cosas. Lo que tu planteas como una gran idea, hace tiempo que se esta planteando en investigacion (informate sobre "vision por computador", "tratamiento de imagenes" y temas similares), y por cierto es un problema que aun sigue abierto. El problema no es que una busqueda consuma muchos recursos (que tambien), sino que comparar dos imagenes punto por punto (ponle un hash si quieres) no da buenos resultados, porque hay diferencias de iluminacion, escala, ruido y un sinfin de cosas mas que requieren que el algoritmo de comparacion tenga una cierta "inteligencia". Vamos, que lo que tu propones no es que no se haya probado , de hecho mucha gente lo esta intentando solucionar (como Google), el problema es que es dificil! (Un poco mas de informacion y rigor hubiese venido bien).
29 de abril de 2008 a las 14:18.  

Somary:
Me estoy volviendo un asiduo de tu blog...

Es posible que una de las respuestas a tu idea es Quaero!

http://en.wikipedia.org/wiki/Quaero

"[...] According to an article in The Economist[4], Quaero will allow users to search using a "query image", not just a group of keywords. In a process known as "image mining", software that recognises shapes and colours will be used to look for and retrieve still images and video clips that contain images similar to the query image. (The software is supplied by LTU Technologies.) A technique called "keyword propagation" will be used so that when Quaero finds a descriptionless image which contains elements of or completely matches a properly labelled image, it will append the description from the labelled image to the unlabelled one. This will ensure faster searches and a definite enrichment of the web, also linguistically, as the primary interface and query terms were supposed to be in French and German."

Lástima que esta iniciativa fuera semi-abandonada. Se ha oido poco de ella desde hace un par de años...

Alemania se bajó del carro en Diciembre de 2006.

http://www.elpais.com/articulo/economia/Alemania/abandona/buscador/europeo/Quaero/elpepuint/20070104elpepieco_12/Tes

Estos alemanes siempre tan centrados...

En mi humilde opinión y desde fuera, Quaero parece otro proyecto "ad-hoc "lanzado por los burócratas de Bruselas y algunos listos oportunistas de la industria para sacarle los cuartos a los incautos ciudadanos de la Unión Europea...

En pocas palabras: un sumidero de pelas públicas despistadas...

Veremos que da la industria.
29 de abril de 2008 a las 15:07.  

Anónimo:
Edgar,
Lo que propones es muy fragil, inmaginate que simplemente alguien cambia un poco la luminosidad de la imagen (esto es facilisimo simplemente con el gamma) y tu busqueda de comparacion binaria a la mierda. Hay dos cosas que hacemos mejor los humanos que las maquinas, una es el reconocimiento de patrones, lo otro es decir tonterias ;) .
Mirar si es asi que para saber si hay un humano al otro lado usamos imagenes con textito (los famos captchas) y ahora quieren cambialos por fotos de perros y gatos y solo tengas que decir si es perro o gato.
Que llegaremos a eso, por supuesto, pero que nos queda un poco, tambien.
Y que los clusteres de google estan haciendo algo de eso ahora, puede ser (como lo estan haciendo los de MS o Y!).
29 de abril de 2008 a las 17:15.  

Hartley:
Alberto, la idea que has comentado es bastante buena, pero lamento decirte que hay gente que lleva trabajando bastante tiempo en esto. Un tipo llamado Andrew Zisserman, de la Oxford University, algo así como el puto amo de la visión por ordenador, mostró una demo de un google que usaba imágenes como querys hace unos 5 años. La verdad es que funcionaba bastante bien, y por lo que veo en su página (http://www.robots.ox.ac.uk/~vgg/research/) parece que tienen mas cositas hechas. Ya vereis como esto no es dinero desperdiciado (como tampoco lo eran los algoritmos usados por google u otros buscadores).
29 de abril de 2008 a las 23:54.  

EL_MALIGNO:
Por favor, no seáis duros con Alberto. Ha propuesto una idea con una alta dosis de originalidad y debemos respetar su creatividad y capacidad de innovación, aunque haya intercalado en su escrito un comentario desafortunado para la imagen de los ingenieros.

Es cierto que existen grupos de trabajo internacionales que abordan ideas similares a las suyas, pero creo que nosotros como ingenieros deberíamos presentar una solución al problema que plantea y no entrar en el terreno de la descalificación (eso está al alcance de cualquiera).

Aquí mi aportación, a ver si entre todos somos capaces de esbozar unas especificaciones y apuntar una solución al problema.

**Objetivo**
Construir una herramienta de búsqueda de imágenes idénticas en Internet.

**Interfaz**
La herramienta presenta interfaz web similar a la del buscador google.

**Input/Output**
La herramienta admite como entrada un fichero de imagen. La salida es una lista de links que apuntan a direcciones web que usan la imagen buscada.

**BD**
Recomiendo un motor sólido estilo Oracle que permita particionar tablas

**Principio de funcionamiento**
Los buscadores actuales son buenos localizando cadenas de texto pero no sirven para localizar archivos binarios por contenido. Propongo por tanto, parsear el contenido binario del fichero de imagen en una cadena textual, así transformamos un problema desconocido en un problema conocido.

El parseo textual es algo que se hace para incrustar imágenes dentro de ficheros XML. Existen varias bibliotecas que permiten convertir un binario en una cadena textual (números y letras) Yo he trabajado con alguna de ellas y funcionan OK.

Cada imagen binaria sería sólo una palabra textual (muy larga) del estilo de "Zxj7ya6u2yy26ajdloDDrhh..".

**Indexación**
Un proceso automático localiza imágenes en la red y actualiza la BD.

Por ejemplo, las imágenes se guardarían en una tabla llamada IMAGEN que contiene 3 campos:

#Imagen2Text -->(Imagen textualizada)
#URL --> (URL de una web que usa la imagen)
Descripción --> (Comentario)

El símbolo # indica que el campo pertenece a la clave principal.

**Funcionamiento de la búsqueda**
La búsqueda se reduciría a encontrar palabras dentro de una BD:

*El usuario sube un fichero de imagen
*Un algoritmo parsea la imagen subida en texto (miImagenATexto)
*Se buscan todos los registros de la tabla IMAGEN cuyo campo ImagenATexto sea igual a miImagenATexto
*Se devuelven los resultados al usuario en formato HTML. Los resultados incluyen un link a la URL que contiene la imagen y una descripción textual

**Maqueta**
El problema es el tamaño de las imágenes, que daría como resultado palabras de varias Ks o cientos de Ks.

Oracle y otras BD disponen de tipos de campos para gestionar objetos o cadenas de texto de gran tamaño sin penalizar demasiado el rendimiento. Por tanto debemos poder salvar este problema

**Maqueta**
Se puede realizar una maqueta incial orientada en primer lugar a localizar iconos (más fáciles de manejar por su pequeño tamaño)

La tabla IMAGEN podría estar poblada a mano con un juego de pruebas.

Incluso para simplificar, se podría renunciar a la interficie web en la fase inicial de la maqueta

***********

Aquí mi solución, en estado embrionario.

Si alguien se anima podemos redactar unas especificaciones en serio.
30 de abril de 2008 a las 06:06.  

 alberto 
:

Muy bueno. Tan sólo cambiaría dos cosas: la salida, en lugar de una lista de links deberían de ser las mismas imágenes reescaladas al tamaño que nos gustase y debajo el URL para poder pinchar; y en cuanto a la base de datos, PostgreSQL podría funcionar sin problemas. Si es para buscar un campo que sea exactamente igual que otro, por muchos megas que ocupe, lo va a encontrar casi inmediatamente. El problema vendría luego, cuando quieres encontrar partes de esa imagen, para ver si la han podido recortar. Y lo de encontrar la imagen aunque la hayan redimensionado, ya sería harina de otro costal. Lo de los cambios de luz, etc. ni me lo planteo porque no lo hace nadie. Si lo hacen para evitar tu buscador, es porque tu buscador ya es famoso, y por tanto ya llevas mucho ganado.

Un saludo.
30 de abril de 2008 a las 09:07.  

otro:
Alberto, me parece que no tienes ni idea del esfuerzo computacional que puede suponer identificar algo tan simple como un perro en una imagen.

Para que te hagas una idea toma como ejemplo los OCR, incapaces en la mayoría de ocasiones de distinguir una palabra dependiendo de la letra con que se escriba.

Youtube era imposible sin el ancho de banda actual, es una cuestión de volumen, no de tiempo de proceso.

Google vs yahoo...menudo ejemplo...no hay dificultad computacional, solo volumen.

Por otro lado, la busqueda de imágenes de google funciona bastante bien, al menos a mi siempre me ha servido.
30 de abril de 2008 a las 09:52.  

 alberto 
:

A ver si nos leemos la entrada bien antes de entrar a decir que no tengo ni idea. Es la tercera vez que repito que el buscador no buscaría imágenes parecidas, ni leer letras dentro, ni saber si es un perro o un gato. El buscador buscaría exactamente la misma imagen, nada más y nada menos. El esfuerzo computacional empezaría cuando quiero saber si la imagen ha sido recortada o redimensionada, hasta ahí llegaría, no iría más allá.

Lo de Youtube ya lo dije yo: trabajo para un ingeniero de sistemas, no para un programador. "El ancho de banda actual" cuando se montó Youtube todo el mundo creía que era inviable, pero ellos lo consiguieron hacer viable porque se supone que entendían del tema. Y la búsqueda de imágenes de Google funciona bien cuando lo que buscas es texto, no funciona bien cuando el parámetro de búsqueda es esa misma imagen. Se trata de hacer algo diferente, no sustitutivo. Pero ya veo que los españoles no lo vais a hacer. Ahora mismo voy a colgar ese mismo post en inglés en algún foro de informáticos norteamericanos, y si la respuesta es como me imagino, preparaos porque hace tiempo que tengo ganas de deciros cuatro cosillas a los informáticos españoles y a esa superioridad que creéis tener sobre los de letras.
30 de abril de 2008 a las 11:22.  

BLASTER:
Los informáticos españoles,legión que se cuenta por miles,son un fracaso.Le hemos pagado la educación con nuestros impuestos a unos tios que en conjunto no han dado nada.Van directos a poner un ciber (que también podría poner yo,si no crean un "colegio" que me lo impida) o pierden el tiempo jugueteando con Linux para hacer como que se distinguen de la masa ignorante.No hay niguna razón por la que You Tube o e-bay no se le hubieran podido ocurrir a un español.Y se permiten despreciar a Bill,Steve y el "mito" del garaje.Que se preparen de una vez sus oposiciones de auxiliar administrativo y nos dejen de dar la murga con su Linux.
30 de abril de 2008 a las 11:44.  

Nerec:
Por favor, dinos dónde para que también podamos leer las respuestas.
30 de abril de 2008 a las 12:42.  

waterhouse:
A ver, que esto se está desmadrando. Un par de cosillas. La primera, es que el proyecto, tal y como lo plantea Alberto no es complicado. Buscar exactamente la misma imagen que das como entrada no tiene mayor problema.
Ahora bien, que el sistema así planteado tenga algún interés, si que lo pongo en duda. La mayoría de la gente busca para encontrar lo que no tiene, y si ya tienes la imagen (la proporcionas para la búsqueda) ¿para que coño buscas? ¿para ver donde sale? Es útil, pero no se cuanto de útil.

Los informáticos españoles son como el resto, ni mejores ni peores. Cada uno vale lo que vale y lo que se ha preparado. Lo que cambia de un pais a otro no son los técnicos, sino los emprendedores, que los hay, o no los hay. Y los emprendedores pueden ser informáticos, maestros, historiadores, economistas.. o gente que se busca las lentejas.
30 de abril de 2008 a las 13:13.  

aqui hasta el mas tonto hace relojes:
No hagas caso Alberto, que estos informaticos lo que quieren es sacarte el dinero diciendo que es muy complicado.
Tengo yo un sobrino que eso te lo hace en dos tardes con el dreamweaver. Ya lo avisare para que se pase por aqui y ya lo hablais.
30 de abril de 2008 a las 13:36.  

Davor:
Si, alberto, cuelgala en ingles. Se de un sitio en el que, fijo, te lo ponen en portada: http://thedailywtf.com/

Ahí tendrás todos esos comentarios que tanto buscas, jo jo jo. Además tengo ganas de ver ese inglés.

Por cierto Blaster, pocos informaticos conozco yo que hayan puesto un ciber. Mucha demagogia tienes tu, y tu afirmación es totalmente palillera y desinformada. Dime tu un colectivo al que no se pueda aplicar esas mismas frases 'son un fracaso' y 'les hemos pagado la educacion con nuestros impuestos'.
30 de abril de 2008 a las 13:57.  

astronauta:
Lo de meter a un colectivo entero en un mismo saco, me parece una barbaridad. En todas las profesiones hay un porcentaje similar de gente incompetente. No lo pagues con la profesión, hombre. La incompetencia, como los delitos, son a nivel individual, no gremial.

Por lo que a mí respecta, soy de ciencias y de letras. Por poner un ejemplo de excelencia contrastada -yo no llego a tanto-, a Bertrand Russell obtuvo el premio Nobel de literatura en 1950 (matemático, uno de los padres de la lógica proposicional moderna, etc.).
30 de abril de 2008 a las 15:21.  

waterhouse:
Y otra cosa... si vas a añadir este post en un foro de informáticos americanos, añádelo también en un foro de informáticos españoles, entonces la comparación

Besos.
30 de abril de 2008 a las 16:05.  

EL_MALIGNO:
Muy buenas apreciaciones, Alberto.

Ningún problema para hacer lo que dices.

Podemos sustituir el motor Oracle por PostgreSQL o MySQL y así nos ahorramos las licencias.

Podemos presentar también los resultados como una lista de imágenes reescaladas con su correspondiente URL.

Alguien ha apuntado el problema de la rotación de imágenes. Podríamos resolver el problema de la rotación de imágenes de la siguiente manera:

a) Por defecto se busca la imagen en la BD tal cual se introduce.

b) Si el usuario selecciona la opción avanzada "buscar imágenes rotadas", entonces haremos 4 búsquedas por imagen.

c) El programa rotaría la imagen, la textualizaría y buscaría en BD. Así hasta 3 rotaciones (+90º en cada rotación). Después se presentan los resultados como siempre.

Ahora alguien debería proponer alguna solución para el problema de que las imágenes a buscar sean subconjuntos de nuestra imagen.

La utilidad que le veo a esta aplicación sería proteger los derechos de las imágenes.
30 de abril de 2008 a las 20:01.  

 alberto 
:

Sí que tiene utilidad: saber qué han hecho con tu foto por ahí, o si la foto que te ha mandado una tía la ha pillado de una web.

Para ver si la foto que se busca es subconjunto de una en la base de datos, pues "where foto_textualizada like '%$foto_textualizada%'. Aquí el problema es que cuando tengas 200 millones de fotos la búsqueda va a tardar mucho, por eso pensaba en varios servidores en red y con procesadores más bien potentes, con la base de datos clonada en todos los servidores y distribuir las búsquedas. La verdad, a fecha de hoy parece bastante caro, por eso hablaba de ingenieros de sistemas que puedan abaratar todo eso.
30 de abril de 2008 a las 20:21.  

BLASTER:
Venga,nenés,a seguir lloriqueando para que papi estado prohiba el Windows en la enseñanza pública (como en Extremadura) y entre el funcionariado,a ver si así puede contrataros a unos cuantos por narices...como en los años ochenta,necesitando un puñetero informático en cada pequeña empresa y en cada oficina.Menudo avance.Como en la URSS,cuatro tios para hacer lo que puede hacer uno.Los progres nunca cambiarán.
30 de abril de 2008 a las 20:55.  

EL_MALIGNO:
Un par de comentarios:

Se podría empezar con 10 ordenadores enrackables Dual Core de la marca Dell con 2GB de RAM y un par de enormes discos duros (1TB + 1TB). Se podrían conseguir tranquilamente a un precio de 900 €/ud. Llevamos ya 9000€ gastados.

Pon 3000 € más para comprar el rack, los SAIs y algunos complementos como medios de backup y gastos varios. Por un total de 12.000€ podrías comenzar el negocio.

Eso sí, este precio incluye sólo el HW, el SW te lo tienes que hacer tú.

Tenemos pues todos los ordenadores colocaditos en un sólo armario y protegidos con un SAI.

Propongo entonces que cada ordenador contenga un motor independiente de BD y que guarde sólo una parte de las fotos textualizadas. Hablo de unos 20 millones de fotos por máquina, es algo asumible, lo que hará un total de 200 millones de fotos en todo el rack.

Así distribuimos la carga entre los discos duros y los procesadores.

Como las fotos son palabras, podemos asignar al primer ordenador las palabras que empiecen por A,B,C ó D al segundo las palabras que empiecen por E, F, G ó H y así sucesivamente.

Cuando textualizamos la foto obtenemos su letra inicial y lanzamos la búsqueda contra el ordenador correspondiente.

Las búsquedas difíciles (de subconjuntos o metaconjuntos) requieren buscar simultáneamente en todas las máquinas.

Infelizmente las búsquedas de subconjuntos no son tan sencillas como planteas. En el mejor de los casos (pensemos en imágenes como mapas de bits) las imágenes se guardan por columnas y "el vector de imagen" se forma concatenando columnas. Si obtenemos un subconjunto de una imagen, la propia concatenación de columnas en esta foto más pequeña da como resultado un vector que ya no es un subconjunto del vector inicial. Esto en el caso más fácil, en el caso de formatos comprimidos como jpg, con cabeceras y todo el problema es todavía peor.

Me gustaría que alguien aportara una posible solución al problema de buscar una submatriz binaria dentro de otra matriz binaria mayor.

A ver si los contertulios se dejan de tanto link, tanta palabrería glamourosa y aportan alguna idea para resolver este problema.
30 de abril de 2008 a las 22:09.  

waterhouse:
Que haya tanta gente brillante, y que gane ZP las elecciones... no me lo explico...
1 de mayo de 2008 a las 00:00.  

 alberto 
:

Lo del hardware no es tan fácil: había que buscar un centro de datos con buen ancho de banda y monitorización 24 horas, etc. Algo como lo de Surpasshosting o simplemente ir aquí a Alicante, a la gente de Ferca y decirles que los servidores los vamos a poner nosotros. No creo que hubiese problemas. Y sobre el dinero, está claro que primero se haría en un solo servidor (cosa de 80 €/mes aproximadamente) un prototipo que funcionase bien y luego se buscaría financiación con inversores, no sólo para el hardware sino para publicitar inteligentemente el tema, untar a periodistas y a algún ceporro-gurú que vendiese nuestra moto.
1 de mayo de 2008 a las 10:20.  

Sjobs:
No es para increpar pero... como siempre los españoles llegamos tarde a todo, desde principios de Milenio se esta trabajando en estos sistemas conocidos con el nombre de CBIR. Los tests de fiabilidad estan entorno al 75%. El problema real no esta en la cantidad de datos, velocidad de procesamiento, facilidad de uso... esto son indocicracias, el problema real esta en como hacer esto si mas ni menos, resumiendo ¿Como extraer las caracteristicas invariantes entre n imagenes parecidas y variantes entre las no parecidas? Hay que tenen muchas cosas en cuenta antes de empezar a comparar imagenes , empezando por la normaizacion tanto de la iluminacion como del color. Haced una prueba coged dos camaras de la misma marca y mismo modelo (no valen camaras profesionales o de alta calida con opticas leica) y sacad con ambas la misma foto, luego comparad las imagenes, voilà los colores de la foto no son mas de un 89% iguales (considerando todas las variaciones, un preciso resultado consiste en capturar una imagen equidistante de las dos camaras, con la misma inclinacion... y en el mismo instante). Como decia anteriormente existen ya muchos prototipos tanto gratuitos como de pago, con lo cual la opción de negocio no la veo muy clara. Por otro lado existe mucha documentación al respecto, entre otros mi tesis del doctorado.
2 de mayo de 2008 a las 13:03.  

EL_MALIGNO:
Te veo animado Alberto. Es mucho mejor empezar el asunto con una única máquina. Está claro que el volumen de fotos se reduciría un orden de magnitud y podríamos gestionar entonces unos 20 millones sólo.

He estado pensando una solución para el problema de hallar subimágenes o metaimágenes en BD y creo que tengo algo interesante, bastante interesante, diría que funciona y casi me atrevería a adelantar que es una primicia, aunque por ahora guardo el secreto para mí.

Bastante decepcionantes en el fondo las aportaciones de otros foritas: se han perdido en generalidades y muy pocos han sabido dar datos concretos que ayuden a la resolución del problema.

Algunos ni se han enterado todavía de cual es el objetivo de tu propuesta.
2 de mayo de 2008 a las 23:55.  

Tomatito Lucrecia:
hay aqui ciertas personas que guardan tanta mierda dentro que debe resultarles dificil dormir por las noches.
Alberto, lenguaje C para aplicaciones web?
Vamos por partes, estamos hablando de crear una aplicación a la cual se le hagan consultas del estilo:
-esta es mi foto
-dime en que sitios web se encuentra
Pero no basándose en etiquetas asociadas a la misma imagen sino a la propia información contenida por ella. Como se ha dicho antes Google lleva trabajando en un buscador de imágenes en base a la propia información de la imagen mucho tiempo. La tarea no es sencilla pero el escenario al que lleva es el siguiente: el sabio buscador es capaz de extraer información de la imagen sin contar con las etiquetas que la acompañan, para luego ponerle él mismo las etiquetas que cree que la identifican mejor. Es decir que para cualquier imagen de ZP que encuentre le asociará las etiquetas Zapatero, Presidente del Gobierno, Mr Bean, etc. Pero la búsqueda que los usuarios hagan se hará en base a las etiquetas. Comparar el contenido de una imagen dada, byte a byte, con cada una de las imagenes que hay en internet es directamente inviable y absurdo. Y si no Alberto, te animo a que desarrolles la aplicación para que funcione en tu propio ordenador; te darás cuenta del tiempo que le llevará realizar una sola consulta con sólo las imagenes que guardes en tu PC. Y después trata de escalar ese problema para una aplicación web, con las dimensiones que conlleva.

Espero que esta vez no censures mi comentario como lo has hecho en otras ocasiones. Un abrazo.
3 de mayo de 2008 a las 17:38.  

pepelucho:
Tomatito lucrecia con todos los respetos , sabes que hay imposible una cosa en esta vida lo contrario de la vida sere breve eso de inviable , permiteme decirte y si yo te dijera que si es viable y que conozco quien lo puede hacer como te quedas ahora?. No hay nada que no se pueda hacer . Saludos y espero yo tampoco ser censurado aun no as sacado el otro comentario y no me pagan un sueldo por perder el tiempo tratando de ayudar alos de mas y aportando perosnas que si pueden hacer cosas. Me gustaria ser participe de esta pagina . Gracias de ante mano.
3 de mayo de 2008 a las 23:52.  

MeRioDeJaneiro:
Venga, cuando empezamos a picar lineas??? o le dejamos a alberto solo ante el turbo C?.

Por cierto, cuantos megas puede ocupar una base de datos con todas las imagenes de internet?
4 de mayo de 2008 a las 00:17.  

Tomatito Lucrecia:
Yo lo siento pero ante Turbo Assembler me descubro. Las posibilidades de integración del ensamblador con entornos web son infinitas. Y donde esté la eficiencia del ensamblador que se quite lo demás.
4 de mayo de 2008 a las 04:00.  

Peluca:
Creo que es algo como esto:
http://weblogs.madrimasd.org/sistemas_inteligentes/archive/2008/05/05/90992.aspx
6 de mayo de 2008 a las 14:53.  



© A. Noguera

"Mirar el río hecho de tiempo y agua
y recordar que el tiempo es otro río,
saber que nos perdemos como el río
y que los rostros pasan como el agua".
Jorge Luis Borges


Leer los archivos

Entradas destacadas:
Pepito Relámpago - Pepita Nuncabaja - Seis meses en meetic - Etapas de la burbuja