Created
March 26, 2012 05:33
-
-
Save maniami/2203182 to your computer and use it in GitHub Desktop.
face detetion
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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