blob: 7e2a521b20ee6dd7ff5c4a93cd1a683c0cbff74f [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>
9#include <opencv2/core.hpp>
Filip Kujawadc7d47c2023-04-08 16:16:51 -070010#include <opencv2/highgui/highgui.hpp>
11#include <opencv2/imgcodecs.hpp>
12#include <opencv2/imgproc.hpp>
13#include <vector>
14
15namespace y2023 {
16namespace vision {
17
18struct Detection {
19 cv::Rect box;
20 double confidence;
21 int class_id;
22};
23
24class YOLOV5 {
25 public:
Filip Kujawa8c76e5d2023-04-08 16:20:27 -070026 virtual ~YOLOV5() {}
Filip Kujawa26a23662023-04-08 16:19:13 -070027
Filip Kujawadc7d47c2023-04-08 16:16:51 -070028 // Takes a model path as string and loads a pre-trained
29 // YOLOv5 model from the specified path.
Filip Kujawa8c76e5d2023-04-08 16:20:27 -070030 virtual void LoadModel(const std::string path) = 0;
Filip Kujawadc7d47c2023-04-08 16:16:51 -070031
32 // Takes an image and returns a Detection.
Filip Kujawa8c76e5d2023-04-08 16:20:27 -070033 virtual std::vector<Detection> ProcessImage(cv::Mat image) = 0;
Filip Kujawadc7d47c2023-04-08 16:16:51 -070034};
35
Filip Kujawa26a23662023-04-08 16:19:13 -070036std::unique_ptr<YOLOV5> MakeYOLOV5();
37
Filip Kujawadc7d47c2023-04-08 16:16:51 -070038} // namespace vision
39} // namespace y2023
40
41#endif // Y2023_VISION_YOLOV5_H_