Firebase Cloud函数ImageMagick操作超时

时间:2018-10-08 14:56:39

标签: firebase imagemagick google-cloud-functions child-process google-cloud-vision

不确定它是否在Firebase范围内,但是否在Firebase官方文档中。

我试图实现一个 moderate-image示例,该示例效果很好 https://github.com/firebase/functions-samples/blob/Node-8/moderate-images/functions/index.js

获取模糊图像的下载网址大约需要1分钟。然后我尝试了部分模糊的完全相同的ImageMagick函数:

await spawn('convert', [tempLocalFile, '-region', '10x10+5+5', '-blur', '0x8', tempLocalFile]);

它也可以正常工作,并且花费了时间。
然后,我尝试执行如下操作:

 for (const i in regions) await spawn('convert', [tempLocalFile, '-region', i, '-blur', '0x8', tempLocalFile]);

regions中有8个元素,因此执行了8次转换操作。 在第二分钟,控制台显示Function execution took 60003 ms, finished with status: 'timeout'。在第9分钟,我收到了具有预期的8个模糊区域的图像

所以问题是:

  1. 这样的基本图像处理正常吗?
  2. 会以某种方式加速吗?
  3. 如果决定得到什么工作流程 Cloud Vision结果JSON,执行所有图像操作 客户端,然后将最终图像重新上传回Firebase?

1 个答案:

答案 0 :(得分:0)

我目前的个人经验表明,您不希望在Function中出现这样的循环。

如果必须执行一些基本的图像操作,则最好在本地进行。
在最坏的情况下,根据操作类型,手动最多执行少于10个操作,这取决于操作类型:

await spawn('convert', [tempLocalFile, 
    '-region', '100x100+50+50', '-whatever',
    '-region', '100x100+50+50', '-whatever',
    ...
]);

如果我们谈论应用模糊,那么最好将此命令与“ 0x8”左右的选项一起使用。越少,模糊程度就越低,而值越大,整体执行时间就成倍增加。

因此,我能够在功能超时之前收到合法的,看起来部分模糊的输出图像。