void LatentSvmDetector::detect( const Mat& image, std::vector<ObjectDetection>& objectDetections, float overlapThreshold, int numThreads ) { objectDetections.clear(); if( numThreads <= 0 ) numThreads = 1; for( size_t classID = 0; classID < detectors.size(); classID++ ) { IplImage image_ipl = image; CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* detections = cvLatentSvmDetectObjects( &image_ipl, detectors[classID], storage, overlapThreshold, numThreads ); // convert results objectDetections.reserve( objectDetections.size() + detections->total ); for( int detectionIdx = 0; detectionIdx < detections->total; detectionIdx++ ) { CvObjectDetection detection = *(CvObjectDetection*)cvGetSeqElem( detections, detectionIdx ); objectDetections.push_back( ObjectDetection(Rect(detection.rect), detection.score, (int)classID) ); } cvReleaseMemStorage( &storage ); } }
void DPMDetectorImpl::detect( Mat &image, vector<ObjectDetection> &objectDetections) { objectDetections.clear(); for( size_t classID = 0; classID < detectors.size(); classID++ ) { // detect objects vector< vector<double> > detections; detections = detectors[classID]->detect(image); for (unsigned int i = 0; i < detections.size(); i++) { ObjectDetection ds = ObjectDetection(); int s = (int)detections[i].size() - 1; ds.score = (float)detections[i][s]; int x1 = (int)detections[i][0]; int y1 = (int)detections[i][1]; int w = (int)detections[i][2] - x1 + 1; int h = (int)detections[i][3] - y1 + 1; ds.rect = Rect(x1, y1, w, h); ds.classID = (int)classID; objectDetections.push_back(ds); } } }
int main(void) { /* Configure the oscillator both devices */ ConfigureOscillator(); /* Initialize IO ports and peripherals for both devices */ InitGPIO(); InitUART(); InitI2c(); InitI2cCompass(); /* Program for the bracelet */ #ifdef PROTECTED /* Initialize IO ports and peripherals */ InitTimerUS(); /* The values of the magnetic field will be save in x and y */ s16 x = 0; s16 y = 0; while(1) { I2cReadData(&x, &y); ComputeAngle(&angle, x, y); PutData16(angle); __delay_ms(500); } #endif /* Program for the bodyguard*/ #ifdef BODY_GUARD /* Initialize IO ports and peripherals */ InitADC(); InitPWM(); InitLcd(); InitTimerServo(); /* TODO <INSERT USER APPLICATION CODE HERE> */ u16 ADC_values[NMB_SENSORS]; u16 average[NMB_SENSORS]; u8 i; u8 j; /* The values of the magnetic field will be save in x and y */ s16 x = 0; s16 y = 0; u16 angle2=0; char T[5]; memset(ADC_values,0x00,sizeof(ADC_values)); memset(average, 0x00,sizeof(average)); /* for(i=0; i<NMB_SENSORS; i++) { ADC_values[i]=0; }*/ LcdClear(); #if MAGNETIC_SENSOR while(1) { I2cReadData(&x, &y); angle2=((-atan2(x,y)*180)/3.14)+180; /* Computes the angle using the arctan2 which provides an angle * between -180° and 180°, then converts the result that is in radian * into degree (*180/pi) and in the end add 180° so the angle is between * 0° and 360° */ //LcdPutFloat(angle2,0); LcdPutFloat(angle2,0); LcdGoto(1,2); LcdPutFloat(angle,0); __delay_ms(500); LcdClear(); } #endif #ifdef BODY_GUARD_MODE while(1) { for(j=0; j<NMB_MEASURES; j++) { /* SENSORS SAMPLING */ for(i=0; i<NMB_SENSORS; i++) { StartADC(ADC_values); } ObjectDetection(ADC_values, average); } LcdClear(); LcdPutFloat(CCP2RB, 0); //__delay_ms(1000); LcdClear(); /* Set Flags */ ObjectReaction(average); DistanceFlag(average[US]); /* react */ AutoBodyGuard(); } #endif #ifdef AUTO_FLEE while(1) { for(j=0; j<NMB_MEASURES; j++) { /* SENSORS SAMPLING */ for(i=0; i<NMB_SENSORS; i++) { StartADC(ADC_values); } ObjectDetection(ADC_values, average); } LcdClear(); /* Set Flags */ ObjectReaction(average); //DistanceFlag(average[US]); AutoFLee(); } #endif #endif return 0; }