@Odin08

PyQtGraph. Повысить фпс при отображении изображения 4.2 МPixels?

Здравствуйте!
Написал приложение для отображения видео с научной камеры 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()
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 150 000 до 250 000 руб.
YLab Тольятти
от 90 000 до 150 000 руб.
BestDoctor Москва
от 120 000 до 150 000 руб.
23 апр. 2019, в 13:06
1000 руб./в час
23 апр. 2019, в 12:58
5000 руб./за проект
23 апр. 2019, в 12:22
150 руб./за проект