# 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 from VideoCapture import Device import time, string # -- end -- << Cameratest declarations >> # << Cameratest methods >> (1 of 2) class MyFrame(wx.Frame): # << class MyFrame methods >> (1 of 12) def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.DefaultSize) self.Bind(wx.EVT_CLOSE, self.OnCloseWindow, id = self.GetId()) maintimerID = wx.NewId() self.maintimer = wx.Timer(self, maintimerID) self.Bind(wx.EVT_TIMER, self.OnTimer, id=maintimerID) tb = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_HORIZONTAL| wx.NO_BORDER| wx.TB_FLAT) zoom_tool_mode = 'RGB' zoom_tool_size = (16, 16) zoom_tool_data = '\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe' zoom_tool_img = Image.fromstring(zoom_tool_mode, zoom_tool_size, zoom_tool_data) bmp = image_view.PILToWX(zoom_tool_img) img = wx.BitmapFromImage(bmp) tb.AddSeparator() tb.AddTool(10, img, isToggle = 0,shortHelpString ="Composit") #tb.AddLabelTool(10, "New", images.getNewBitmap(), shortHelp="New", longHelp="Long help for 'New'") self.Bind(wx.EVT_TOOL, self.OnToolClick, id=10) self.Bind(wx.EVT_TOOL_RCLICKED, self.OnToolRClick, id=10) tb.AddTool(11, img, isToggle = 0,shortHelpString ="Reset") self.Bind(wx.EVT_TOOL, self.OnRToolClick, id=11) self.Bind(wx.EVT_TOOL_RCLICKED, self.OnToolRClick, id=11) tb.AddSeparator() cbID = wx.NewId() tb.AddControl( wx.Slider(tb,cbID, 100, 1, 500,wx.DefaultPosition, wx.DefaultSize, wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS)) self.Bind(wx.EVT_SCROLL, self.OnCombo, id=cbID) tb.AddSeparator() StartButtonID = wx.NewId() self.StartButton = wx.Button(tb, 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(tb, StopButtonID, "Stop", wx.Point(260, 20)) #wx.EVT_BUTTON(self, StopButtonID, self.OnStopClick) display1ID = wx.NewId() self.display1 = wx.SpinCtrl(tb, display1ID, "", wx.DefaultPosition,wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 200, 100, "wx.SpinCtrl") self.display1.SetValue(100) display2ID = wx.NewId() self.display2 = wx.SpinCtrl(tb, display2ID, "", wx.DefaultPosition,wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 500, 100, "wx.SpinCtrl2") self.display2.SetValue(240) self.StopButton.SetBackgroundColour(wx.RED) self.StopButton.SetForegroundColour(wx.WHITE) #cbID = wx.NewId() tb.AddControl(self.StartButton) self.Bind(wx.EVT_BUTTON, self.OnGoClick, id=StartButtonID) tb.AddSeparator() #cbID = wx.NewId() tb.AddControl(self.StopButton) self.Bind(wx.EVT_BUTTON, self.OnStopClick, id=StopButtonID) tb.AddSeparator() #cbID = wx.NewId() tb.AddControl(self.display1) #self.Bind(wx.EVT_SCROLL, self.OnCombo, id=cbID) tb.AddSeparator() #cbID = wx.NewId() tb.AddControl(self.display2) #self.Bind(wx.EVT_SCROLL, self.OnCombo, id=cbID) tb.AddSeparator() togID = wx.NewId() tog2ID = wx.NewId() self.tog1 = wx.ToggleButton(tb, togID, 'One') self.tog2 = wx.ToggleButton(tb, tog2ID, 'Two') self.tog1.SetValue(True) tb.AddControl(self.tog1) self.Bind(wx.EVT_TOGGLEBUTTON, self.OnToggle, id=togID) tb.AddControl(self.tog2) self.Bind(wx.EVT_TOGGLEBUTTON, self.OnToggle2, id=tog2ID) self.SetToolBar(tb) tb.Realize() self.cyclenum = 100 self.cam = Device(devnum=0,showVideoWindow=0) if self.tog2.GetValue(): self.cam2 = Device(devnum=1,showVideoWindow=0) else: self.cam2 = self.cam self.splitter = wx.SplitterWindow(self, -1,style = wx.SP_3D) self.splitter2 = wx.SplitterWindow(self.splitter, -1,style = wx.SP_3D) self.glob_thing = image_view.ImageView(self.splitter, -1) self.glob_thing2 = image_view.ImageView(self.splitter2, -1) self.glob_thing3d = image_view.ImageView(self.splitter2, -1) self.splitter.SetMinimumPaneSize(20) self.splitter.SplitVertically(self.glob_thing, self.splitter2, 0) self.splitter2.SetMinimumPaneSize(20) self.splitter2.SplitVertically(self.glob_thing3d, self.glob_thing2, 0) self.Imagecompositflag = True for i in range(20): self.Imagethen = self.cam.getImage() self.Imagethen2 = self.cam2.getImage() self.Imagenow = self.cam.getImage() self.Imagenow2 = self.cam2.getImage() self.imagedifference = ImageChops.difference(self.Imagethen,self.Imagenow) self.imagedifference2 = ImageChops.difference(self.Imagethen2,self.Imagenow2) self.Imagecomposit = self.imagedifference self.Imagecomposit2 = self.imagedifference2 self.imagedifference3 = self.Imagecomposit2 self.imagedifference4 = self.Imagecomposit #self.imagediffdict = {} self.imgcount = 0 #for i in range(10): # self.imagediffdict[i] = self.imagedifference self.quartercount = 0 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.splitter, 1, wx.EXPAND)# #self.main_sizer.Add(self.glob_thing2, 10, wx.EXPAND) self.SetSizer(self.main_sizer) self.SetAutoLayout(1) self.main_sizer.Fit(self) # << class MyFrame methods >> (2 of 12) def OnTimer(self, event): self.Imagethen = self.Imagenow self.Imagenow = self.cam.getImage() self.imagedifference = ImageChops.difference(self.Imagethen,self.Imagenow) self.Imagethen2 = self.Imagenow2 self.Imagenow2 = self.cam2.getImage() self.imagedifference2 = ImageChops.difference(self.Imagethen2,self.Imagenow2) #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.Imagecomposit2 = ImageChops.lighter(self.Imagecomposit2 , self.imagedifference2) self.imagedifference3 = ImageChops.add(self.imagedifference3 , self.imagedifference2,1.1,0) self.imagedifference4 = ImageChops.add(self.imagedifference4 , self.imagedifference,1.1,0) self.imgcount = self.imgcount + 1 if self.imgcount >= self.cyclenum: if self.Imagecompositflag: #Imagecomposit2refit = self.Imagecomposit.resize((387,296)) #Imagecomposit2refit = Imagecomposit2refit.crop((57,18,377,258)).convert('L') #imgtemp = self.Imagecomposit.convert('L') #imgtemp2 = Image.new('L',self.Imagenow2.size,0) #self.imagedifference3 = Image.merge('RGB', (Imagecomposit2refit,imgtemp2,imgtemp)) #self.imagedifference3 = ImageChops.difference(Imagecomposit2refit, self.Imagecomposit2) self.glob_thing3d.set_image(self.imagedifference3) self.glob_thing.set_image(self.Imagecomposit) self.glob_thing2.set_image(self.Imagenow2) else: #Imagecomposit2refit = self.Imagenow.resize((397,256))#(387,296)) #Imagecomposit2refit = Imagecomposit2refit.crop((57,18,377,258)).convert('L') #imgtemp = self.Imagenow2.convert('L') #imgtemp2 = Image.new('L',self.Imagenow2.size,0) #self.imagedifference3 = Image.merge('RGB', (Imagecomposit2refit,imgtemp2,imgtemp)) #self.imagedifference3 = ImageChops.difference(Imagecomposit2refit, self.Imagenow2) self.glob_thing3d.set_image(self.imagedifference4) self.glob_thing.set_image(self.Imagenow) self.glob_thing2.set_image(self.Imagecomposit2) 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.imgcount = 0 # << class MyFrame methods >> (3 of 12) def OnSaveAsData(self, event): pass # << class MyFrame methods >> (4 of 12) def OnToolRClick(self, event): pass # << class MyFrame methods >> (5 of 12) def OnToggle(self, event): if self.tog1.GetValue(): #self.tog1.SetValue(False) self.tog2.SetValue(False) #if self.cam2.devnum != 0: self.cam2 = self.cam self.OnRToolClick(event) else: self.tog2.SetValue(True) # << class MyFrame methods >> (6 of 12) def OnToggle2(self, event): if self.tog2.GetValue(): self.tog1.SetValue(False) self.cam2 = Device(devnum=1,showVideoWindow=0) self.OnRToolClick(event) else: self.tog1.SetValue(True) # << class MyFrame methods >> (7 of 12) def OnRToolClick(self, event): self.Imagecomposit = self.imagedifference self.Imagecomposit2 = self.imagedifference2 self.imagedifference3 = self.imagedifference2 self.imagedifference4 = self.imagedifference # << class MyFrame methods >> (8 of 12) def OnToolClick(self, event): if self.Imagecompositflag: self.Imagecompositflag = False else: self.Imagecompositflag = True # << class MyFrame methods >> (9 of 12) def OnCombo(self, event): #print event.GetInt() self.cyclenum = event.GetInt() # << class MyFrame methods >> (10 of 12) def OnCloseWindow(self, event): self.Destroy() # << class MyFrame methods >> (11 of 12) def OnGoClick(self, event): self.maintimer.Start(25) # << class MyFrame methods >> (12 of 12) 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 >> app = MyApp(0) # Create an instance of the application class app.MainLoop() # Tell it to start processing events