#include <string>
#include <vector>

#include "infer.hpp"

int main(int argc, char *argv[]) {
  // Проверяет количество аргументов
  if (argc != 3) {
    std::cerr << "Использование: " << argv[0] << " <model_path> <image_path>" << std::endl;
    return EXIT_FAILURE;
  }

  // Получает пути к модели и изображению из аргументов программы
  const std::string model_path = argv[1];
  const std::string image_path = argv[2];

  // Проверяем наличие OpenVINO попыткой вывести версию
  try {
    std::cout << ov::get_openvino_version() << std::endl;
  } catch (const std::exception &ex) {
    std::cerr << ex.what() << std::endl;
    return EXIT_FAILURE;
  }

  // Читает изображение из файла
  cv::Mat image = cv::imread(image_path);
  if (image.empty()) {
    std::cerr << "ОШИБКА: Не удалось загрузить изображение" << std::endl;
    return EXIT_FAILURE;
  }

  // Определение значений
  const float probability = 0.5;
  const float NMS = 0.5;

  // Создание объекта класса распознования
  Inf *i;
  i = new Inf(model_path, cv::Size(640, 640), probability, NMS);

  // Запуск распознования объектов
  i->inference(image);

  // Запись результата в файл
  cv::imwrite("/tmp/cpp_openvino_result.bmp", image);

  return EXIT_SUCCESS;
}
