# 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)動画での描画、トラッキング
現在、人が検出され、ボックスが描画されます。次のフレームで、それらがまだ検出されていれば、新しいカラーボックスが描かれますが、元の色を維持したいと思います。
私は非常に新しいので、コードとトラッキングを改善するヒント/トリックも開いています。
私はhog.detectMultiScaleによって返される「rects」値に基づいてこれを行うことができるだろうか?また、ランダムな色の位置を変更すると有益でしょうか? – abashaw80