Busca Visual

692 views
647 views

Published on

Ricardo Cabral

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

No Downloads
Views
Total views
692
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Busca Visual

  1. 1. 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
  2. 2. quem sou eu   http://isnotworking.com/   python desde '97  (o logotipo ainda era assim: )   engenheiro da computação  serpro'03  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:  para encontrar:
  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) 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
  9. 9. 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 = 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) 7.  codificar cliente 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; 8.  pronto! if __name__ == quot;__main__quot;: web.run(urls, globals())
  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

×