Я пытаюсь построить данные в реальном времени, которые передаются с камеры CMOS в Python. Небольшое примечание: я хочу использовать это для стабилизации наведения лазера в лаборатории. Я использую ImageItem из модуля pyqtgraph, и мой скрипт в основном является модификацией примера ImageItem (см. Ниже).

Однако, когда я выполняю сценарий, я немедленно получаю задержку около 3 секунд, и объем оперативной памяти увеличивается, пока процесс не будет уничтожен. Разрешение камеры 3672x5496 пикселей, что очень тихо, и кажется, что фотографии выстраиваются в очередь до тех пор, пока не останется нехватка памяти (моя интерпретация проблемы).

Я пытался очищать модуль ImageItem каждый раз, когда он обновляется, но он ничего не меняет.

Что я делаю неправильно? Можно ли вообще заставить это работать вживую и без нехватки памяти с этим разрешением? Я уже доволен примерно 1-2 кадрами в секунду.

## Add path to library (just for examples; you do not need this)
#import initExample

from pyqtgraph.Qt import QtCore, QtGui
import numpy as np
import pyqtgraph as pg
import pyqtgraph.ptime as ptime
import gxipy as gx
import sys



## Check for connected devices
device_manager = gx.DeviceManager()
dev_num, dev_info_list = device_manager.update_device_list()
if dev_num == 0:
    sys.exit(1)

## Connect to the camera
strSN = dev_info_list[0].get("sn")
cam = device_manager.open_device_by_sn(strSN)
## start the data stream
cam.stream_on()

app = QtGui.QApplication([])
## Create window with GraphicsView widget
win = pg.GraphicsLayoutWidget()
win.show()  ## show widget alone in its own window
win.setWindowTitle('pyqtgraph example: ImageItem')
view = win.addViewBox()
## lock the aspect ratio so pixels are always square
view.setAspectLocked(True)

## Create image item
img = pg.ImageItem(border='w')
view.addItem(img)

## Set initial view bounds
view.setRange(QtCore.QRectF(0, 0, 3672, 5496))

## Create random image

updateTime = ptime.time()

def updateData():
    global img, i, updateTime

    ## Get a new image from the camera
    raw_image = cam.data_stream[0].get_image()
    data = raw_image.get_numpy_array()
    if data is None:
        sys.exit(1)

    ## Display the image
    img.setImage(data)

    QtCore.QTimer.singleShot(1, updateData)


updateData()

## Start Qt event loop unless running in interactive mode.
if __name__ == '__main__':
    import sys

    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

    cam.stream_off()
    cam.close_device()
1
Daniel