Seguimiento de objetivo único OpenCV: una guía sencilla para implementar el seguimiento de objetivo

Seguimiento de objetivo único OpenCV: una guía sencilla para implementar el seguimiento de objetivo

Aprenda a implementar el seguimiento de un solo objetivo utilizando la biblioteca OpenCV. Esta guía presenta los principales algoritmos de seguimiento de objetivos en OpenCV, incluidos CSRT, KCF, MIL, GOTURN y DaSiamRPN. Realice un seguimiento preciso de la ubicación de destino en el vídeo seleccionando el área de destino inicial y utilizando el rastreador adecuado. Domine rápidamente la tecnología de seguimiento de un solo objetivo, adecuada para escenarios de aplicaciones como videovigilancia, conducción autónoma y seguimiento de peatones.
Barco TrackerKCF

Tabla de contenido:

  1. ¿Qué es el seguimiento de un solo objetivo?
  2. Seguimiento de objetos en OpenCV
  3. Pasos para implementar el seguimiento de un solo objetivo
  4. Implementación completa del código
  5. en conclusión

Seguimiento de un solo objetivo: uso de OpenCV para implementar el seguimiento de objetivos

En este blog, utilizaremos la biblioteca OpenCV para implementar el seguimiento de un solo objetivo. El seguimiento de objetos es una tarea importante en la visión por computadora, que nos permite rastrear un objeto específico en un video y rastrear su posición en una secuencia de video.
RastreadorKCF coche

¿Qué es el seguimiento de un solo objetivo?

El seguimiento de un solo objeto es una técnica de visión por computadora que nos permite seleccionar una región inicial en un video y luego predecir su posición en fotogramas posteriores mediante el seguimiento continuo del objeto. Esto es muy útil para muchas aplicaciones, como videovigilancia, conducción autónoma, seguimiento de peatones, etc.

Seguimiento de objetos en OpenCV

OpenCV es una popular biblioteca de visión por computadora de código abierto que proporciona varios algoritmos de seguimiento de objetos. En este artículo, utilizaremos el rastreador de objetos de OpenCV para implementar el seguimiento de un solo objeto. A partir de la versión OpenCV 4.6.0, proporciona los siguientes algoritmos principales de seguimiento de objetivos:

  • TrackerCSRT: Rastreador CSRT (Seguimiento de confiabilidad espacial y de canales)
  • TrackerKCF: Rastreador KCF (filtros de correlación kernelizados)
  • TrackerMIL: Rastreador MIL (aprendizaje de instancias múltiples)
  • TrackerGOTURN: GOTURN (Seguimiento de objetos genéricos mediante redes de regresión) 跟踪器
  • TrackerDaSiamRPN: Rastreador DaSiamRPN (Redes siamesas totalmente convolucionales profundas para seguimiento de objetos)
    En OpenCV versión 4.7.0, TrackerNanotambién se agrega un rastreador llamado.

Rastreador Opencv 4.8

Pasos para implementar el seguimiento de un solo objetivo

Estos son los pasos para implementar el seguimiento de un solo objetivo:

  1. Importe las bibliotecas y archivos de encabezado necesarios
  2. Cree una clase de fábrica de rastreadores de destino TrackerFactory para crear el objeto de rastreador de destino correspondiente de acuerdo con el nombre especificado
  3. Configure el vídeo de entrada y seleccione el área de destino inicial
  4. Inicialice el rastreador de objetivos e inicie el proceso de seguimiento
  5. Actualice el rastreador en cada cuadro y muestre los resultados del seguimiento en la imagen
  6. Cuando se presiona la tecla ESC, se sale del proceso de seguimiento.

Implementación completa del código

#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>

class TrackerFactory
{
public:
	 /*
     * 截至 opencv 4.6.0 版本
     * ["TrackerCSRT","TrackerKCF","TrackerMIL","TrackerGOTURN","TrackerDaSiamRPN"]
     * 其中 TrackerMIL、TrackerGOTURN、TrackerDaSiamRPN 属于 Main modules / Video Analysis / Object Tracking 模块。opencv 4.7.0 版本添加了一个 TrackerNano 追踪器。
     * TrackerCSRT、TrackerKCF 属于 Extra modules / Tracking API 模块。Extra modules 部分自行编译源代码。
     */
    static cv::Ptr<cv::Tracker> create(const std::string& name) {
        do {
            if(name.compare("TrackerCSRT") == 0) {
                return cv::TrackerCSRT::create();
            }
            if(name.compare("TrackerKCF") == 0) {
                return cv::TrackerKCF::create();
            }
            if(name.compare("TrackerMIL") == 0) {
                return cv::TrackerMIL::create();
            }
            if(name.compare("TrackerGOTURN") == 0) {
                return cv::TrackerGOTURN::create();// 需要下载 goturn.caffemodel 模型和 goturn.prototxt 模型定义文件。
            }
            if(name.compare("TrackerDaSiamRPN") == 0) {
                return cv::TrackerDaSiamRPN::create();// 需要下载模型 dasiamrpn_model.onnx 模型和dasiamrpn_kernel_r1.onnx、dasiamrpn_kernel_cls1.onnx参数配置文件。
            }
        } while(false);

        return nullptr;
    }
};

int main(int argc, char** argv) {
    cv::namedWindow("tracker", cv::WINDOW_NORMAL);
    cv::resizeWindow("tracker", {640, 480});

    cv::Rect roi;
    cv::Mat frame;

    // 创建一个跟踪器对象
    cv::Ptr<cv::Tracker> tracker = TrackerFactory::create("TrackerKCF");

    // 设置输入视频
    std::string video = "rtsp://admin:[email protected]:554/Stream/Live/101";
    cv::VideoCapture cap(video);

    // 获取初始边界框
    cap >> frame;
    roi = selectROI("tracker", frame);

    // 如果没有选择ROI,则退出程序
    if(roi.width == 0 || roi.height == 0) return 0;

    // 初始化跟踪器
    tracker->init(frame, roi);

    // 开始跟踪过程
    printf("Start the tracking process, press ESC to quit.\n");

    for(;;) {
        // 从视频中获取一帧
        cap >> frame;

        // 如果没有更多图像,则退出
        if(frame.rows == 0 || frame.cols == 0) break;

        // 更新跟踪结果
        cv::TickMeter cost;
        cost.start();
        auto tracking = tracker->update(frame, roi);
        cost.stop();
        // 计算耗时时间
        printf("cost:%.2f tracking:%s", cost.getTimeMilli(), tracking ? "true" : "false");

        // 在图像中绘制跟踪的对象
        cv::rectangle(frame, roi, cv::Scalar(255, 0, 0), 3, 1);

        // 显示带有跟踪对象的图像
        cv::imshow("tracker", frame);

        // 按下ESC键退出
        if(cv::waitKey(1) == 27) break;
    }

    return 0;
}

Nota: Para ejecutar TrackerDaSiamRPN y TrackerGOTURN es necesario descargar los archivos de modelo correspondientes.
Archivo de modelo dasiamrpn-model.onnx: https://download.csdn.net/download/cheungxiongwei/88188476
Archivo de modelo goturn.caffemodel: https://download.csdn.net/download/cheungxiongwei/88188478
Después de descargarlo, extráigalo a En el mismo directorio de nivel de programa, el rastreador opencv se cargará automáticamente y también puede especificar los parámetros para cargar en el método de creación del rastreador.

opencv TrackerKCF tracker siguiendo al auto

opencv TrackerKCF rastreador de seguimiento de barcos

en conclusión

Esta publicación de blog presenta el método de uso de OpenCV para lograr el seguimiento de un solo objetivo. Utilizamos el rastreador de objetos proporcionado por OpenCV para rastrear la posición de un objeto seleccionado inicialmente en la secuencia de video. El seguimiento de objetivos es muy importante en muchas aplicaciones de visión por computadora. Espero que este artículo pueda ayudarlo a comenzar rápidamente con la implementación del seguimiento de un solo objetivo. Si está interesado en esto, puede continuar explorando aplicaciones y algoritmos de seguimiento de objetivos más complejos. ¡gracias por leer!

Supongo que te gusta

Origin blog.csdn.net/cheungxiongwei/article/details/132163193
Recomendado
Clasificación