Функция обнаружения человека быстрее, а подача медленная - PullRequest
0 голосов
/ 27 февраля 2020

Это мое первое кодирование при обработке изображений с использованием python и OpenCV. Мой первый проект использует веб-камеру для создания обнаружения движения человека и отображения его скорости ходьбы в режиме мониторинга в реальном времени, и теперь первым шагом я создал программу для обнаружения движения человека, но подача идет очень медленно, и результаты выходного видео очень быстро Например, я запускаю программу около 1 минуты, но длительность выходного видео составляет всего 7-10 секунд. Я не знаю, как это исправить, потому что я попробовал некоторые настройки, такие как изменение waitKey () и fps. Я использую методы HOG для обнаружения движения человека.

Примечание: я использую Logitech C270 с 30fps

, это моя программа:

import cv2
import numpy as np
import imutils
import time

#initialize the HOG descriptor/person detector
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

cv2.startWindowThread()

#open webcam video stream
cap = cv2.VideoCapture(1)

#output will be written to output.avi
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output_4.avi', fourcc, 18.0, (640,480))

frameCount = 0
start_time = time.time()

while(True):
    #capture frame-by-frame
    ret, frame = cap.read()
    cv2.waitKey(30)

    #resizing for faster detection
    frame = cv2.resize(frame, (640,480))

    #using a greyscale picture, also for faster detection
    gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)

    #detect people in the image
    boxes, weights = hog.detectMultiScale(frame, winStride=(8,8))

    #returns the bounding boxes for the detected objects
    boxes = np.array([[x, y, x+w, y+h] for (x,y,w,h) in boxes])

    #final bounding boxes
    for (xA, yA, xB, yB) in boxes:
        cv2.rectangle(frame, (xA, yA), (xB, yB),
                      (0,255,0),2)

    #write the output video
    out.write(frame)

    #display the resulting frame
    cv2.imshow('Human Detection',frame)

    if cv2.waitKey(30) & 0xFF == ord('q'):
        break

#release the capture
cap.release()
#release the output
out.release()
#close the window
cv2.destroyAllWindows()
cv2.waitKey(30)

Спасибо. Я надеюсь, что вы можете мне помочь.

...