Filip Kujawa | dc7d47c | 2023-04-08 16:16:51 -0700 | [diff] [blame] | 1 | #ifndef Y2023_VISION_YOLOV5_H_ |
| 2 | #define Y2023_VISION_YOLOV5_H_ |
| 3 | |
Filip Kujawa | dc7d47c | 2023-04-08 16:16:51 -0700 | [diff] [blame] | 4 | #include <chrono> |
| 5 | #include <cmath> |
| 6 | #include <cstdint> |
| 7 | #include <fstream> |
| 8 | #include <iostream> |
| 9 | #include <opencv2/core.hpp> |
Filip Kujawa | dc7d47c | 2023-04-08 16:16:51 -0700 | [diff] [blame] | 10 | #include <opencv2/highgui/highgui.hpp> |
| 11 | #include <opencv2/imgcodecs.hpp> |
| 12 | #include <opencv2/imgproc.hpp> |
| 13 | #include <vector> |
| 14 | |
| 15 | namespace y2023 { |
| 16 | namespace vision { |
| 17 | |
| 18 | struct Detection { |
| 19 | cv::Rect box; |
| 20 | double confidence; |
| 21 | int class_id; |
| 22 | }; |
| 23 | |
| 24 | class YOLOV5 { |
| 25 | public: |
Filip Kujawa | 8c76e5d | 2023-04-08 16:20:27 -0700 | [diff] [blame] | 26 | virtual ~YOLOV5() {} |
Filip Kujawa | 26a2366 | 2023-04-08 16:19:13 -0700 | [diff] [blame] | 27 | |
Filip Kujawa | dc7d47c | 2023-04-08 16:16:51 -0700 | [diff] [blame] | 28 | // Takes a model path as string and loads a pre-trained |
| 29 | // YOLOv5 model from the specified path. |
Filip Kujawa | 8c76e5d | 2023-04-08 16:20:27 -0700 | [diff] [blame] | 30 | virtual void LoadModel(const std::string path) = 0; |
Filip Kujawa | dc7d47c | 2023-04-08 16:16:51 -0700 | [diff] [blame] | 31 | |
| 32 | // Takes an image and returns a Detection. |
Filip Kujawa | 8c76e5d | 2023-04-08 16:20:27 -0700 | [diff] [blame] | 33 | virtual std::vector<Detection> ProcessImage(cv::Mat image) = 0; |
Filip Kujawa | dc7d47c | 2023-04-08 16:16:51 -0700 | [diff] [blame] | 34 | }; |
| 35 | |
Filip Kujawa | 26a2366 | 2023-04-08 16:19:13 -0700 | [diff] [blame] | 36 | std::unique_ptr<YOLOV5> MakeYOLOV5(); |
| 37 | |
Filip Kujawa | dc7d47c | 2023-04-08 16:16:51 -0700 | [diff] [blame] | 38 | } // namespace vision |
| 39 | } // namespace y2023 |
| 40 | |
| 41 | #endif // Y2023_VISION_YOLOV5_H_ |