void track3(ImageSource::InputDevice input, int numBaseClassifier, float overlap, float searchFactor, char* resultDir, Rect initBB, char* source = NULL) { unsigned char *curFrame=NULL; int key; //choose the image source ImageSource *imageSequenceSource; switch (input) { case ImageSource::AVI: imageSequenceSource = new ImageSourceAVIFile(source); break; case ImageSource::DIRECTORY: imageSequenceSource = new ImageSourceDir(source); break; case ImageSource::USB: imageSequenceSource = new ImageSourceUSBCam(); break; default: return; } ImageHandler* imageSequence = new ImageHandler (imageSequenceSource); imageSequence->getImage(); imageSequence->viewImage ("Tracking...", false); trackingRect=initBB; curFrame = imageSequence->getGrayImage (); ImageRepresentation* curFrameRep = new ImageRepresentation(curFrame, imageSequence->getImageSize()); Rect wholeImage; wholeImage = imageSequence->getImageSize(); // Pula o inicio do video for(int t = 0; t < 60; t++, imageSequence->getImage()); IplImage *image; image = imageSequence->getIplImage(); //cvWaitKey(0); printf ("init tracker..."); Classifier* tracker; tracker = new Classifier(image, trackingRect); printf (" done.\n"); Size trackingRectSize; trackingRectSize = trackingRect; printf ("start tracking (stop by pressing any key)...\n\n"); // Inicializa o detector Detector* detector; detector = new Detector(tracker->getClassifier()); Rect trackedPatch = trackingRect; Rect validROI; validROI.upper = validROI.left = 0; validROI.height = image->height; validROI.width = image->width; key=(char)-1; while (key==(char)-1) { imageSequence->getImage(); image = imageSequence->getIplImage(); curFrame = imageSequence->getGrayImage (); if (curFrame == NULL) break; //calculate the patches within the search region Patches *trackingPatches; Rect searchRegion; searchRegion = getTrackingROI(searchFactor, trackedPatch, validROI); trackingPatches = new PatchesRegularScan(searchRegion, wholeImage, trackingRectSize, overlap); curFrameRep->setNewImageAndROI(curFrame, searchRegion); detector->classifySmooth(curFrameRep, trackingPatches); trackedPatch = trackingPatches->getRect(detector->getPatchIdxOfBestDetection()); if (detector->getNumDetections() <= 0){printf("Lost...\n");break;} // Treina o classificador tracker->train(image,trackedPatch); float alpha, confidence, eval; alpha = tracker->getSumAlphaClassifier(); confidence = detector->getConfidenceOfBestDetection() / alpha; eval = tracker->classify(image, trackedPatch); printf("alpha: %5.3f confidence: %5.3f evalOficial: %5.3f ", alpha, confidence, eval); int orig = trackedPatch.upper; trackedPatch.upper -= 5; for(int i = 0; i < 10; i++){ eval = tracker->classify(image, trackedPatch); printf("%5.3f ", eval); trackedPatch.upper += 1; imageSequence->paintRectangle (trackedPatch, Color (0,255,0), 1); } trackedPatch.upper = orig; printf("\n"); //display results imageSequence->paintRectangle (trackedPatch, Color (255,0,0), 5); imageSequence->viewImage ("Tracking...", false); key=cvWaitKey(200); } //clean up delete tracker; delete imageSequenceSource; delete imageSequence; if (curFrame == NULL) delete[] curFrame; delete curFrameRep; }