Le suivi des objets d'OpneCV a déplacé l'échantillon de temps en temps, Je n'ai jamais lancé dlib, alors essayez-le.
Il semble que les performances soient plutôt bonnes car je suis le flou de mouvement.
La vidéo est ci-dessous.
https://www.youtube.com/watch?v=ORgMddcNHvU
[
](https://www.youtube.com/watch?v = ORgMddcNHvU)
Le code source est ci-dessous.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
correlation_tracker.py.
Usage:
  correlation_tracker.py [<video source>] [<resize rate>]
'''
import sys
import dlib
import cv2
import time
import copy
#Gestionnaire d'événements de souris
mouse_start_x, mouse_start_y = 0, 0
mouse_end_x, mouse_end_y = 0, 0
selecting = False
tracker_start_flag = False
tracking_flag = False
def select_roi(event,x,y,flags,param):
    global selecting, tracker_start_flag
    global mouse_start_x, mouse_start_y
    global mouse_end_x, mouse_end_y
    if event == cv2.EVENT_LBUTTONDOWN:
        selecting = True
        mouse_start_x, mouse_start_y = x,y
    elif event == cv2.EVENT_MOUSEMOVE:
        if selecting == True:
            mouse_end_x, mouse_end_y = x, y
        else:
            pass
    elif event == cv2.EVENT_LBUTTONUP:
        mouse_end_x, mouse_end_y = x, y
        selecting = False
        tracker_start_flag = True
#Interprétation des arguments
try:
    fn = sys.argv[1]
    if fn.isdigit() == True:
        fn = int(fn)
except:
    fn = 0
try:
    resize_rate = sys.argv[2]
    resize_rate = int(resize_rate)
except:
    resize_rate = 1
#Génération de tracker
tracker = dlib.correlation_tracker()
video_input = cv2.VideoCapture(fn)
if (video_input.isOpened() == True):
    ret, frame = video_input.read()
    cv2.imshow('correlation tracker', frame)
    cv2.setMouseCallback('correlation tracker', select_roi)
while(video_input.isOpened() == True):
    ret, frame = video_input.read()
    temp_frame = copy.deepcopy(frame)
    #Réduction de la trame cible pour réduire la charge de traitement (lorsque l'argument est spécifié)
    height, width = frame.shape[:2]
    temp_frame = cv2.resize(frame, (int(width/resize_rate), int(height/resize_rate)))
    if tracker_start_flag == True:
        #Commencer le suivi
        tracker.start_track(temp_frame, dlib.rectangle(mouse_start_x, mouse_start_y, mouse_end_x, mouse_end_y))
        tracking_flag = True
        tracker_start_flag = False
    elif tracking_flag == True:
        #Suivi des mises à jour
        tracker.update(temp_frame)
    #dessin
    if selecting == True:
        cv2.rectangle(frame, (mouse_start_x, mouse_start_y), (mouse_end_x, mouse_end_y), (0, 0, 255), 2)
    if tracking_flag == True:
        tracking_point = tracker.get_position()
        tracking_point_x1 = int(tracking_point.left())
        tracking_point_y1 = int(tracking_point.top())
        tracking_point_x2 = int(tracking_point.right())
        tracking_point_y2 = int(tracking_point.bottom())
        cv2.rectangle(frame, (tracking_point_x1, tracking_point_y1), (tracking_point_x2, tracking_point_y2), (0, 0, 255), 2)
    cv2.imshow('correlation tracker', frame)
    c = cv2.waitKey(50) & 0xFF
    if c==27: # ESC
        break
c'est tout.
Recommended Posts