Python pyqtgraph来自CMOS摄像头的实时数据

Python pyqtgraph来自CMOS摄像头的实时数据,python,memory,live,pyqtgraph,Python,Memory,Live,Pyqtgraph,我正试图用python绘制从CMOS摄像头流式传输的实时数据。作为一个小提示:我想用它来稳定实验室中激光的指向。 我使用的是pyqtgraph模块中的ImageItem,我的脚本基本上是ImageItem示例的修改(见下文) 然而,当我执行脚本时,我立即得到大约3秒的延迟,RAM内存增加,直到进程被终止。相机的分辨率是3672x5496像素,非常高,似乎图片正在排队等待,直到内存耗尽(我对问题的解释) 每次更新ImageItem模块时,我都试图清除它,但它没有改变任何东西 我做错了什么?使用此分

我正试图用python绘制从CMOS摄像头流式传输的实时数据。作为一个小提示:我想用它来稳定实验室中激光的指向。 我使用的是pyqtgraph模块中的ImageItem,我的脚本基本上是ImageItem示例的修改(见下文)

然而,当我执行脚本时,我立即得到大约3秒的延迟,RAM内存增加,直到进程被终止。相机的分辨率是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()