blob: 9853b4fcb01b51e61664c6aa3460033b617d89da [file] [log] [blame]
Filip Kujawadc7d47c2023-04-08 16:16:51 -07001#ifndef Y2023_VISION_YOLOV5_H_
2#define Y2023_VISION_YOLOV5_H_
3
Filip Kujawadc7d47c2023-04-08 16:16:51 -07004#include <chrono>
5#include <cmath>
6#include <cstdint>
7#include <fstream>
8#include <iostream>
Philipp Schrader790cb542023-07-05 21:06:52 -07009#include <vector>
10
Filip Kujawadc7d47c2023-04-08 16:16:51 -070011#include <opencv2/core.hpp>
Filip Kujawadc7d47c2023-04-08 16:16:51 -070012#include <opencv2/highgui/highgui.hpp>
13#include <opencv2/imgcodecs.hpp>
14#include <opencv2/imgproc.hpp>
Filip Kujawadc7d47c2023-04-08 16:16:51 -070015
16namespace y2023 {
17namespace vision {
18
19struct Detection {
20 cv::Rect box;
21 double confidence;
22 int class_id;
23};
24
25class YOLOV5 {
26 public:
Filip Kujawa8c76e5d2023-04-08 16:20:27 -070027 virtual ~YOLOV5() {}
Filip Kujawa26a23662023-04-08 16:19:13 -070028
Filip Kujawadc7d47c2023-04-08 16:16:51 -070029 // Takes a model path as string and loads a pre-trained
30 // YOLOv5 model from the specified path.
Filip Kujawa8c76e5d2023-04-08 16:20:27 -070031 virtual void LoadModel(const std::string path) = 0;
Filip Kujawadc7d47c2023-04-08 16:16:51 -070032
33 // Takes an image and returns a Detection.
Filip Kujawa8c76e5d2023-04-08 16:20:27 -070034 virtual std::vector<Detection> ProcessImage(cv::Mat image) = 0;
Filip Kujawadc7d47c2023-04-08 16:16:51 -070035};
36
Filip Kujawa26a23662023-04-08 16:19:13 -070037std::unique_ptr<YOLOV5> MakeYOLOV5();
38
Filip Kujawadc7d47c2023-04-08 16:16:51 -070039} // namespace vision
40} // namespace y2023
41
42#endif // Y2023_VISION_YOLOV5_H_