rm_vision/tasks/auto_aim/multithread/mt_detector.hpp
2025-12-15 02:33:20 +08:00

44 lines
1.1 KiB
C++

#ifndef AUTO_AIM__MT_DETECTOR_HPP
#define AUTO_AIM__MT_DETECTOR_HPP
#include <chrono>
#include <opencv2/opencv.hpp>
#include <openvino/openvino.hpp>
#include <tuple>
#include "tasks/auto_aim/yolos/yolov5.hpp"
#include "tools/logger.hpp"
#include "tools/thread_safe_queue.hpp"
namespace auto_aim
{
namespace multithread
{
class MultiThreadDetector
{
public:
MultiThreadDetector(const std::string & config_path, bool debug = false);
void push(cv::Mat img, std::chrono::steady_clock::time_point t);
std::tuple<std::list<Armor>, std::chrono::steady_clock::time_point> pop(); //暂时不支持yolov8
std::tuple<cv::Mat, std::list<Armor>, std::chrono::steady_clock::time_point> debug_pop();
private:
ov::Core core_;
ov::CompiledModel compiled_model_;
std::string device_;
YOLO yolo_;
tools::ThreadSafeQueue<
std::tuple<cv::Mat, std::chrono::steady_clock::time_point, ov::InferRequest>>
queue_{16, [] { tools::logger()->debug("[MultiThreadDetector] queue is full!"); }};
};
} // namespace multithread
} // namespace auto_aim
#endif // AUTO_AIM__MT_DETECTOR_HPP