Выпускает мульти-трекеры и версию opencv - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь реализовать мультитрекер OpenCV, как описано в этом руководстве (https://www.learnopencv.com/multitracker-multiple-object-tracking-using-opencv-c-python/), но я сталкиваюсь с некоторыми проблемами с версией OpenCV. Как сказано в других ответах по SO, для одногои конструкторы с несколькими трекерами. Я должен использовать opencv-contrib, однако после установки opencv-contrib вместо opencv я больше не могу использовать функцию VideoCapture. Я зашел в тупик, так как мне нужны обе функции, но contribopencv и opencv, кажется, не могут сосуществовать в одном и том же интерпретаторе. Кто-нибудь сталкивался с той же проблемой и может помочь мне с этим?


    import sys
    import cv2
    from random import randint

    trackerTypes = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']


    def createTrackerByName(trackerType):
        # Create a tracker based on tracker name
        if trackerType == trackerTypes[0]:
            tracker = cv2.TrackerBoosting_create()
        elif trackerType == trackerTypes[1]:
            tracker = cv2.TrackerMIL_create()
        elif trackerType == trackerTypes[2]:
            tracker = cv2.TrackerKCF_create()
        elif trackerType == trackerTypes[3]:
            tracker = cv2.TrackerTLD_create()
        elif trackerType == trackerTypes[4]:
            tracker = cv2.TrackerMedianFlow_create()
        elif trackerType == trackerTypes[5]:
            tracker = cv2.TrackerGOTURN_create()
        elif trackerType == trackerTypes[6]:
            tracker = cv2.TrackerMOSSE_create()
        elif trackerType == trackerTypes[7]:
            tracker = cv2.TrackerCSRT_create()
        else:
            tracker = None
            print('Incorrect tracker name')
            print('Available trackers are:')
            for t in trackerTypes:
                print(t)

        return tracker


    def main():
        # Set video to load
        videoPath = "../../data/videos/case-1-2D.avi"

        # Create a video capture object to read videos
        cap = cv2.VideoCapture(videoPath)

        # Read first frame
        success, frame = cap.read()
        # quit if unable to read the video file
        if not success:
            print('Failed to read video')
            sys.exit(1)

        ## Select boxes
    bboxes = []
    colors = []

    while True:
        bbox = cv2.selectROI('MultiTracker', frame)
        bboxes.append(bbox)
        colors.append((randint(0, 255), randint(0, 255), randint(0, 255)))
        print("Press q to quit selecting boxes and start tracking")
        print("Press any other key to select next object")
        k = cv2.waitKey(0) & 0xFF
        if (k == 113):  # q is pressed
            break

    print('Selected bounding boxes {}'.format(bboxes))

    # Specify the tracker type
    trackerType = "CSRT"

    # Create MultiTracker object
    multiTracker = cv2.MultiTracker_create()

    # Initialize MultiTracker
    for bbox in bboxes:
        multiTracker.add(createTrackerByName(trackerType), frame, bbox)

    # Process video and track objects
    while cap.isOpened():
        success, frame = cap.read()
        if not success:
            break

        # get updated location of objects in subsequent frames
        success, boxes = multiTracker.update(frame)

        # draw tracked objects
        for i, newbox in enumerate(boxes):
            p1 = (int(newbox[0]), int(newbox[1]))
            p2 = (int(newbox[0] + newbox[2]), int(newbox[1] + newbox[3]))
            cv2.rectangle(frame, p1, p2, colors[i], 2, 1)

        # show frame
        cv2.imshow('MultiTracker', frame)

        # quit on ESC button
        if cv2.waitKey(1) & 0xFF == 27:  # Esc pressed
            break



    if __name__ == '__main__':
        main()

Если я использую пакет opencv-python, я получаю сообщение об ошибке:

AttributeError: module 'cv2.cv2' has no attribute 
'MultiTracker_create'

Если я использую пакет opencv-contrib-python, я получаю ошибку:

AttributeError: module 'cv2' has no attribute 
'VideoCapture'

Если это может помочь, я работаю с PyCharm на MacOS, используя VirtualEnv для моего интерпретатора Python.Я уже пытался установить opencv-contrib (один), opencv (один), оставить на моем интерпретаторе и opencv-contrib, и opencv, понизить opencv до ранней версии, которая должна поддерживать самое интересноеCtions мне нужно (opencv 3.4).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...