// VitTracker // model: https://github.com/opencv/opencv_zoo/tree/main/models/object_tracking_vittrack #include #include #include #include #include #include using namespace cv; using namespace cv::dnn; const char *keys = "{ help h | | Print help message }" "{ input i | | Full path to input video folder, the specific camera index. (empty for camera 0) }" "{ net | vitTracker.onnx | Path to onnx model of vitTracker.onnx}" "{ tracking_score_threshold t | 0.3 | Tracking score threshold. If a bbox of score >= 0.3, it is considered as found }" "{ backend | 0 | Choose one of computation backends: " "0: automatically (by default), " "1: Halide language (http://halide-lang.org/), " "2: Intel's Deep Learning Inference Engine (https://software.intel.com/openvino-toolkit), " "3: OpenCV implementation, " "4: VKCOM, " "5: CUDA }," "{ target | 0 | Choose one of target computation devices: " "0: CPU target (by default), " "1: OpenCL, " "2: OpenCL fp16 (half-float precision), " "3: VPU, " "4: Vulkan, " "6: CUDA, " "7: CUDA fp16 (half-float preprocess) }" ; static int run(int argc, char** argv) { // Parse command line arguments. CommandLineParser parser(argc, argv, keys); if (parser.has("help")) { parser.printMessage(); return 0; } std::string inputName = parser.get("input"); std::string net = parser.get("net"); int backend = parser.get("backend"); int target = parser.get("target"); float tracking_score_threshold = parser.get("tracking_score_threshold"); Ptr tracker; try { TrackerVit::Params params; params.net = samples::findFile(net); params.backend = backend; params.target = target; params.tracking_score_threshold = tracking_score_threshold; tracker = TrackerVit::create(params); } catch (const cv::Exception& ee) { std::cerr << "Exception: " << ee.what() << std::endl; std::cout << "Can't load the network by using the following files:" << std::endl; std::cout << "net : " << net << std::endl; return 2; } const std::string winName = "vitTracker"; namedWindow(winName, WINDOW_AUTOSIZE); // Open a video file or an image file or a camera stream. VideoCapture cap; if (inputName.empty() || (isdigit(inputName[0]) && inputName.size() == 1)) { int c = inputName.empty() ? 0 : inputName[0] - '0'; std::cout << "Trying to open camera #" << c << " ..." << std::endl; if (!cap.open(c)) { std::cout << "Capture from camera #" << c << " didn't work. Specify -i=