Advertisement

Opencv Object Tracking【使用OpenCV目标跟踪模块】

阅读量:

实时目标检测如RCNN、Yolo、ssd等方法均能有效实现目标识别任务,在实际应用中针对工业场景中的目标检测方案落地时需注意以下几点:首先由于这些嵌入式系统的硬件性能难以满足高性能计算的要求因此无法直接采用上述高效算法;其次当需要对特定场景下的特定物体进行精确识别时则可考虑采用基于物体检测与跟踪技术结合的目标方案

值得期待的是,在计算机视觉领域有着广泛应用的OpenCV技术集合中拥有8种独立的目标检测算法

OpenCV中的8种目标检测方法

1.BOOSTING Tracker

该算法采用了机器学习结合Haar级联(Adaboost)的方法,在OpenCV 3.0.0框架下实现,并被归类为一种相对落后的技术手段。它虽然运行较慢且整体性能尚欠理想,但主要应用于不同算法间的对比分析与基准测试。

2.MIL Tracker

比boosting具有更好的准确率,但是存在报错的几率。(>opencv3.0.0)

3.KCF Tracker

核相关滤波算法,比上述两种都要快,但是偶然因素下存在失效。(>opencv3.1.0)

4.CSRT Tracker

discriminant correlation filter algorithm在通道和平移不变性方面具有良好的鲁棒性,在识别精度上表现更为出色。然而,在计算效率上略低于KCF。(>opencv3.4.2)

5.MedianFlow Tracker

失效性能良好,然后如果目标变动过大,如移动过快,容易丢失目标。(>opencv3.0.0)

6.TLD Tracker

有一定的假正率,不推荐使用该种OpenCV目标跟踪方法。

7.MOSSE Tracker

极度快速的方法在性能上具有显著优势

8.GOTURN Tracker

这种独特的深度学习方案仅适用于OpenCV平台。它必须依赖特定的模型文件caffemode+prototext,并且同时基于著名的caffe框架运行。

先给建议,再给实操。

使用CSRT当需要非常高的跟踪准确率。并且可以容忍慢一些的帧率。

使用KCF,当需要较快的FPS,但同时能够容忍轻微弱的准确率。

使用MOSSE,当需要非常高的FPS。

opencv_object_tracker.py

复制代码
 from imutils.video import VideoSteram

    
 from imutils.video import FPS
    
 import argparse
    
 import imutils
    
 import time
    
 import cv2
    
  
    
 #pip install --upgrade imutils
    
  
    
 ap = argparse.ArgumentParse()
    
 ap.add_argument("-v", "--video", type=str, help="path to input video files"
    
 ap.add_argument("-t", "--tracker", type=str, default="kcf", help="opencv object tracker type")
    
 args = vars(ap.parse_args())
    
  
    
 (major, minor) = cv2.__version__.split(".")[:2]
    
  
    
 if int(majot) ==3 and int(minor) <3:
    
     tracker=cv2.Tracker_create(args["tracker"]).upper()
    
 else:
    
     OPENCV_OBJECT_TRACKERS ={
    
     "csrt":cv2.TrackerCSRT_create,
    
     "kcf":cv2.TrckerCKF_create,
    
     "mil":cv2.TrckerMIL_create,
    
     "tld":cv2.TrckerTLD_create,
    
     "medianflow":cv2.TrackerMedianFlow_create,
    
     "mosse":cv2.TrackerMOSSE_create
    
     }
    
     tarcker = OPENCV_OBJECT_TRACKERS[args["tracker"]]()
    
 initBB =None
    
  
    
 if not args.get("video", False):
    
     print("[INFO]starting video stream...")
    
     vs = VideoStream(src=0).start()
    
     time.sleep(1.0)
    
  
    
 else:
    
     vs = cv2.VideoCapture(arg["vide"])
    
 fps=None
    
  
    
 while True:
    
     frame = vs.read()
    
     frame=frame[1] if args.get("video", False) else frame
    
  
    
     if frame is None:
    
     break
    
  
    
     frame = imutils.resize(frame, width=500)
    
     (H, W) = frame.shape[:2]
    
     
    
     if intiBB is not None:
    
     if success:
    
         (x, y, w, h)=[int(v) for v in box]
    
         cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255,0),2)
    
     fps.update()
    
     fps.stop()
    
  
    
     info=[
    
         ("Tracker", args["tracker"]),
    
         ("Success", "Yes", if success else "No"),
    
         ("FPS", "{:.2f}".format(fps.fps())),
    
     ]
    
     
    
     for (i, (k, v)) in enumerate(info):
    
         text="{}:{}".format(k ,v)
    
         cv2.puttext(frame, text, (10, H - ((i*10) +20)), 
    
             cv2.FONT_HERSHEY_SIMPLE, 0.6, (0,0,255),2)
    
  
    
     cv2.imshow("Frame", frame)
    
     key = cv2.waitKey(1) && oxff
    
  
    
     if key == ord("s"):
    
     initBB =cv2.selectROI("Frame", frame, fromCenter=False, showCrosshair=True)
    
     tracker.init(frame, initBB)
    
     fps == FPS().start()
    
     elif key == ord("q"):
    
      break
    
 if not args.get("video", False):
    
     vs.stop()
    
 else:
    
     vs.release()
    
  
    
 cv2.desrtoyAllWindows()

python opecv_object_tracking.py --video 1.mp4 --tracker csrt

全部评论 (0)

还没有任何评论哟~