我公司开发的GUI工具(使用PyQt5)是OpenGL图形(使用ModernGL)与神经网络集成,探索带有特定对象时造成网络如何神经失败。完整的源代码可以here。对于“检测器”和“映射器”模式中,当用户查询通过按一个键的神经网络,该神经网络预测被渲染的物体时,e.g的顶部.:
重要的是,我试图将其设置这样,如果用户查询神经网络第二次不改变任何东西,该工具首先生成一个新的预测来呈现之前清除旧的预测。下面是代码位:
def get_prediction(self):
self.model.clear()
# self.scene.CTX.finish()
buffer = QtCore.QBuffer()
buffer.open(QtCore.QIODevice.ReadWrite)
qimage = self.grabFramebuffer()
qimage.save(buffer, "PNG")
strio = io.BytesIO()
strio.write(buffer.data())
buffer.close()
strio.seek(0)
pil_im = Image.open(strio)
pil_im = pil_im.resize(self.scene.WINDOW_SIZE)
self.model.predict(pil_im)
model.clear()
释放预测的纹理,顶点数组,和顶点缓冲器。这似乎工作,如果我键多次查询,呈现的图像保持不变(即神经网络只使用场景生成热图,不与热图中的场景)。如果我注释掉model.clear()
线,我得到的东西像下面的顺序:
其中热图,因为神经网络使用场景与热图作为输入上每个查询变化。不过,这个工具也有一个“活”的模式,其中get_prediction
每天paintGL
被调用时调用,甚至与model.clear()
行注释掉,渲染器呈现在热图是不断变化的,而不是保持静止的第二行为。正如你可以在上面的代码中看到,有一件事我试图为调用finish
上下文调用model.clear()
,这是为了“Wait for all drawing commands to finish,”(如glFinish
),但没有奏效以下。我也试图与设置QSurfaceFormat
交换行为:
fmt.setSwapBehavior(QSurfaceFormat.SingleBuffer)
但也没有工作。任何提示将非常感谢!
它似乎在工作时没有在现场模式是送我错了路红鲱鱼的事实。此修复程序是确保我在正确清除并以正确的顺序绘制的东西明显的一个。该承诺可以发现here。