[Ubuntu] [Python] Suivi d'objets à l'aide de dlib

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 [[Ubuntu] [Python] Suivi d'objets à l'aide de dlib](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

[Ubuntu] [Python] Suivi d'objets à l'aide de dlib
[Ubuntu] [Python] Détection d'organes faciaux à l'aide de dlib
Objet intégré Python
Commencez à utiliser Python
Objet intégré Python
Scraping à l'aide de Python
Estimation de l'orientation de la tête avec Python et OpenCV + dlib
Construire l'environnement Python3.5 + matplotlib sur Ubuntu 12 en utilisant Anaconda
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Développement Python sur Ubuntu sur AWS EC2 (à l'aide de Jupyter Lab)
Manipuler Redmine à l'aide de Python Redmine
Séquence de Fibonacci utilisant Python
Suivi d'objets à l'aide d'OpenCV3 et de Python3 (suivi des points caractéristiques spécifiés par la souris à l'aide de la méthode Lucas-Kanade)
Nettoyage des données à l'aide de Python
[Ubuntu] [Python] Comparaison de la détection de visage entre dlib et OpenCV
Utilisation des packages Python #external
Orienté objet en python
Câblage Communication Pi-SPI avec Python
Calcul de l'âge à l'aide de python
Rechercher sur Twitter avec Python
construire Python sur Ubuntu
Installez Python 3.3 sur Ubuntu 12.04
À propos de Python3 ... (objet Ellipsis)
Identification de nom à l'aide de python
Notes sur l'utilisation de sous-processus Python
Jouer un bip sonore en Python (Ubuntu)
Essayez d'utiliser Tweepy [Python2.7]
Aplatir à l'aide du rendement Python de
Utilisation de X11 avec ubuntu18.04 (langage C)
Scraping à l'aide de Python 3.5 async / await
Enregistrer des images à l'aide de requêtes python3
Utilisez matplotlib sur Ubuntu 12 et Python
[S3] CRUD avec S3 utilisant Python [Python]
[Python] Essayez d'utiliser le canevas de Tkinter
Méthodes d'objet chaîne en Python
Utilisation de Quaternion avec Python ~ numpy-quaternion ~
[python] Valeur de l'objet fonction (?)
Windows10: installation de la bibliothèque dlib pour python
Comparaison d'objets nuls en Python
Essayez d'utiliser Kubernetes Client -Python-
notes python pour l'utilisation de variables spéciales perl
[Python] Utilisation d'OpenCV avec Python (basique)
Scraping à l'aide de la syntaxe Python 3.5 Async
Surveillance des changements de site Web à l'aide de python
Détection de visage avec Python + dlib
Publier sur Twitter en utilisant Python
Mettez Python 3.x dans Ubuntu
Créer un environnement python3 avec ubuntu 16.04
Commencez à Selenium en utilisant python
Algorithme de recherche utilisant word2vec [python]
Changer la version de python à l'aide de pyenv
python: principes de base de l'utilisation de scikit-learn ①
# 1 [python3] Calcul simple à l'aide de variables
Créer des tickets JIRA en utilisant Python
Installez OpenCV sur Ubuntu + python
Contrôle d'instruments à l'aide de Python [pyvisa]