Esempio n. 1
0
void trackAndDrawObjects(cv::Mat& image, int frameNumber, std::vector<cv::LatentSvmDetector::ObjectDetection> detections,
			 std::vector<kstate>& kstates, std::vector<bool>& active,
			 std::vector<cv::Scalar> colors, const sensor_msgs::Image& image_source)
{
	std::vector<kstate> tracked_detections;

	cv::TickMeter tm;
	tm.start();
	//std::cout << endl << "START tracking...";
	doTracking(detections, frameNumber, kstates, active, image, tracked_detections, colors);
	tm.stop();
	//std::cout << "END Tracking time = " << tm.getTimeSec() << " sec" << endl;

	//ROS
	int num = tracked_detections.size();
	std::vector<cv_tracker::image_rect_ranged> rect_ranged_array;
	std::vector<int> real_data(num,0);
	std::vector<int> obj_id(num, 0);
	std::vector<int> lifespan(num, 0);
	//ENDROS

	for (size_t i = 0; i < tracked_detections.size(); i++)
	{
		kstate od = tracked_detections[i];
		cv_tracker::image_rect_ranged rect_ranged;

		//od.rect contains x,y, width, height
		rectangle(image, od.pos, od.color, 3);
		putText(image, SSTR(od.id), cv::Point(od.pos.x + 4, od.pos.y + 13), cv::FONT_HERSHEY_SIMPLEX, 0.55, od.color, 2);
		//ROS
		obj_id[i] = od.id; // ?
		rect_ranged.rect.x	= od.pos.x;
		rect_ranged.rect.y	= od.pos.y;
		rect_ranged.rect.width	= od.pos.width;
		rect_ranged.rect.height = od.pos.height;
		rect_ranged.range	= od.range;
		rect_ranged.min_height	= od.min_height;
		rect_ranged.max_height	= od.max_height;

		rect_ranged_array.push_back(rect_ranged);

		real_data[i] = od.real_data;
		lifespan[i] = od.lifespan;
		//ENDROS
	}
	//more ros
	cv_tracker::image_obj_tracked kf_objects_msg;
	kf_objects_msg.type = object_type;
	kf_objects_msg.total_num = num;
	copy(rect_ranged_array.begin(), rect_ranged_array.end(), back_inserter(kf_objects_msg.rect_ranged)); // copy vector
	copy(real_data.begin(), real_data.end(), back_inserter(kf_objects_msg.real_data)); // copy vector
	copy(obj_id.begin(), obj_id.end(), back_inserter(kf_objects_msg.obj_id)); // copy vector
	copy(lifespan.begin(), lifespan.end(), back_inserter(kf_objects_msg.lifespan)); // copy vector

	kf_objects_msg.header = image_source.header;

	image_objects.publish(kf_objects_msg);

	//cout << "."<< endl;
}
int extract_write_MotionFeatures(char* video, string vocabshotfile,string dirname,int num_examples)
{
    cout<<"Start reading videos and extracting features"<<endl;

    vector<int> startframes;
    vector<int> endframes;
    vector<int> keyframes;
    vector<int> sizes;

    readInputShotsFile(vocabshotfile,startframes,endframes,keyframes,sizes,num_examples);

    cout<<"The total number of shots are "<<startframes.size()<<endl;

    int vidn = 0;
    for(; vidn<startframes.size(); vidn++)
    {
        int start_frame = startframes[vidn];
        int end_frame = endframes[vidn];
        int key_frame = keyframes[vidn];
        cv::Mat hogFeat = cvCreateMat(0,featureDimension_hog,CV_32FC1);
        cv::Mat hofFeat = cvCreateMat(0,featureDimension_hof,CV_32FC1);
        cv::Mat mbhXYFeat = cvCreateMat(0,featureDimension_mbhXY,CV_32FC1);

        cout<<"In the "<<vidn<<" video"<<" Start frame "<<start_frame<<" End Frame "<<end_frame<<endl;

        doTracking(start_frame+FRAME_OFFSET,end_frame+FRAME_OFFSET,video,hogFeat,hofFeat,mbhXYFeat,key_frame+FRAME_OFFSET);
        write_feat_to_file_motion(hogFeat, start_frame, end_frame, "hog", dirname);
        write_feat_to_file_motion(hofFeat, start_frame, end_frame, "hof", dirname);
        write_feat_to_file_motion(mbhXYFeat, start_frame, end_frame, "mbh", dirname);

        cout<<"Tracking and writing done for shot "<<vidn<<endl;
        hogFeat.release();
        hofFeat.release();
        mbhXYFeat.release();
    }
    cout<<"All tracking and writing of features done for "<< dirname<<endl;
    return 0;
}