Skip to content

Instantly share code, notes, and snippets.

@maniami
Created March 26, 2012 05:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maniami/2203182 to your computer and use it in GitHub Desktop.
Save maniami/2203182 to your computer and use it in GitHub Desktop.
face detetion
#!/usr/bin/env python
import wx
import cv
import Image
import time
import sys
class App(wx.App):
def OnInit(self):
self.frame=CvMovieFrame()
self.frame.Show(True)
self.SetTopWindow(self.frame)
return True
class CvMovieFrame(wx.Frame):
def __init__(self, parent=None, id=-1):
wx.Frame.__init__(self, parent, id, 'WebCam')
self.panel=wx.Panel(self)
self.displayPanel = self.panel
self.capture = cv.CaptureFromCAM(0)
frame = cv.QueryFrame(self.capture)
self.SetSize((500, 360))
self.SetPosition((330, 160))
cv.CvtColor(frame, frame, cv.CV_BGR2RGB)
self.bmp = wx.BitmapFromBuffer(frame.width, frame.height, frame.tostring())
self.Show(True)
self.Bind(wx.EVT_IDLE, self.onIdle)
statusbar=self.CreateStatusBar()
menuFile=wx.Menu()
menuFile.Append(1, "&Tentang", "Tentang WebCam")
menuFile.AppendSeparator()
menuFile.Append(2, "&Exit", "Keluar")
menuBar=wx.MenuBar()
menuBar.Append(menuFile, "&File")
self.SetMenuBar(menuBar)
self.Bind(wx.EVT_MENU, self.About, id=1)
self.Bind(wx.EVT_MENU, self.Quit, id=2)
def onIdle(self, event):
self.nextFrame()
event.RequestMore()
def nextFrame(self):
def DetectFace(image, faceCascade):
min_size = (5,5)
image_scale = 1.2
haar_scale = 1.1
min_neighbors = 3
haar_flags = 0
grayscale = cv.CreateImage((image.width, image.height), 8, 1)
smallImage = cv.CreateImage(
(
cv.Round(image.width / image_scale),
cv.Round(image.height / image_scale)
), 8 ,1)
cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY)
cv.Resize(grayscale, smallImage, cv.CV_INTER_LINEAR)
cv.EqualizeHist(smallImage, smallImage)
faces = cv.HaarDetectObjects(
smallImage, faceCascade, cv.CreateMemStorage(0),
haar_scale, min_neighbors, haar_flags, min_size
)
if faces:
for ((x, y, w, h), n) in faces:
pt1 = (int(x * image_scale), int(y * image_scale))
pt2 = (int((x + w) * image_scale), int((y + h) * image_scale))
cv.Rectangle(image, pt1, pt2, cv.RGB(155, 255, 25),2)
return image
faceCascade = cv.Load("haarcascade_frontalface_default.xml")
while (cv.WaitKey(30)==-1):
img = cv.QueryFrame(self.capture)
image = DetectFace(img, faceCascade)
cv.CvtColor(image, image, cv.CV_BGR2RGB)
self.bmp.CopyFromBuffer(image.tostring())
dc = wx.ClientDC(self.displayPanel)
dc.DrawBitmap(self.bmp, 150, 40, True)
cv.ReleaseCapture(self.capture)
def Quit(self, event):
sys.exit()
def About(self, event):
wx.MessageBox("Aplikasi WebCam sederhana Python", "Tentang WebCam", wx.OK | wx.ICON_INFORMATION, self)
if __name__=="__main__":
app=App()
app.MainLoop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment