# Created by Leo from: C:\Python23\Tom\leo\cameratest.leo # << Cameratest declarations >> import Image import ImageChops import image_view import ImageStat import ImageEnhance import wx import rserve import time, string # -- end -- << Cameratest declarations >> # << Cameratest methods >> (1 of 2) class MyFrame(wx.Frame): # << class MyFrame methods >> (1 of 9) def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.DefaultSize) self.cam = dictofpyro['Camera'] #self.cam = Device(devnum=1,showVideoWindow=0) img = self.cam.tostring() self.Imagethen = Image.fromstring('RGB',(160, 120),img) img = self.cam.tostring() self.Imagenow = Image.fromstring('RGB',(160, 120),img) self.imagedifference = ImageChops.difference(self.Imagethen,self.Imagenow) self.Imagecomposit = self.imagedifference self.imagediffdict = {} for i in range(10): self.imagediffdict[i] = self.imagedifference self.quartercount = 0 self.avarage = 32 wx.EVT_CLOSE(self, self.OnCloseWindow) maintimerID = wx.NewId() self.maintimer = wx.Timer(self, maintimerID) wx.EVT_TIMER(self, maintimerID, self.OnTimer) self.glob_thing = image_view.ImageView(self, -1) self.mainmenu = wx.MenuBar() menu=wx.Menu() exitID=wx.NewId() menu.Append(exitID, '&Load', 'Load Data') wx.EVT_MENU(self, exitID, self.OnLoadData) exitID=wx.NewId() menu.Append(exitID, '&Save', 'Save Data') wx.EVT_MENU(self, exitID, self.OnSaveData) exitID=wx.NewId() menu.Append(exitID, 'Save &As', 'Save Data As') wx.EVT_MENU(self, exitID, self.OnSaveAsData) exitID=wx.NewId() menu.Append(exitID, '&Clear', 'Clear Data') wx.EVT_MENU(self, exitID, self.OnClearData) self.mainmenu.Append (menu, '&Data') self.SetMenuBar (self.mainmenu) StartButtonID = wx.NewId() self.StartButton = wx.Button(self, StartButtonID, "Go", wx.Point(20, 20)) wx.EVT_BUTTON(self, StartButtonID, self.OnGoClick) self.StartButton.SetBackgroundColour(wx.BLUE) self.StartButton.SetForegroundColour(wx.WHITE) self.StartButton.SetDefault() StopButtonID = wx.NewId() self.StopButton = wx.Button(self, StopButtonID, "Stop", wx.Point(260, 20)) wx.EVT_BUTTON(self, StopButtonID, self.OnStopClick) display1ID = wx.NewId() self.display1 = wx.SpinCtrl(self, display1ID, "", wx.DefaultPosition,wx.Size(250, -1), wx.SP_ARROW_KEYS, 0, 200, 100, "wx.SpinCtrl") self.display1.SetValue(100) display2ID = wx.NewId() self.display2 = wx.SpinCtrl(self, display2ID, "", wx.DefaultPosition,wx.Size(250, -1), wx.SP_ARROW_KEYS, 0, 500, 100, "wx.SpinCtrl2") self.display2.SetValue(100) self.StopButton.SetBackgroundColour(wx.RED) self.StopButton.SetForegroundColour(wx.WHITE) self.main_sizer = wx.BoxSizer(wx.VERTICAL) self.button_sizer = wx.BoxSizer(wx.HORIZONTAL) self.text_sizer = wx.BoxSizer(wx.HORIZONTAL) self.button_sizer.Add(self.StartButton, 1, wx.EXPAND) self.button_sizer.Add(self.StopButton, 1, wx.EXPAND) self.text_sizer.Add(self.display1, 1, wx.EXPAND) self.text_sizer.Add(self.display2, 1, wx.EXPAND) self.main_sizer.Add(self.button_sizer, 1, wx.EXPAND) self.main_sizer.Add(self.text_sizer, 1, wx.EXPAND) self.main_sizer.Add(self.glob_thing, 10, wx.EXPAND) self.SetSizer(self.main_sizer) self.SetAutoLayout(1) self.main_sizer.Fit(self) # << class MyFrame methods >> (2 of 9) def OnTimer(self, event): self.Imagethen = self.Imagenow img = self.cam.tostring() self.Imagenow = Image.fromstring('RGB',(160, 120),img) self.imagedifference = ImageChops.difference(self.Imagethen,self.Imagenow) #self.imagedifference = self.Imagenow #print self.Imagenow.mode, ' ', self.imagedifference.mode #enh = ImageEnhance.Sharpness(self.imagedifference) #img = enh.enhance(self.display1.GetValue()/100) #enh = ImageEnhance.Color(img) #img = enh.enhance(self.display2.GetValue()/100) #self.imagedifference = self.imagedifference.convert('L') #self.imagediffdict[9] = self.imagediffdict[8] #self.imagediffdict[8] = self.imagediffdict[7] #self.imagediffdict[7] = self.imagediffdict[6] #self.imagediffdict[6] = self.imagediffdict[5] #self.imagediffdict[5] = self.imagediffdict[4] #self.imagediffdict[4] = self.imagediffdict[3] #self.imagediffdict[3] = self.imagediffdict[2] #self.imagediffdict[2] = self.imagediffdict[1] #self.imagediffdict[1] = self.imagediffdict[0] #self.imagediffdict[0] = self.imagedifference #self.Imagecomposit = self.imagedifference #for i in range(10): # self.Imagecomposit = ImageChops.lighter(self.Imagecomposit , self.imagediffdict[i]) #Image.blend(self.Imagethen , self.imagediffdict[i], 0.1) self.Imagecomposit = ImageChops.lighter(self.Imagecomposit , self.imagedifference) self.glob_thing.set_image(self.Imagecomposit) stats = ImageStat.Stat(self.imagedifference) num1 = int(self.display2.GetValue()) #print img.histogram() if stats.extrema[0][1] > num1: self.Imagenow.save('C:\\Python23\\tom\\imgtest\\' + str(int(time.time())) + str(self.quartercount) + '.jpg') self.imagedifference.save('C:\\Python23\\tom\\imgtest\\diff\\dif' + str(self.quartercount) + str(int(time.time())) + '.jpg') self.avarage = ((self.avarage + num1) / 2) + 1 self.quartercount = self.quartercount +1 if self.quartercount == 4: self.quartercount = 0 #num1 = int(stats.sum[0] / 10000) + int(stats.sum[1] / 10000) + int(stats.sum[2] / 10000) self.display1.SetValue(int(stats.extrema[0][1])) #self.display2.Replace(0, 25, str(num1) + ' ') # << class MyFrame methods >> (3 of 9) def OnSaveAsData(self, event): pass # << class MyFrame methods >> (4 of 9) def OnClearData(self, event): pass # << class MyFrame methods >> (5 of 9) def OnLoadData(self, event): pass # << class MyFrame methods >> (6 of 9) def OnSaveData(self, event): pass # << class MyFrame methods >> (7 of 9) def OnCloseWindow(self, event): self.Destroy() # << class MyFrame methods >> (8 of 9) def OnGoClick(self, event): self.maintimer.Start(25) # << class MyFrame methods >> (9 of 9) def OnStopClick(self, event): self.maintimer.Stop() # -- end -- << class MyFrame methods >> # << Cameratest methods >> (2 of 2) class MyApp(wx.App): # << class MyApp methods >> def OnInit(self): # Create an instance of our customized Frame class frame = MyFrame(None, -1, "camera difference") frame.Show(True) # Tell wx.Windows that this is our main window self.SetTopWindow(frame) # Return a success flag return True # -- end -- << class MyApp methods >> # -- end -- << Cameratest methods >> dictofpyro = rserve.connect(None) dictofpyro.log("connection from CameraPhantom") app = MyApp(0) # Create an instance of the application class app.MainLoop() # Tell it to start processing events