Здравствуйте!
Написал приложение для отображения видео с научной камеры 4.2 МPixels. Однако фпс для такого разрешения порядка 6. Примеры SpeedTest_Video для pyqtgraph при больших значениях дают тот же результат. Есть у кого соображения как ускорить все это дело (в работе важна тонкая настройка)? В программировании новичок.
Для тестирования приложения изображение заменено функцией intensity, скорость создания массива grab_image() в данном коде совпадает со скоростью получения изображении с камеры с минимальной экспозицией. Цветовая карта необходима. Приложения располагает кнопками и другим, но для тестирования я их не отрисовываю.
import sys
import matplotlib.pyplot as plt
import numpy as np
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
from PyQt5.QtWidgets import QMainWindow
from MineGUI import Ui_Dialog
from pyqtgraph.ptime import time
class MainWindow(QMainWindow, Ui_Dialog):
def __init__(self, parent=None, *args, **kwargs):
QMainWindow.__init__(self)
self.setupUi(self)
def main():
# Init main window window
app = QtGui.QApplication([])
main = MainWindow()
main.show()
# Add ViewBox for Image
view = pg.ViewBox()
main.imshow.setCentralItem(view) # (main.imshow = pg.GraphicsView(Dialog) from MineGUI)
# Add Image Item and set colormap
img = pg.ImageItem()
cmap = pg.ColorMap(bit, colmap)
lut = cmap.getLookupTable(0.0, 1.0, 255)
img.setLookupTable(lut)
img.setAutoDownsample(True)
img.setBorder('b')
view.addItem(img)
timer = QtCore.QTimer()
def setText(qo):
main.exposValue.setText(str(qo)) #(main.exposValue = QtWidgets.QLabel(Dialog) from MineGUI)
def grab_image():
wx = 720 + np.random.rand(1) * 20
wy = 650 + np.random.rand(1) * 30
return intensity(x, wx, wy)
def intensity(x, wx, wy):
zx = np.exp(-2 * (x[None, :] - 1000) ** 2 / wx ** 2)
zy = np.exp(-2 * (x[:, None] - 1000) ** 2 / wy ** 2)
return (zx * zy)
global lastTime, fps
lastTime = time()
fps = None
x = np.arange(0, 2048, 1)
def update():
global lastTime, fps, data
data = grab_image()
img.setImage(data)
now = time()
dt = now - lastTime
lastTime = now
if fps is None:
fps = 1.0 / dt
else:
s = np.clip(dt * 3., 0, 1)
fps = fps * (1 - s) + (1.0 / dt) * s
setText('%0.2f fps' % fps)
start = time()
app.processEvents()
print(time() - start)
timer.timeout.connect(update)
timer.start(0)
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
bit = np.arange(0, 257, 1)/256
colmap = np.array(255 * plt.cm.nipy_spectral(bit), dtype=np.ubyte)
main()