TrackerThread::TrackerThread(IntRect roi, CameraPtr pCamera, BitmapPtr ppBitmaps[NUM_TRACKER_IMAGES], MutexPtr pMutex, CQueue& cmdQ, IBlobTarget *pTarget, bool bSubtractHistory, TrackerConfig& config) : WorkerThread<TrackerThread>("Tracker", cmdQ), m_TouchThreshold(0), m_TrackThreshold(0), m_HistoryDelay(-1), m_StartTime(0), m_pMutex(pMutex), m_pCamera(pCamera), m_pTarget(pTarget), m_pTrafo(new DeDistort()), m_bCreateDebugImages(false), m_bCreateFingerImage(false), m_NumFrames(0), m_NumCamFramesDiscarded(0), m_pImagingContext(0) { m_bTrackBrighter = config.getBoolParam("/tracker/brighterregions/@value"); if (bSubtractHistory) { m_pHistoryPreProcessor = HistoryPreProcessorPtr( new HistoryPreProcessor(ppBitmaps[1]->getSize(), 1, m_bTrackBrighter)); } m_Prescale = config.getIntParam("/tracker/prescale/@value"); setBitmaps(roi, ppBitmaps); DeDistortPtr pDeDistort = config.getTransform(); m_pDistorter = FilterDistortionPtr(new FilterDistortion( m_pBitmaps[TRACKER_IMG_CAMERA]->getSize()/m_Prescale, pDeDistort)); m_pConfig = TrackerConfigPtr(new TrackerConfig(config)); m_pCamera->startCapture(); }
bool FGIRCScrollChannel::onAdd(void) { if(!Parent::onAdd()) return false; setBitmaps(); return true; }
void TrackerThread::setConfig(TrackerConfig config, IntRect roi, BitmapPtr ppBitmaps[NUM_TRACKER_IMAGES]) { boost::mutex::scoped_lock lock(*m_pMutex); try { m_TouchThreshold = config.getIntParam("/tracker/touch/threshold/@value"); } catch (Exception&) { m_TouchThreshold = 0; } m_bTrackBrighter = config.getBoolParam("/tracker/brighterregions/@value"); try { m_TrackThreshold = config.getIntParam("/tracker/track/threshold/@value"); } catch (Exception&) { m_TrackThreshold = 0; } m_Prescale = config.getIntParam("/tracker/prescale/@value"); if(m_pHistoryPreProcessor) { m_pHistoryPreProcessor->setInterval(config.getIntParam ("/tracker/historyupdateinterval/@value")); } DeDistortPtr pDeDistort = config.getTransform(); if (!(*m_pTrafo == *pDeDistort)) { m_pDistorter = FilterDistortionPtr(new FilterDistortion( m_pBitmaps[TRACKER_IMG_CAMERA]->getSize()/m_Prescale, pDeDistort)); *m_pTrafo = *pDeDistort; } int brightness = config.getIntParam("/camera/brightness/@value"); int exposure = config.getIntParam("/camera/exposure/@value"); int gamma = config.getIntParam("/camera/gamma/@value"); int gain = config.getIntParam("/camera/gain/@value"); int shutter = config.getIntParam("/camera/shutter/@value"); int strobeDuration = config.getIntParam("/camera/strobeduration/@value"); string sCameraMaskFName = config.getParam("/tracker/mask/@value"); bool bNewCameraMask = ((m_pCameraMaskBmp == BitmapPtr() && sCameraMaskFName != "") || m_pConfig->getParam("/tracker/mask/@value") != sCameraMaskFName); if (int(m_pCamera->getFeature(CAM_FEATURE_BRIGHTNESS)) != brightness || int(m_pCamera->getFeature(CAM_FEATURE_GAMMA)) != gamma || int(m_pCamera->getFeature(CAM_FEATURE_EXPOSURE)) != exposure || int(m_pCamera->getFeature(CAM_FEATURE_GAIN)) != gain || int(m_pCamera->getFeature(CAM_FEATURE_SHUTTER)) != shutter || int(m_pCamera->getFeature(CAM_FEATURE_STROBE_DURATION)) != strobeDuration || bNewCameraMask) { m_pHistoryPreProcessor->reset(); } m_pCamera->setFeature(CAM_FEATURE_BRIGHTNESS, brightness); m_pCamera->setFeature(CAM_FEATURE_GAMMA, gamma); // m_pCamera->setFeature(CAM_FEATURE_EXPOSURE, exposure); m_pCamera->setFeature(CAM_FEATURE_GAIN, gain); m_pCamera->setFeature(CAM_FEATURE_SHUTTER, shutter); m_pCamera->setFeature(CAM_FEATURE_STROBE_DURATION, strobeDuration, true); if (bNewCameraMask) { if (sCameraMaskFName == "") { m_pCameraMaskBmp = BitmapPtr(); } else { BitmapPtr pRGBXCameraMaskBmp = loadBitmap(sCameraMaskFName, I8); } } m_pConfig = TrackerConfigPtr(new TrackerConfig(config)); setBitmaps(roi, ppBitmaps); createBandpassFilter(); }