2017-05-03 16 views
0
# libraries that will be needed 
import numpy as np # numpy 
import cv2   # opencv 
import imutils  # allows video editing 
import random  
from imutils.object_detection import non_max_suppression 
from imutils import paths 
import imutils 
import cv2 

#default HOG 
hog = cv2.HOGDescriptor() 
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) 


# function to trak people 
def tracker(cap): 
    while True: 
     ret, img = cap.read() 

    # if video stopped playing, quit 
    if ret == False: 
     break 

     # resize window 
     img = imutils.resize(img, width = 400) 
     # convert to graysclae and equalize 
     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
     gray = cv2.equalizeHist(gray) 

     # detect people 
     rects, weights = hog.detectMultiScale(gray, winStride = (8, 8), padding = (8, 8), scale = 1.25) 
     # store detected people in array 
     rects = np.array([[x, y, x+w, y+h] for(x, y, w, h) in rects]) 
     # find largest possible rectangel to avoid detection 
     # of same person several times 
     biggest = non_max_suppression(rects, probs = None, overlapThresh = 0.65) 

     # draw largest rectangle 
     for (xA, yA, xB, yB) in biggest: 
      # create random color 
      color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) 
      cv2.rectangle(img, (xA, yA), (xB, yB), color, 2)   

     # show image 
     cv2.imshow('Image', img) 

     k = cv2.waitKey(30) & 0xFF 
     if k == 27: 
      break 
# run video 
cap = cv2.VideoCapture('NYC.mp4') 
tracker(cap) 
# release frame and destroy windows 
cap.release() 
cv2.destroyAllWindows 

OpenCVを使用して一度に複数の人を追跡しようとしています。一度人が検出されると、私はその人の周りに長方形を描きます。私は人のために同じ色のボックスを維持しながら、それらが検出された後にランダム/異なる色のボックスを各人に持っているのに困っている。OpenCV(Python)動画での描画、トラッキング

現在、人が検出され、ボックスが描画されます。次のフレームで、それらがまだ検出されていれば、新しいカラーボックスが描かれますが、元の色を維持したいと思います。

私は非常に新しいので、コードとトラッキングを改善するヒント/トリックも開いています。

答えて

0

同じ人物に同じ色のボックスを描画したい場合は、次のフレームの人物であると確信して言う必要があります。それを行うには多くの方法があります。 トラッキングを使用することもできます。私はあなたのデータセットを知らないので、Camshift/meanshiftトラッキングを使用してみてください(もちろん、多くのトラッキングアルゴがあります。

人が検出されたら、トラッカーを初期化し、その人にカラーボックスを割り当てます。人がイメージから外れている場合、その人をリストから削除するシステムがあります。

・ホープこのことができます:)

+0

私はhog.detectMultiScaleによって返される「rects」値に基づいてこれを行うことができるだろうか?また、ランダムな色の位置を変更すると有益でしょうか? – abashaw80

関連する問題