SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
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
quem sou eu
   http://isnotworking.com/
 

  python desde '97

            logotipo ainda era assim:   )
      (o

     engenheiro da computação
 

                '03
      serpro

      chemtech
busca visual de imagens
   uma das técnicas: busca-através-de-exemplo
 

  pode ser combinado com busca textual
busca visual de imagens
  usar:




           encontrar:
  para
: 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
como usar
     arquitetura
 
como usar: fluxo de dados
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. 
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()
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. 
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

Más contenido relacionado

Destacado

Steelstuff Portfolio 2009
Steelstuff Portfolio 2009Steelstuff Portfolio 2009
Steelstuff Portfolio 2009Rob Bongers
 
FICHA TECNICA FOODMAX GREASE SI
FICHA TECNICA FOODMAX GREASE SIFICHA TECNICA FOODMAX GREASE SI
FICHA TECNICA FOODMAX GREASE SIIsabel Gil Alonso
 
Taller evaluativo intermedio periodo 3
Taller evaluativo intermedio periodo 3Taller evaluativo intermedio periodo 3
Taller evaluativo intermedio periodo 3Jenny C.E.
 
Comisiones
ComisionesComisiones
Comisionesshady96
 
Roma y el Cristianismo
Roma y el CristianismoRoma y el Cristianismo
Roma y el CristianismoCirilus
 
Contra El Borrador Del Roies
Contra El Borrador Del RoiesContra El Borrador Del Roies
Contra El Borrador Del Roiesantonioisa
 
JSUG - OurMovies by Christoph Pickl
JSUG - OurMovies by Christoph PicklJSUG - OurMovies by Christoph Pickl
JSUG - OurMovies by Christoph PicklChristoph Pickl
 
Unesco considera que la cultura
Unesco considera que la culturaUnesco considera que la cultura
Unesco considera que la culturaCedoc Inamu
 
Bruk av spill i undervisningen
Bruk av spill i undervisningenBruk av spill i undervisningen
Bruk av spill i undervisningenkongsberg2007
 
Anexo 2 rúbrica analítica
Anexo 2 rúbrica analíticaAnexo 2 rúbrica analítica
Anexo 2 rúbrica analíticaGabo Román
 
Animar Presentaciones Con Power Point
Animar Presentaciones Con Power PointAnimar Presentaciones Con Power Point
Animar Presentaciones Con Power Pointsusanaga
 
Datospersobnales
DatospersobnalesDatospersobnales
Datospersobnalesjuliotcr5
 

Destacado (20)

Steelstuff Portfolio 2009
Steelstuff Portfolio 2009Steelstuff Portfolio 2009
Steelstuff Portfolio 2009
 
FICHA TECNICA FOODMAX GREASE SI
FICHA TECNICA FOODMAX GREASE SIFICHA TECNICA FOODMAX GREASE SI
FICHA TECNICA FOODMAX GREASE SI
 
Caricatures
CaricaturesCaricatures
Caricatures
 
O Ordenador
O OrdenadorO Ordenador
O Ordenador
 
1 la materia
1 la materia1 la materia
1 la materia
 
Taller evaluativo intermedio periodo 3
Taller evaluativo intermedio periodo 3Taller evaluativo intermedio periodo 3
Taller evaluativo intermedio periodo 3
 
Comisiones
ComisionesComisiones
Comisiones
 
Roma y el Cristianismo
Roma y el CristianismoRoma y el Cristianismo
Roma y el Cristianismo
 
Contra El Borrador Del Roies
Contra El Borrador Del RoiesContra El Borrador Del Roies
Contra El Borrador Del Roies
 
JSUG - OurMovies by Christoph Pickl
JSUG - OurMovies by Christoph PicklJSUG - OurMovies by Christoph Pickl
JSUG - OurMovies by Christoph Pickl
 
Unesco considera que la cultura
Unesco considera que la culturaUnesco considera que la cultura
Unesco considera que la cultura
 
la importancia de la etica
la importancia de la eticala importancia de la etica
la importancia de la etica
 
Bruk av spill i undervisningen
Bruk av spill i undervisningenBruk av spill i undervisningen
Bruk av spill i undervisningen
 
Friends!
Friends!Friends!
Friends!
 
Novara
NovaraNovara
Novara
 
Anexo 2 rúbrica analítica
Anexo 2 rúbrica analíticaAnexo 2 rúbrica analítica
Anexo 2 rúbrica analítica
 
Presentación bibliográfica
Presentación bibliográficaPresentación bibliográfica
Presentación bibliográfica
 
Cartel epm 2012
Cartel epm 2012Cartel epm 2012
Cartel epm 2012
 
Animar Presentaciones Con Power Point
Animar Presentaciones Con Power PointAnimar Presentaciones Con Power Point
Animar Presentaciones Con Power Point
 
Datospersobnales
DatospersobnalesDatospersobnales
Datospersobnales
 

Similar a Busca visual de imagens

Edição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a pontaEdição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a pontaJorge Walendowsky
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlManuel Lemos
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechRafael Gomes
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCAntonio Passos
 
Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Mauro Baraldi
 
Como Perder Peso (no browser)
Como Perder Peso (no browser)Como Perder Peso (no browser)
Como Perder Peso (no browser)Zeno Rocha
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Luis Gustavo Almeida
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojscodebits
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1Sliedesharessbarbosa
 

Similar a Busca visual de imagens (20)

Edição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a pontaEdição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a ponta
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Python Para Maemo
Python Para MaemoPython Para Maemo
Python Para Maemo
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma Fintech
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBC
 
Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8
 
Pythonbrasil8
Pythonbrasil8Pythonbrasil8
Pythonbrasil8
 
Como Perder Peso (no browser)
Como Perder Peso (no browser)Como Perder Peso (no browser)
Como Perder Peso (no browser)
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojs
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Google apps script - Parte - 1
Google apps script - Parte - 1Google apps script - Parte - 1
Google apps script - Parte - 1
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1
 

Busca visual de imagens

  • 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. quem sou eu http://isnotworking.com/     python desde '97 logotipo ainda era assim: )  (o engenheiro da computação   '03  serpro  chemtech
  • 3. busca visual de imagens uma das técnicas: busca-através-de-exemplo     pode ser combinado com busca textual
  • 4. busca visual de imagens  usar: encontrar:  para
  • 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. como usar arquitetura  
  • 7. como usar: fluxo de dados
  • 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. 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. 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. 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