是否可以与 Google Compute Engine 实例进行实时通信?

Is it possible to perform real-time communication with a Google Compute Engine instance?

我想 运行 我的笔记本电脑(Gazebo 模拟器)上的一个程序,并将图像数据流发送到 GCE 实例,它将通过对象检测网络 运行并近乎实时地发送回我的笔记本电脑。这样的设置可行吗?

我现在最好的想法是,对于每张图片:

  1. 在我的个人计算机上将图像保存为 JPEG
  2. 将 JPEG 流式传输到 Cloud Storage bucket
  3. 从我的 GCE 实例访问存储桶并将文件传输到实例
  4. 在我的python脚本中,将JPEG图像转换为numpy数组并运行通过对象检测网络
  5. 将检测结果保存在文本文件中并传输到 Cloud Storage 存储桶
  6. 从我的笔记本电脑访问存储桶并下载检测结果文件
  7. 将检测结果文件转换为numpy数组以供进一步处理

这似乎有很多步骤,我很好奇是否有加快速度的方法,例如减少保存和加载操作的次数或以更好的格式传输图像。

如果你的问题是"is it possible to set up such a system and do those actions in real time?"那么我认为答案是肯定的。如果您的问题是 "how can I reduce the number of steps in doing the above",那么我不确定我是否可以提供帮助,我会听取这里的一位专家的意见,迫不及待地想听到答案!

我已经实现了一个系统,我认为它类似于您描述的外汇交易算法研究系统(例如,将数据从我的笔记本电脑上传到存储,计算引擎工作人员提取数据并对其进行处理,post 结果返回存储,我从我的笔记本电脑下载编译结果)。

我使用了 Google PubSub 架构 - 如果您已经阅读过,我深表歉意。它允许程序之间近乎实时的消息传递。例如,您可以在笔记本电脑上使用代码循环扫描文件夹以查找新图像。当它们出现时,它会自动将文件上传到存储桶中,一旦它们进入存储桶,它就会向实例发送消息,告诉它们那里有新文件要处理,或者您可以使用 "change notification" 功能Google 个存储桶。实例可以完成工作,将结果发送回存储,并向笔记本电脑上的代码 运行 发送通知,告知工作已完成,结果可供提取。

请注意,我在上面为我的项目设置了它并遇到了问题,以至于我放弃了 PubSub。原因是 Python Client Library for PubSub 只支持 'asynchronous' 消息拉取,这似乎意味着订阅者将从队列中拉取多条消息并并行处理它们。有一些功能可以帮助管理 'flow control' 内置于 API 中的消息,但即使实现了这些功能,我也无法让它按照我想要的方式工作。对于我的特定应用程序,我想按顺序处理所有内容,一次处理一个文件,因为对我来说很重要的是我清楚实例在做什么以及它执行它的顺序。 [=36= 上有几个线程] 搜索、Whosebug 和 Google 小组讨论使用队列解决此问题的方法,类、为特定实例分配特定任务等,我都尝试过,但即使是这些也给我带来了问题。其中一些链接是:

Run synchronous pull in PubSub using Python client API and pubsub problems pulling one message at a time 如果您愿意,还有更多!

您可能会发现,如果图像的处理速度相对较快,那么顺序就不太重要,并且您不介意一个实例并行处理多个事物,而我的问题并不适用于您的情况.

仅供参考,我最后只是在我的 'worker instances' 上做了一个简单的循环,每 30 秒扫描一次 'task list' 存储桶或以任何方式寻找要处理的新文件,但显然这不是完全是您最初寻找的实时方法。祝你好运!