【发布时间】:2018-10-07 19:44:15
【问题描述】:
我使用云视觉用 DOCUMENT_TEXT_DETECTION 对文档进行注释,而且我只使用数据字样。
annotate 命令会为每个字母/符号(语言、顶点、中断、文本、置信度等)返回大量信息,这会增加大量内存使用。在 4 页文档上运行注释¹返回超过 100MB 的数据,这超出了我的 php 内存限制,导致脚本崩溃。仅获取单词数据可能会小 5 倍左右。
为了清楚起见,我加载 VisionClient,设置图像,运行 annotate() 命令,它直接返回一个 100MB 的变量,此时崩溃,在我有机会进行任何清理之前。
$vision = new VisionClient([/* key & id here */]);
$image = $vision->image(file_get_contents($imagepath), ['DOCUMENT_TEXT_DETECTION']);
$annotation = $vision->annotate($image); // Crash at that point trying to allocate too much memory.
有没有办法不请求全部数据? annotate 上的文档似乎表明可以仅对图片的一部分进行注释,但不能折腾符号数据。
在更基本的层面上,我在一般内存管理方面做错了吗?
谢谢
编辑:刚刚意识到:我还需要将数据存储在一个文件中,我使用 serialize()... 运行时内存使用量加倍,即使我执行 $annotation = serialize($annotation) 到避免有2个变量。所以我实际上每个用户需要 200MB。
¹尽管这与文本数量而不是页面数量有关。
【问题讨论】:
-
@LawrenceCherone 我计划让很多用户同时使用它,如果每个用户都需要 100MB,我认为这太多了。
标签: php memory google-cloud-platform ocr google-cloud-vision