首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在Processing IDE中禁用预览窗口?

有没有办法在Processing IDE中禁用预览窗口?
EN

Stack Overflow用户
提问于 2021-01-17 05:21:22
回答 1查看 69关注 0票数 1

我正在使用Processing IDE为一个计算机视觉项目生成数百个短视频剪辑。现在,我正在使用Python创建并运行一个.pde文件。这看起来大致如下:

代码语言:javascript
复制
PATH = "/my/local/director/"
list_of_variables = [1, 2, etc.]
for i in list_of_variables:
    naming = "p5_{:02d}_myfile".format(i)
    os.mkdir(PATH + naming)
    with open(PATH + naming + "/" + naming + ".pde", 'w') as pdefile:
        pdefile.write("contents of file go here " + i ";\n")
        pdefile.write("saveFrame(\"frames/######.tif\");\n")
    subprocess.Popen(["processing-ide", "--sketch=" + PATH + naming, "--run"], stdout=subprocess.DEVNULL)
    subprocess.call(["ffmpeg", "-i", PATH + naming + "/frames/%06d.tif", PATH + naming + "out.mp4"], stdout=subprocess.DEVNULL)
    shutil.rmtree(PATH + naming + "/frames/")    

每次执行代码时,Processing IDE都会打开一个预览窗口来显示正在发生的事情。是否有一个选项可以在执行步骤或.pde文件创建过程中传递,以阻止显示预览窗口。这需要很长时间,我希望这能加快速度。

注意:是的,我已经考虑到有更好的选择来生成这些视频。回想起来,我应该在Python语言中使用OpenCV来提高速度,但这不是这个问题的主旨。

EN

回答 1

Stack Overflow用户

发布于 2021-01-17 08:43:20

@KevinWorkman的建议很棒!如果你真的需要使用Processing和headless来做这件事,那就是前进的方向。

草图的代码应该是什么样子的?如果是简单的绘图指令,你可以用多种方式重写。一种选择是简单地使用屏幕外的PGraphics缓冲区,而不使用整个PApplet部分。

下面是一个基本的例子:

代码语言:javascript
复制
import processing.core.PGraphicsJava2D;

public class PGraphicsBufferTest {

    public static void main(String[] args) {
        PGraphicsJava2D pg = new PGraphicsJava2D();
        // set dimensions
        pg.setSize(300, 300);
        // set as offline (shouldn't expect a PApplet parent)
        pg.setPrimary(false);
        // draw
        pg.beginDraw();
        pg.background(0);
        pg.ellipse(150, 150, 250, 250);
        pg.endDraw();
        // save to disk: in absence of parent PApplet, must use absolute path
        pg.save("/path/to/dataset/sequence/frame.png");
    }

}

如果您将其另存为PGraphicsBufferTest.java (并将Processing的core.jar保存在同一文件夹中),例如,您可以:

  • compile:javac -cp core.jar PGraphicsBufferTest.java
  • run:java -cp .:core.jar PGraphicsBufferTest这可能仍然会短暂地生成一个窗口,但希望能有一个更简单/更快的设置。

(我特意选择了Java2D,因为它已经是core.jar的一部分。当然,您也可以使用PGraphics2D,只需记住还要添加OpenGL依赖项(gluegen-rt,jogl),并设置类路径(-cp)和本机路径(-Djava.library.path)参数)

例如,有一个使用Pyglet (OpenGL包装器)的较旧的pyprocessing pip包。因为Pyglet可以无头运行,希望如此,所以pyprocessing也是如此。我自己没有测试过这一点,但是如果它能工作,你可以保持非常相似的语法。

如果是简单的2D绘图指令,如果是计算机视觉项目,那么OpenCV的绘图功能应该就足够了。

还有其他的Python包提供了2D绘图特性和无头配置(我想到了Pillow的ImageDraw模块)。

我认为另一个选择就是使用openFrameworks,如果不是比你已经做的更复杂的话。它是C++,但灵感来自于处理过程,因此非常相似(例如,setup() = setup()draw() = update() + draw()line(x1,y1,x2,y2) = ofDrawLine(x1,y1,x2,y2)等)并且可以运行headless

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65754853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档