#include "camera.hpp" #include #include "hikrobot/hikrobot.hpp" #include "mindvision/mindvision.hpp" #include "src/component/yaml.hpp" namespace device { Camera::Camera(const std::string & config_path) { auto yaml = component::load(config_path); auto camera_name = component::read(yaml, "camera_name"); auto exposure_ms = component::read(yaml, "exposure_ms"); if (camera_name == "mindvision") { auto gamma = component::read(yaml, "gamma"); auto vid_pid = component::read(yaml, "vid_pid"); camera_ = std::make_unique(exposure_ms, gamma, vid_pid); } else if (camera_name == "hikrobot") { auto gain = component::read(yaml, "gain"); auto vid_pid = component::read(yaml, "vid_pid"); camera_ = std::make_unique(exposure_ms, gain, vid_pid); } else { throw std::runtime_error("Unknow camera_name: " + camera_name + "!"); } rotate_180_ = yaml["rotate_180"] ? yaml["rotate_180"].as() : false; } void Camera::read(cv::Mat & img, std::chrono::steady_clock::time_point & timestamp) { camera_->read(img, timestamp); if (rotate_180_) { cv::rotate(img, img, cv::ROTATE_180); } } } // namespace device