Example #1
0
def ModelTakePhoto( bib, raceSeconds ):
	race = Model.race
	if race:
		if PhotoFinish.okTakePhoto(bib, raceSeconds):
			if race.enableVideoBuffer:
				return TakePhoto( Utils.mainWin.fileName if Utils.mainWin else _getTestPhotoFileName(), bib, raceSeconds )
			elif race.enableUSBCamera:
				return PhotoFinish.TakePhoto( Utils.mainWin.fileName if Utils.mainWin else _getTestPhotoFileName(), bib, raceSeconds )
		else:
			return 0
	else:
		return PhotoFinish.TakePhoto( _getTestPhotoFileName(), bib, raceSeconds )
	Utils.cameraError = _('ModelTakePhoto: usb camera is not enabled')
	return 0
Example #2
0
def StartVideoBuffer( refTime, raceFileName ):
	global videoBuffer
	
	if not videoBuffer:
		camera = PhotoFinish.SetCameraState( True )
		if not camera:
			return False
			
		dirName = PhotoFinish.getPhotoDirName( raceFileName )
		if not os.path.isdir( dirName ):
			try:
				os.makedirs( dirName )
			except Exception as e:
				logException( e, sys.exc_info() )
				return False
				
		videoBuffer = VideoBuffer( camera, refTime, dirName )
		videoBuffer.start()
	return True
Example #3
0
    def refresh(self, videoBuffer, t, num=None):
        if not videoBuffer:
            for s in six.moves.range(len(self.photoLabels)):
                for i in six.moves.range(len(self.photoLabels[s])):
                    self.photoBitmaps[s][i].SetBitmapLabel(self.bitmap)
                    self.photoLabels[s][i].SetLabel('')
            return

        if not self.captureButton.GetValue():
            return

        tCur = videoBuffer.refTime + datetime.timedelta(seconds=t)
        timeFrames = videoBuffer.findBeforeAfter(t, self.numPhotos // 2,
                                                 self.numPhotos // 2,
                                                 60.0 * 60.0)
        deltaMS = [((tFrame - tCur).total_seconds() * 1000.0)
                   for tFrame, frame in timeFrames]

        if len(timeFrames) < self.numPhotos:
            d = self.numPhotos - len(timeFrames)
            timeFrames = ([(None, None)] * d) + timeFrames
            deltaMS = ([None] * d) + deltaMS

        photoLabels = self.photoLabels[self.iSeries]
        photoBitmaps = self.photoBitmaps[self.iSeries]

        deltaMin = sys.float_info.max
        iMin = 0
        dc = wx.WindowDC(self)
        for i, (tFrame, frame) in enumerate(timeFrames):
            if deltaMS[i] is not None and abs(deltaMS[i]) < deltaMin:
                deltaMin = abs(deltaMS[i])
                iMin = i
            if deltaMS[i] is None:
                photoLabels[i].SetLabel(u'')
                photoBitmaps[i].SetBitmapLabel(wx.NullBitmap)
            else:
                photoLabels[i].SetLabel(u'{}ms'.format(deltaMS[i]))
                image = PhotoFinish.PilImageToWxImage(frame)
                image = RescaleImage(image, self.photoWidth, self.photoHeight)
                bitmap = image.ConvertToBitmap()
                photoBitmaps[i].SetBitmapLabel(bitmap)

        self.titles[self.iSeries] = getTitle(num, t)
        self.title.SetLabel(self.titles[self.iSeries])

        self.Refresh()

        self.iSeries = (self.iSeries + 1) % self.numPhotoSeries

        self.captureCount += 1
        if self.captureCount >= self.numPhotoSeries:
            self.captureButton.SetValue(False)
Example #4
0
	def run( self ):
		self.reset()
		while 1:
			message = self.queue.get()
			if   message[0] == 'Save':
				cmd, fileName, bib, t, frame = message
				#sys.stderr.write( 'save' )
				PhotoFinish.SavePhoto( fileName, bib, t, frame )
				self.queue.task_done()
			elif message[0] == 'Terminate':
				self.queue.task_done()
				self.reset()
				break
Example #5
0
def ModelTakePhoto( bib, raceSeconds ):
	race = Model.race
	if race:
		if PhotoFinish.okTakePhoto(bib, raceSeconds):
			if race.enableVideoBuffer:
				return TakePhoto( Utils.mainWin.fileName if Utils.mainWin else _getTestPhotoFileName(), bib, raceSeconds )
			elif race.enableUSBCamera:
				return PhotoFinish.TakePhoto( Utils.mainWin.fileName if Utils.mainWin else _getTestPhotoFileName(), bib, raceSeconds )
		else:
			return 0
	else:
		return PhotoFinish.TakePhoto( _getTestPhotoFileName(), bib, raceSeconds )
	Utils.cameraError = _('ModelTakePhoto: usb camera is not enabled')
	return 0
Example #6
0
def StartVideoBuffer( refTime, raceFileName ):
	global videoBuffer
	
	if not videoBuffer:
		camera = PhotoFinish.SetCameraState( True )
		if not camera:
			return False
			
		dirName = PhotoFinish.getPhotoDirName( raceFileName )
		if not os.path.isdir( dirName ):
			try:
				os.makedirs( dirName )
			except Exception as e:
				logException( e, sys.exc_info() )
				return False
				
		videoBuffer = VideoBuffer( camera, refTime, dirName )
		videoBuffer.start()
	return True
Example #7
0
def ModelStartCamera( refTime=None, raceFileName=None ):
	Shutdown()
	
	race = Model.race
	if race and race.enableUSBCamera:
		if refTime is None:
			refTime = race.startTime
		if raceFileName is None:
			raceFileName = Utils.getFileName()
		
		assert refTime is not None and raceFileName is not None
	
		if race.enableJChipIntegration:
			StartVideoBuffer( refTime, raceFileName )
		else:
			PhotoFinish.SetCameraState( True )
		return True
	
	return False
Example #8
0
def GetFilename( bib, t, dirName, i ):
	return os.path.join( dirName, fileFormat % (bib if bib else 0, PhotoFinish.fileFormatTime(t), (i+1) ) )
Example #9
0
if __name__ == '__main__':
	import time
	import shutil
	
	race = Model.newRace()
	race._populate()

	app = wx.App(False)
	
	dirName = 'VideoBufferTest_Photos'
	if os.path.isdir(dirName):
		shutil.rmtree( dirName, True )
	os.mkdir( dirName )
	
	tRef = datetime.datetime.now()
	camera = PhotoFinish.SetCameraState( True )
	vb = VideoBuffer.VideoBuffer( camera, tRef, dirName )
	vb.start()
	time.sleep( 1.0 )
	
	mainWin = wx.Frame(None, title="CrossMan", size=(600,400))
	mainWin.Show()
	photoSyncDialog = PhotoSyncViewerDialog( mainWin, title = u"PhotoSyncViewer", size=(600,400) )
	def doRefresh( bib ):
		t = (datetime.datetime.now() - tRef).total_seconds()
		wx.CallLater( 300, photoSyncDialog.refresh, vb, t, bib )
		
	photoSyncDialog.Show()
	photoSyncDialog.reset()
	bib = 100
	for d in xrange(0, 1000*60, 1000):
Example #10
0
def Shutdown():
	global videoBuffer
	if videoBuffer:
		videoBuffer.stop()
		videoBuffer = None
	PhotoFinish.SetCameraState( False )
Example #11
0
def GetFilename( bib, t, dirName, i ):
	return os.path.join( dirName, fileFormat % (bib if bib else 0, PhotoFinish.fileFormatTime(t), (i+1) ) )