【问题标题】:Updating an OpenCV tracker with a bounding box in python在 python 中使用边界框更新 OpenCV 跟踪器
【发布时间】:2018-09-20 04:57:37
【问题描述】:

我正在使用 OpenCV 跟踪器在视频中执行人脸跟踪,并每隔几帧使用一个人脸检测器。如果人脸检测器检测到人脸,我想用“检测到的”边界框更新跟踪器。我看到有一个选项可以在 C++ 实现中输入 Rect,但由于某种原因不在 python 实现as written in the opencv documentation 中。这也是使用 dlib 的 correlation_tracker 时的一个选项。

目前,我只能使用边界框初始化跟踪器,但不能在 Python 中使用边界框对其进行更新。如果我的跟踪器偏离了它所跟踪的初始面部,即使我知道面部现在在哪里(使用我的面部检测器),我也无法“将其恢复”。有没有办法在 python 中做到这一点(例如,我应该杀死当前的跟踪器并用检测到的边界框初始化另一个)?

【问题讨论】:

  • 您找到解决方案了吗?是否足够快以杀死当前跟踪器并启动另一个跟踪器?
  • 我还没有找到解决方案(dlib 论坛也没有答案)。是否足够快取决于您需要做什么。
  • 您找到解决方案了吗?
  • 这在 C++ 中也不可能,C++ 函数的“boundingBox”参数是函数的输出框,而不是输入。

标签: python opencv


【解决方案1】:

我一直在寻找同样的东西,每次成功检测时我都通过重新创建跟踪器找到了解决问题的方法。请检查以下代码。如果有不清楚的地方,请随时询问详细信息:

import cv2 as cv

cap = cv.VideoCapture(0)

face_front_cascade = cv.CascadeClassifier("haarcascade_frontalface_alt.xml")    
tracker = cv.TrackerKCF_create()
bbox = ()

while True:
    ret,frame = cap.read()

    #press S to capture the face
    if cv.waitKey(20) & 0xFF == ord("s"):
        frame_gray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
        face = face_front_cascade.detectMultiScale(frame_gray, scaleFactor=1.5, minNeighbors=3)
        for (x, y, w, h) in face: 
            colour = (0,0,255)
            stroke = 20
            cv.rectangle(frame,(x,y),(x+w,y+h), colour, stroke)
            bbox = (x,y,w,h)
            tracker = cv.TrackerKCF_create() #overwrite old tracker

    #trace face and draw box around it
    if bbox:
        tracker.init(frame, bbox)
        ret, bbox = tracker.update(frame)
        if ret:
            p1 = (int(bbox[0]), int(bbox[1]))
            p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
            cv.rectangle(frame, p1, p2, (255, 0, 0), 2, 1)

    #show result
    cv.imshow("frame",frame)

    #press ESC to exit
    if cv.waitKey(20) & 0xFF ==27:
        break    
cap.release()
cv.destroyAllWindows()

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 2018-08-24
    • 2021-10-20
    • 2023-03-07
    • 1970-01-01
    • 2014-02-01
    • 2013-01-21
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多