sexta-feira, 5 de julho de 2013

Brincando com SimpleCV + DetecçãoObjetoVerde + DrawLine , Primeiras Impressões!





#  -*- coding: utf-8 -*-   # permite açentuações

from SimpleCV import * #importa todo meu FrameWork

__author__ = 'Rodrigo Gomes' 
__name__ = "Bom_de_Mira"


cam = Camera()    # instanciacao da camera.
temp = Image('/home/rodrigo/Imagens/2.png').resize(190, 140)  #caminho para a Imagem


while True: 
    img = cam.getImage().flipHorizontal()  #captura os frames 
    img+=img.blit(temp,(1,2),alphaMask=temp)  #junta Imagem ao Frame
    mascara = img.hueDistance(color=Color.GREEN,minsaturation=150,minvalue=200).invert().threshold(150) #cria mascara

    blobs = img.findBlobsFromMask(mascara,minsize=10) #procura obj apartir da mascara
    if blobs: # se existir objetos
        blobs = blobs[-1] # passa o objeto maior
        cod = blobs.coordinates()  # pega as coordenadas do objeto em uma tupla
        print "coordenadas do objeto ---> %d  %d" % (cod[0],cod[1])  
        points = [(145, 90),(cod[0],cod[1])] # pontos para desenhar a linha

        for i in xrange(len(points)-1): 
            img.drawLine(points[i], points[i+1],color=Color.RED, thickness=4)  #desenha a linha
    img = img.applyLayers() # aplica as camadas
    result = img.sideBySide(img,side='right') # divide a tela
    result = img.sideBySide(mascara,side='botton')  #parte 1 da tela é a mascara
    result.show() #mostra na tela






Resultado:

Lembrando que tudo também depende da qualidade do vídeo da sua webcam, e da iluminação do ambiente, caso contrario, terá que ser feito alterações nos parâmetros da máscara


e aqui a imagem da pistola:

Obs: não se preocupe se não consegue enchergar o fundo, a camada png é transparente!


Demostração:





5 comentários:

  1. Opa Rodrigo, tudo certo?
    Animal esse seu blog. Várias coisas muito interessantes e úteis.

    Comecei a ler a pouco tempo atrás sobre algumas bibliotecas de manipulação de imagens.

    Queria te perguntar se com a SimpleCV em Python é possível fazer um programa que analise gabaritos tipo as de concurso, vestibulares, etc...

    Já vi algumas bibliotecas parecidas, mas ao que parece essa é uma das melhores.

    Voce sabe se é possível fazer isso? E sabe se existe alguma coisas já iniciada em algum projeto.

    Valeu Rodrigo e parabéns novamente pelo Blog.

    Abraço

    ResponderExcluir
  2. Sim é perfeitamente possível, e ainda simples de se fazer, não conheço nenhum projeto iniciado sobre esse tema, vou dar uma olhada, e se encontrar algo em breve postarei aqui.!

    ResponderExcluir
  3. Obrigado Rodrigo.

    Gostaria de pedir uma ajuda, estou meio perdido com tantas funções que a biblioteca SimpleCV.

    Como voce disse que é simples de se fazer, porém não me encontrei ainda....

    Você poderia indicar algum caminho para seguir estudando para conseguir reconhecer os círculos.

    Já tentei o usar o findCirles, mas não consegui reconhecer todos os círculos que precisava. Quando filtrei por um intervalo nem todos os círculos foram recohecidos sem que outros indesejáveis fossem reconhecido.

    Segue o código:

    Para testar um gabarito qualquer que encontrei no google

    1 from SimpleCV import *
    2 import time
    3
    4 moeda = Image("gabarito.png")
    5
    6 moeda_circ = moeda.findCircle()
    7
    8
    9 for m in moeda_circ:
    10 if m.radius() > 4 and m.radius() < 12:
    11 print m.coordinates()
    12 print m.radius()
    13 m.show(color=(0,128,0))
    14 time.sleep(4)


    Estou tentando usar o findBlobs, mas estou bem confuso se realmente é esse o caminho.

    Estou tentando por esse caminho:
    1 from SimpleCV import*
    2 import time
    3
    4 gab = Image("gab.png")
    5
    6 gab_bo = gab.findBlobs()
    7
    8 gab_bo[-1].show()
    9
    10 time.sleep(7)
    11
    12 print gab_bo[1].boundingCircle()
    13
    14 #for g in gab_bo:
    15 # if g.radius() < 10:
    16 # print g.coordinates()
    17 # g.show()
    18 time.sleep(7)

    A parte comentada não esta funcionando, porém foi retirada do manual do SimpleCV

    Desculpe por estar tirando uma dúvidas dessas por aqui, mas não encontrei algum lugar que pudesse ajudar.

    Se você puder indicar algum caminho para resolver esse problema ficaria grato.

    Obrigado novamente.

    Abraço

    ResponderExcluir
  4. Tem como instalar o PyCharm no Raspbarry pi?
    Obrigado!

    ResponderExcluir
  5. Casinos in NV 2021 - DrMCD
    Visit a casino in NV. Casino players will find the best 김포 출장마사지 games, 서산 출장안마 the most exciting welcome bonuses, and 경기도 출장안마 all of 광주광역 출장마사지 the most 공주 출장샵 rewarding promotions. Visit us!

    ResponderExcluir