コード例 #1
0
void ImageProcessingMngmt::factoryCamera(CameraProperties camProps, std::string objDetUsed) {
  std::cout << "ImageProcessingMngmt - create " << camProps << "\n";

  ImageSource* cap;
  std::string videoSrc = camProps.videoSrc;

#ifndef _WIN32
  try {                   // try to convert to int (device ID)
    int devideID = std::stoi(videoSrc);
    std::cout << "device ID detected\n";

    cap = new ImageSource{devideID};
  } catch(std::invalid_argument e) {  // else leave it as string (video / image file)
    cap = new ImageSource{videoSrc};
  }
#else
  // ugly windows approach assuming less that 100 cameras AND filenames with more that 2 characters
  // because minGW claims to do c++11, but does not have std::stoi implemented
  if (videoSrc.length() < 3) {
    int devideID = atoi(videoSrc.c_str());

    cap = new ImageSource{devideID};
  } else {
    cap = new ImageSource{videoSrc};
  }
#endif
  if (!cap->isOpened()) {
    LOG_ERROR << "ImageProcessingMngmt::factoryCamerar - error opening VideoCapture - videoSrc=" << camProps.videoSrc << "\n";
    std::cout << "videoSrc=" << camProps.videoSrc << "\n";
    throw Error("ImageProcessingMngmt::factoryCamera - error opening VideoCapture\n");
  }

  CameraParams* cam = new CameraParams{camProps.configFile};
  ObjectDetection* objDet;
  if ("ObjDetSimple" == objDetUsed) {
    objDet = new ObjDetSimple{};
  } else {
    throw Error("invalid objectDetectionUsed in sysConfig file!\n if it’s a valid class name, it must be registered manually in ImageProcessingMngmt.cpp!");
  }

  ImageProcessing* camera = new ImageProcessing{camProps.cameraID, cap, cam, objDet, messaging};
  cameras.push_back(camera);

  std::cout << "ImageProcessingMngmt - camera " << camProps.cameraID << " created\n\n";
}