如何在 OpenCV-Python 中使用优化处理器性能?
How to use optimize processors performance in OpenCV-Python?
我是 OpenCV 多处理的初学者-Python。我正在使用 Raspberry Pi 2 型号 B(四核 x 1GHz)。我正在尝试通过一个非常简单的示例来优化 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)
我只有 10 FPS 左右的 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?我是否正确使用了多重处理?
非常感谢你帮助我,
东安
不确定这对多处理方面是否有帮助,但您可以通过两种方式优化 cv2.resize 调用:
- 简单:将插值参数更改为 INTER_LINEAR 并按 2 * 进行迭代缩小。这将产生大致相同的质量,但速度更快。
- 更难:您可以在 GPU 上调整大小,因为它是调整大小的非常合适的设备
* 当然,循环的最后一步应该使用小于二的因子,以确保结果具有您想要的大小。
我是 OpenCV 多处理的初学者-Python。我正在使用 Raspberry Pi 2 型号 B(四核 x 1GHz)。我正在尝试通过一个非常简单的示例来优化 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)
我只有 10 FPS 左右的 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?我是否正确使用了多重处理?
非常感谢你帮助我,
东安
不确定这对多处理方面是否有帮助,但您可以通过两种方式优化 cv2.resize 调用:
- 简单:将插值参数更改为 INTER_LINEAR 并按 2 * 进行迭代缩小。这将产生大致相同的质量,但速度更快。
- 更难:您可以在 GPU 上调整大小,因为它是调整大小的非常合适的设备
* 当然,循环的最后一步应该使用小于二的因子,以确保结果具有您想要的大小。