захват экрана cv2 с низким FPS - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть сценарий, который я фиксирую часть и использую CV2 для обнаружения людей на экране. Работает нормально, но я не могу получить больше 2 FPS. Я тестировал на нескольких компьютерах и не видел, чтобы быть выпущенным в CPU.

import numpy as np
import cv2
from PIL import ImageGrab
from imutils.video import FPS

hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

cv2.destroyAllWindows()
cv2.waitKey(1)
print("[INFO] sampling frames from webcam...")
fps = FPS().start()
while(True):
    #tamanho da tela
    printscreen_pil = ImageGrab.grab(bbox=(0,40,1024,768))

    frame = np.array(printscreen_pil.getdata(),dtype='uint8')\
    .reshape((printscreen_pil.size[1],printscreen_pil.size[0],3))

    #coloca o video em preto e branco e cria a janela
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    boxes, weights = hog.detectMultiScale(frame, winStride=(8,8))

    # Coloca o texto na tela
    # cv2.putText(frame, "Slow Method", (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)

    boxes = np.array([[x, y, x + w, y + h] for (x, y, w, h) in boxes])

    for (xA, yA, xB, yB) in boxes:
        # display the detected boxes in the colour picture
        cv2.rectangle(frame, (xA, yA), (xB, yB),
                          (255, 255, 255), 2)

    cv2.imshow('window',frame)
    fps.update()
    if cv2.waitKey(1) & 0xFF == ord('q'):
         break
    fps.stop()
    print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))
    print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
...