11

Click here to load reader

isk-daemon: busca visual de imagens para todos

Embed Size (px)

DESCRIPTION

APRESENTAÇÃO DO SOFTWARE OPENSOURCE ISK-DAEMON E TECNOLOGIAS ENVOLVIDAS NA SUA CRIAÇÃORicardo Niederberger CabralPyConBrasil 2008

Citation preview

Page 1: isk-daemon: busca visual de imagens para todos

BUSCA VISUAL DE IMAGENS PARA TODOS

APRESENTAÇÃO DO SOFTWARE OPENSOURCE ISK-DAEMON E TECNOLOGIAS

ENVOLVIDAS NA SUA CRIAÇÃO

PyConBrasil 2008 Ricardo Niederberger Cabral

Page 2: isk-daemon: busca visual de imagens para todos

quem sou eu

  http://isnotworking.com/   python desde '97

 (o logotipo ainda era assim: )   engenheiro da computação

 serpro '03  chemtech

Page 3: isk-daemon: busca visual de imagens para todos

busca visual de imagens

  uma das técnicas: busca-através-de-exemplo   pode ser combinado com busca textual

Page 4: isk-daemon: busca visual de imagens para todos

busca visual de imagens

 usar:

 para encontrar:

Page 5: isk-daemon: busca visual de imagens para todos

: o que é

  biblioteca (1)   extensão C++   indexar   buscar

  servidor (2)   expõe essa biblioteca para clientes remotos

  arquitetura (3)   como resolver esse problema?

  histórico:   app desktop: '03 (http://imgseek.net/)   servidor: '06

Page 6: isk-daemon: busca visual de imagens para todos

como usar

  arquitetura

Page 7: isk-daemon: busca visual de imagens para todos

como usar: fluxo de dados

Page 8: isk-daemon: busca visual de imagens para todos

como usar: passos (1/3)

1.  compilar a biblioteca para sua plataforma 1.  g++ 2.  python-dev 3.  libmagick++

2.  pre-requisitos servidor 1.  twisted 2.  simplejson 3.  SOAPpy

3.  # python setup.py install 4.  escolher método para RPC

1.  xml-rpc 2.  soap 3.  json-rpc 4.  twisted PB

Page 9: isk-daemon: busca visual de imagens para todos

como usar: passos (2/3)

5.  indexar coleção de imagens # isk-daemon imports from imgSeekLib.ImageDB import ImgDB import settings

# initialize image database imgDB = ImgDB(settings) imgDB.loadalldbs(os.path.expanduser(settings.databasePath))

def saveall(): imgDB.savealldbs(os.path.expanduser(settings.databasePath))

def main(): imgdir = "/Volumes/media2/prj/tecweb-data/img" count = 0 p = re.compile(r"(\d+)") for imgfile in os.listdir(imgdir): count += 1 if count > 1000: count = 0 saveall() m = p.search( imgfile ) nid = int(m.group()) if nid >= 2147483647: continue if not imgDB.isImageOnDB(1, nid): res = imgDB.addImage(1, os.path.join(imgdir,imgfile), nid) saveall()

if __name__ == '__main__': main()

Page 10: isk-daemon: busca visual de imagens para todos

como usar: passos (3/3)

7.  codificar cliente

8.  pronto!

import web # simple isk-daemon test program from xmlrpclib import ServerProxy

server = ServerProxy("http://localhost:31128/RPC") urls = ('/(.*)', 'iskclient') imgdir = "/Volumes/media2/img" img_count = server.getDbImgCount(1)

class iskclient: def GET(self, target_id):

if not target_id: target_id = -1 target_id = int(target_id)

print """<html>Pesquisando em %d imagens as mais similares a <img src='/static/%s.jpg'/><hr>""" % (img_count, target_id) for res in server.queryImgID(1,target_id, 16)[1:]: print """<a href='/%d'><img border='0' src='/static/%s.jpg'/> </a>""" % (res[0],res[0]) print "</html>"

if __name__ == "__main__": web.run(urls, globals())

Page 11: isk-daemon: busca visual de imagens para todos

do que é feito

  twisted: biblioteca para comunicação orientada a eventos

  swig: gerador de wrappers de código nativo   GWT: compilador java -> javascript, usado na

interface administrativa   json-rpc: protocolo para chamadas remotas   libMagick: biblioteca para manipulação de

imagens