Как использовать оптимизировать производительность процессоров в OpenCV- Python? - PullRequest
1 голос
/ 28 февраля 2020

Я новичок в многопроцессорности на OpenCV- Python. Я использую Raspberry Pi 2 Model B (четырехъядерный процессор x 1 ГГц). И я пытаюсь оптимизировать FPS на очень простом примере.

Это мой код:

webcam.py

import cv2
from threading import Thread
from multiprocessing import Process, Queue

class Webcam:
    def __init__(self):
        self.video_capture = cv2.VideoCapture('/dev/video2')
        self.current_frame = self.video_capture.read()[1]
        self.current_frame = cv2.resize(self.current_frame,(1280,720), cv2.INTER_AREA)

def _update_frame(self):
    self.current_frame = self.video_capture.read()[1]

def _resize(self):
    self.current_frame = cv2.resize(self.current_frame,(1280,720), cv2.INTER_AREA)

def resizeThread(self):
    p2 = Process(target=self._resize, args=())
    p2.start()

def readThread(self):
    p1 = Process(target=self._update_frame, args=())
    p1.start()

def get_frame(self):
    return self.current_frame

main.py

from webcam import Webcam
import cv2
import time
webcam = Webcam()
webcam.readThread()
webcam.resizeThread()
while True:
    startF = time.time()
    webcam._update_frame()
    webcam._resize()
    image = webcam.get_frame()
    print  (image.shape)
    cv2.imshow("Frame", image)
    endF = time.time()
    print ("FPS: {:.2f}".format(1/(endF-startF)))
    cv2.waitKey(1)

Я получил FPS только около 10 FPS.

FPS: 11.16
(720, 1280, 3)
FPS: 10.91
(720, 1280, 3)
FPS: 10.99
(720, 1280, 3)
FPS: 10.01
(720, 1280, 3)
FPS: 9.98
(720, 1280, 3)
FPS: 9.97

Так как я могу оптимизировать многопроцессорность для увеличения FPS? Правильно ли я использовал многопроцессорность?

Большое спасибо за помощь,

Toan

1 Ответ

1 голос
/ 28 февраля 2020

Не уверен, что это поможет с многопроцессорным аспектом, но вы можете оптимизировать вызов cv2.resize двумя способами:

  • Легко: измените аргумент интерполяции на INTER_LINEAR и выполните итеративное уменьшение масштаба с коэффициентом 2 *. Это даст примерно то же качество, но быстрее.
  • Сложнее: Вы можете изменить размеры графического процессора, поскольку это очень подходящее устройство для изменения размера

* Конечно, последний шаг в l oop должен использовать коэффициент меньше двух, чтобы убедиться, что результат имеет желаемый размер.

...