isk-daemon: busca visual de imagens para todos

2,081 views

Published on

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

Ricardo Niederberger Cabral
PyConBrasil 2008

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,081
On SlideShare
0
From Embeds
0
Number of Embeds
732
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

isk-daemon: busca visual de imagens para todos

  1. 1. BUSCA VISUAL DE IMAGENS PARA TODOS APRESENTAÇÃO DO SOFTWARE OPENSOURCE ISK-DAEMON E TECNOLOGIAS ENVOLVIDAS NA SUA CRIAÇÃO Ricardo Niederberger Cabral PyConBrasil 2008
  2. 2. quem sou eu http://isnotworking.com/     python desde '97 logotipo ainda era assim: )  (o engenheiro da computação   '03  serpro  chemtech
  3. 3. busca visual de imagens uma das técnicas: busca-através-de-exemplo     pode ser combinado com busca textual
  4. 4. busca visual de imagens  usar: encontrar:  para
  5. 5. : 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
  6. 6. como usar arquitetura  
  7. 7. como usar: fluxo de dados
  8. 8. como usar: passos (1/3) compilar a biblioteca para sua plataforma 1.  g++ 1.  python-dev 2.  libmagick++ 3.  pre-requisitos servidor 2.  twisted 1.  simplejson 2.  SOAPpy 3.  # python setup.py install 3.  escolher método para RPC 4.  xml-rpc 1.  soap 2.  json-rpc 3.  twisted PB 4. 
  9. 9. como usar: passos (2/3) indexar coleção de imagens 5.  # 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 = quot;/Volumes/media2/prj/tecweb-data/imgquot; count = 0 p = re.compile(rquot;(d+)quot;) 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()
  10. 10. como usar: passos (3/3) codificar cliente 7.  import web # simple isk-daemon test program from xmlrpclib import ServerProxy server = ServerProxy(quot;http://localhost:31128/RPCquot;) urls = ('/(.*)', 'iskclient') imgdir = quot;/Volumes/media2/imgquot; 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 quot;quot;quot;<html>Pesquisando em %d imagens as mais similares a <img src='/static/%s.jpg'/><hr>quot;quot;quot; % (img_count, target_id) for res in server.queryImgID(1,target_id, 16)[1:]: print quot;quot;quot;<a href='/%d'><img border='0' src='/static/%s.jpg'/> </a>quot;quot;quot; % (res[0],res[0]) print quot;</html>quot; pronto! if __name__ == quot;__main__quot;: web.run(urls, globals()) 8. 
  11. 11. 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

×