Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introdução a Visão Computacional com SimpleCV

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

Introdução a Visão Computacional com SimpleCV

Uma série de exemplos com códigos e imagens ilustradas, sobre o Framework SimpleCV, para Trabalhar com Visão Computacional.

Avatar for Rodrigo Gomes

Rodrigo Gomes

January 12, 2014

More Decks by Rodrigo Gomes

Other Decks in Programming

Transcript

  1. Uma Introdu¸ c˜ ao a Vis˜ ao Computacional Rodrigo Gomes

    ............. [email protected] Rodrigo Gomes (............) SimpleCV 1 / 33
  2. O que veremos: 1 Instala¸ c˜ ao. 2 A Teoria.

    O que ´ e vis˜ ao Computacional. SimpleCV 3 Implementa¸ c˜ ao. Ol´ a Mundo Brincando com Imagens O Crhoma Key Brincando com faces Substituindo o Rosto Determinando um Tempo! Reconhecimento Facial Por Estra¸ c˜ ao de caracter´ ısticas Contando Faces Estra¸ c˜ ao e detec¸ c˜ ao das Cores Dividindo a Tela Streamer O Desafio. FIM Rodrigo Gomes (............) SimpleCV 2 / 33
  3. Mas o que ´ e Vis˜ ao Computacional?? Podemos definir

    Vis˜ ao Computacional como: conjunto de m´ etodos e t´ ecnicas atrav´ es dos quais sistemas computacionais podem ser capazes de interpretar imagens! Rodrigo Gomes (............) SimpleCV 3 / 33
  4. Mas O que ´ e SimpleCV SimpleCV ´ e um

    framework de c´ odigo aberto para a construc˜ ao de aplicac˜ oes de vis˜ ao computacional usando Python. Com ele, vocˆ e tem acesso a diversas bibliotecas de alta potˆ encia de vis˜ ao por computador, como OpenCV - sem ter que primeiro aprender sobre a profundidade de bits, formatos de arquivos, gest˜ ao e espa¸ cos de cores, valores pr´ oprios, e etc. Conclus˜ ao: SimpleCV ´ e a mais facil, e a Mais Simples! Rodrigo Gomes (............) SimpleCV 4 / 33
  5. HELLO WORLD from SimpleCV import * cam = Camera() disp

    = Display((640,480)) while disp.isNotDone(): frame = cam.getImage() if disp.mouseLeft: pt = pg.mouse.get_pos() #pega Tupla print "Desenhando string na Posicao --> (%i,%i) " % (pt[0],pt[1]) frame.drawText("HELLO WORLD!!",pt[0],pt[1],color=Color.RED,fontsize=40) frame.save(disp) Rodrigo Gomes (............) SimpleCV 5 / 33
  6. Opera¸ c˜ oes De redimensionamento, rotacionamento, e muito mais! SimpleCV

    permite fazer varias opera¸ c˜ oes que um editor de imagens comum poderia fazer! Rodrigo Gomes (............) SimpleCV 6 / 33
  7. O crhoma Key Chroma key ´ e uma t´ ecnica

    de efeito visual que consiste em colocar uma imagem sobre uma outra atrav´ es do anulamento de uma cor padr˜ ao, como por exemplo o verde ou o azul. Rodrigo Gomes (............) SimpleCV 8 / 33
  8. Estra¸ c˜ ao do GreenScreen from SimpleCV import * gs

    = Image("imagens/green_screen.png") gs.show() time.sleep(5) fundo = Image("imagens/python.png") fundo.show() time.sleep(5) mascara = gs.hueDistance(color=Color.GREEN, minvalue = 40).binarize() mascara.show() time.sleep(5) result = (gs-mascara)+(fundo-mascara.invert()) result.show() time.sleep(5) Rodrigo Gomes (............) SimpleCV 9 / 33
  9. Simples Detec¸ c˜ ao do Rosto from SimpleCV import *

    cam = Camera() while True: img = cam.getImage().flipHorizontal().scale(360,280) face = img.findHaarFeatures(’face’) if face: face.show(width=3,color=Color.RED) else: img.show() Rodrigo Gomes (............) SimpleCV 14 / 33
  10. Mostrando Os Bichos! img.listHaarFeatures() [’fullbody.xml’, ’mouth.xml’, ’left_ear.xml’, ’upper_body2.xml’, ’two_eyes_big.x ml’,

    ’lefteye.xml’, ’profile.xml’, ’face2.xml’, ’eye.xml’, ’lower_body.xml’, ’ri ght_ear.xml’, ’nose.xml’, ’right_eye.xml’, ’face3.xml’, ’upper_body.xml’, ’face. xml’, ’left_eye2.xml’, ’face4.xml’, ’right_eye2.xml’, ’glasses.xml’, ’two_eyes_s mall.xml’] Rodrigo Gomes (............) SimpleCV 16 / 33
  11. A Fun¸ c˜ ao Crop() from SimpleCV import * import

    time img = Image("face_detect.png") face = img.findHaarFeatures("face") face.draw() face = face[-1] crp = face.crop() crp.show() time.sleep(3) Rodrigo Gomes (............) SimpleCV 17 / 33
  12. Implementando a Fun¸ c˜ ao Blit() #!/usr/bin/python # -*- coding:

    utf8 -*- # exemplo para substituir um rosto! import time from SimpleCV import * cam = Camera() madruga_face = Image("madruga.jpg") while True: img = cam.getImage().flipHorizontal().scale(320, 240) faces = img.findHaarFeatures("face") if faces: face = faces[-1] madruga = madruga_face.scale(face.height()+30, face.width()) mymask = madruga.invert() img = img.blit(madruga, face.topLeftCorner(),alphaMask=mymask) img.show() time.sleep(0.01) Rodrigo Gomes (............) SimpleCV 19 / 33
  13. Determinando um tempo from SimpleCV import * from time import

    strftime cam = Camera() disp = Display((640,480)) limite = ’13:08:00’ h = [] while h != limite: h = strftime(’%H:%M:%S’) frame = cam.getImage() frame.drawText(h,40,40,Color.GREEN,30) frame.save(disp) Rodrigo Gomes (............) SimpleCV 21 / 33
  14. Reconhecimento part [1] #!/usr/bin/python import time from SimpleCV import *

    import sys cam = Camera() #inicializa a camera quality = 400 minMatch = 0.100 try: password = Image("password.jpg") #verifica se havia uma imagem password a ser carregada caso nao, password except: password = None mode = "unsaved" saved = False minDist = 0.95 while True: image = cam.getImage().scale(640, 480) faces = image.findHaarFeatures("face") if faces: if not password: faces.draw() face = faces[-1] password = face.crop().save("password.jpg") break else: faces.draw() Rodrigo Gomes (............) SimpleCV 22 / 33
  15. Reconhecimento part [2] face = faces[-1] template = face.crop() template.save("template.jpg")

    keypoints = password.findKeypointMatch(template,quality,minDist,minMatch) password.drawKeypointMatches(template).save("password2.jpg") if keypoints: print "OW SIM E VOCE BEM VINDO!" question = raw_input("VOCE GOSTARIA DE MUDAR SUA SENHA? S/N: ").strip() if question == "S": image = cam.getImage().scale(320, 240) faces = image.findHaarFeatures("face") tryit = 1 while not tryit == 10 or not faces: image = cam.getImage().scale(320, 240) faces = image.findHaarFeatures("") tryit += 1 if not faces: "NAO FOI POSSIVEL ENCONTRAR A FACE, SAINDO" break else: faces.draw() face = faces[-1] password = face.crop().save("senha.jpg") face.crop().show() print "SALVO COM SUCESSO" print "SAINDO" time.sleep(1) break else: print "OK..." break Rodrigo Gomes (............) SimpleCV 23 / 33
  16. Reconhecimento part [3] else: print "EU SEI QUE NAO E

    VOCE QUE ESTA AI" print "RODE O PROGRAMA NOVAMENTE QUANDO FOR VOCE....:P" break else: break Rodrigo Gomes (............) SimpleCV 24 / 33
  17. Conta Faces! #!/usr/bin/python import SimpleCV from SimpleCV import * import

    time import sys if __name__ == "__main__": cont = 0 green = (0, 255, 0) sleeptime = 2 frame = Image("1.jpg") while 1: facedetect = frame.findHaarFeatures("face") if facedetect: facedetect.draw() frame.show() for f in facedetect: cont += 1 faces = {"faces Encontradas": cont} print(faces) cont = 0 time.sleep(sleeptime) sys.exit() Rodrigo Gomes (............) SimpleCV 25 / 33
  18. Estra¸ c˜ ao Das Cores from SimpleCV import * import

    time cam = Camera() disp = Display((640,480)) while True: img = cam.getImage().flipHorizontal() cor = img.colorDistance(Color.GREEN) so_cor = img - cor blobs = so_cor.findBlobs() blobs.draw(color=Color.RED, width=2) so_cor.show() Rodrigo Gomes (............) SimpleCV 26 / 33
  19. Estra¸ c˜ ao Das Cores - Part[2] from SimpleCV import

    * import time cam = Camera() disp = Display((640,480)) while True: img = cam.getImage().flipHorizontal() cor = img.colorDistance(color=(0,255,0)) so_cor = img - cor blobs = so_cor.findBlobs() mean = so_cor.meanColor() #R #G if mean[0] >=1 and mean[1] >= 5: blobs.draw(color=Color.RED, width=2) print "objeto verde detectado!!! nas Coordenadas ", blobs.coordinates() so_cor.show() Rodrigo Gomes (............) SimpleCV 27 / 33
  20. Estra¸ c˜ ao Das Cores >>> so_cor.meanColor() >>> (1.604575, 18.880775,

    6.4940750000000005) Rodrigo Gomes (............) SimpleCV 28 / 33
  21. sidebySide from SimpleCV import * import time cam = Camera()

    while True: img = cam.getImage().flipHorizontal().scale(320,240) binary = img.binarize().invert() edges = img.edges().invert() invert = img.invert() result = img.sideBySide(binary,side="right") result = result.sideBySide(edges,side="right") result = result.sideBySide(invert,side="botton") result.show() Rodrigo Gomes (............) SimpleCV 29 / 33
  22. Streamer from SimpleCV import * import webbrowser from time import

    * import time cam = Camera() saida = JpegStreamer("localhost:8880",st=0.1) time.sleep(1) webbrowser.open("http:localhost:8880") while True: img = cam.getImage().resize(640,480).binarize().invert() img.drawText(’TESTANDO TRANSMISAO’,30,40,color=Color.BLUE,fontsize=60) img.save(saida) time.sleep(0.1) Rodrigo Gomes (............) SimpleCV 30 / 33