示例#1
0
int CaffeMobile::test(string img_path) {
	CHECK(caffe_net != NULL);

	Datum datum;
	CHECK(ReadImageToDatum(img_path, 0, 256, 256, true, &datum));
	const shared_ptr<MemoryDataLayer<float>> memory_data_layer =
		static_pointer_cast<MemoryDataLayer<float>>(
			caffe_net->layer_by_name("data"));
	memory_data_layer->AddDatumVector(vector<Datum>({datum}));

	vector<Blob<float>* > dummy_bottom_vec;
	float loss;
	clock_t t_start = clock();
	const vector<Blob<float>*>& result = caffe_net->Forward(dummy_bottom_vec, &loss);
	clock_t t_end = clock();
	LOG(DEBUG) << "Prediction time: " << 1000.0 * (t_end - t_start) / CLOCKS_PER_SEC << " ms.";

	const float* argmaxs = result[1]->cpu_data();
	for (int i = 0; i < result[1]->num(); i++) {
		for (int j = 0; j < result[1]->height(); j++) {
			LOG(INFO) << " Image: "<< i << " class:"
			          << argmaxs[i*result[1]->height() + j];
		}
	}

	return argmaxs[0];
}
示例#2
0
const vector<Blob<float>*> CaffeMobile::deepDream(string img_path) {
	CHECK(caffe_net != NULL);

	Datum datum;
	CHECK(ReadImageToDatum(img_path, 0, 256, 256, true, &datum));
	const shared_ptr<MemoryDataLayer<float>> memory_data_layer =
		static_pointer_cast<MemoryDataLayer<float>>(
			caffe_net->layer_by_name("data"));
	memory_data_layer->AddDatumVector(vector<Datum>({datum}));
	
	float loss;
	vector<Blob<float>* > dummy_bottom_vec;
	clock_t t_start = clock();
	const vector<Blob<float>*>& forwardResult = caffe_net->Forward(dummy_bottom_vec, &loss);
	clock_t t_end = clock();
	LOG(DEBUG) << "Forward time: " << 1000.0 * (t_end - t_start) / CLOCKS_PER_SEC << " ms.";

	t_start = clock();
	caffe_net->Backward();
	t_end = clock();
	LOG(DEBUG) << "Backward time: " << 1000.0 * (t_end - t_start) / CLOCKS_PER_SEC << " ms.";

	vector<Blob<float>*> result;

	Blob<float>* dataResult = caffe_net->blob_by_name("data").get();

	result.push_back(dataResult);

	return result;
}	
示例#3
0
vector<int> CaffeMobile::predict_top_k(string img_path, int k) {
	CHECK(caffe_net != NULL);

	Datum datum;
	CHECK(ReadImageToDatum(img_path, 0, 256, 256, true, &datum));
	const shared_ptr<MemoryDataLayer<float>> memory_data_layer =
		static_pointer_cast<MemoryDataLayer<float>>(
			caffe_net->layer_by_name("data"));
	memory_data_layer->AddDatumVector(vector<Datum>({datum}));

	float loss;
	vector<Blob<float>* > dummy_bottom_vec;
	clock_t t_start = clock();
	const vector<Blob<float>*>& result = caffe_net->Forward(dummy_bottom_vec, &loss);
	clock_t t_end = clock();
	LOG(DEBUG) << "Prediction time: " << 1000.0 * (t_end - t_start) / CLOCKS_PER_SEC << " ms.";

	const vector<float> probs = vector<float>(result[1]->cpu_data(), result[1]->cpu_data() + result[1]->count());
	CHECK_LE(k, probs.size());
	vector<size_t> sorted_index = ordered(probs);

	return vector<int>(sorted_index.begin(), sorted_index.begin() + k);
}
示例#4
0
int main(int argc, char** argv)
{

  /* initizlie video capture */
  VideoCapture cap(0);


  if(!cap.isOpened())
  {
    cout << "Cannot open video" << endl;
    return -1;
  }
  Demoutil util;
  util.Init();
  
  /* initialize for pretrained CNN and command line arguements */
  ::google::InitGoogleLogging(argv[0]);

  if (argc < 3 || argc > 5) {
    LOG(ERROR) << "test_caffe net_proto pretrained_net_proto iterations "
        << "[CPU/GPU] [Device ID]";
    return 1;
  }
  
  if (argc >= 4 && strcmp(argv[3], "GPU") == 0) {
    Caffe::set_mode(Caffe::GPU);
    int device_id = 0;
    if (argc == 5) {
      device_id = atoi(argv[4]);
    }
    Caffe::SetDevice(device_id);
    LOG(ERROR) << "Using GPU #" << device_id;
  } else {
    LOG(ERROR) << "Using CPU";
    Caffe::set_mode(Caffe::CPU);
  }
  
  
  //get pretrained network 
  Net<float> caffe_test_net(argv[1], caffe::TEST);
  caffe_test_net.CopyTrainedLayersFrom(argv[2]);
  

  Mat frame, showimage, testimage;
  Mat croppedImage;
  Rect rec(120,100,400,280);
  float loss;
  
  clock_t tStart, tEnd;
  double execTime, totalTime= 0.0;
  struct timeval time;
  int counter = 1;
  int counterFlag = 0;
  /* capture starts here*/
  for(;;)
  {

    tStart = clock(); 
    
    Mat tag = Mat::zeros(100,640, CV_8UC3);

    cap >> frame;
    if(frame.empty()) continue;
    if(quit_signal) exit(0);


   // resize and save image
    resize(frame, testimage, Size(227, 227));

      

    //croppedImage = showimage(rec);
    //resize(showimage, testimage, Size(227,227));
      
    //cv::rectangle(showimage, rec, CV_RGB(255, 0, 0), 3);
    //resize(frame, testimage, Size(256,256));
    
    vector <Datum> datum_vector;
    Datum datum;
    CVMatToDatum(testimage, &datum);
    
    datum_vector.push_back(datum);
    const shared_ptr<MemoryDataLayer<float> > memory_data_layer =
      boost::static_pointer_cast<MemoryDataLayer<float> >(
          caffe_test_net.layer_by_name("data"));
    memory_data_layer->AddDatumVector(datum_vector);
    vector<Blob<float>* > dummy_bottom_vec;
    const vector<Blob<float>*>& result = caffe_test_net.Forward(dummy_bottom_vec, &loss);

	//draw_all_joints(result, testimage);
	draw_upper_joints(result, testimage);

   
    
    tEnd = clock();
    execTime = (double)((tEnd-tStart)*1000/CLOCKS_PER_SEC);
    totalTime += execTime;
    counter ++;
    
    if(counterFlag){
    	resize(testimage, showimage, Size(640, 480));
		cv::imshow("webCAM DEMO HPE", showimage);
      	if(waitKey(30) >= 0) break;
    }
    
    if(counter == util.nCount+1){
      counterFlag = 1;
      counter = 1;
      totalTime = 0;
    }
	
  } // for(;;) end

  return 0;

}