从照片中捕获货架库存,将其存储在MongoDB中,并在联网和离线零售客户端之间同步更新。
产品: MongoDB Enterprise Advanced
合作伙伴: PowerSync
解决方案概述
零售商需要准确了解货架库存。在大型设施中,团队经常在连接不一致的区域工作,并依赖手动检查来识别需要补货的产品。
了解如何将单个货架图像转换为结构化库存记录。视觉语言模型可识别产品并对其进行计数,而MongoDB Enterprise Advanced则会存储捕获的图像、商品计数和应用程序程序上下文。
MongoDB为跨网络分发清单状态提供了基础。变更流向 PowerSync 提供实时更新,从而将所选字段同步到客户端设备上的本地 SQLite 数据库。当连接中断时,客户端设备会继续使用本地数据离线工作,并在重新连接时进行同步。
这种以MongoDB为中心的工作流程无缝集成了基于图像的捕获、灵活的文档建模和同步零售应用程序。它将货架观察结果转换为库存数据,团队可以在客户端应用程序中使用该数据。
参考架构
MongoDB Enterprise Advanced充当运营数据层和货架库存的真实来源。
浏览器将架子图像发送到后端应用程序。后端将图像传递给配置的视觉语言模型,验证结构化响应,并将生成的库存文档写入MongoDB。
每个文档都将捕获上下文与检测到的项目一起存储。 MongoDB存储元数据,例如捕获时间、设备、操作符、存储、模型、项目计数、置信度值和生命周期状态。
当您启用媒体持久性时,后端会将原始图像存储在Amazon S3 兼容的对象存储中,并将资产引用保留在MongoDB中。这种设计将大型媒体对象与操作清单记录分开,同时保留它们的关系。
MongoDB变更流会发布 PowerSync 用于将所选清单字段同步到客户端SQLite 数据库的事件。 PowerSync 支持本地应用程序访问权限和连接中断时的同步,而MongoDB仍然是事实来源。
这种架构在保持统一数据基础的同时分离了职责:
MongoDB管理运营库存记录。
后端控制写入操作。
VLM(视觉语言模型)提取结构化数据。
对象存储会保留原始图像。
PowerSync 将MongoDB支持的状态分发给客户端。
图 1。从货架图像到同步库存:后端使用视觉语言模型创建MongoDB库存文档。 MongoDB存储操作记录,对象存储保留原始映像,变更流将 PowerSync 同步驱动到客户端SQLite。
数据模型方法
将每个架子捕获作为文档存储在 inventory_captures集合中。将捕获上下文和模型生成的清单结果放在一起,以便应用程序程序将每次捕获作为一个单元进行处理和同步。
该文档记录的元数据包括:
捕获时间戳和位置
提交设备和操作符
用于图像分析的模型
捕获的生命周期状态
将检测到的产品嵌入 items大量。每一项都包含产品名称、检测到的计数和模型置信度:
{ "_id": "108d020b-9d3c-4b36-a651-0e1be2b1e899", "captured_at": "2026-07-02T17:45:08.661249+00:00", "device_id": "web-o0its21v", "operator_id": "demo-operator", "store_id": "store-unknown", "cv_model": "qwen2.5", "items": [ { "name": "Nissin Cup Noodles", "count": 5, "confidence": 0.9 }, { "name": "Popcorn Bag", "count": 1, "confidence": 0.9 }, { "name": "Lays Chips", "count": 3, "confidence": 0.9 } ], "status": "ACTIVE", "asset": null }
嵌入检测到的商品可以使模型输出接近生成它的货架捕获。 MongoDB灵活的文档模型使应用程序能够随着模型的发展保留其他项目属性,从而无需为每种可能的产品建立严格的模式。
MongoDB仍然是库存记录的真实来源。当您启用媒体持久性时,PowerSync 将客户端应用程序所需的字段投影到本地 SQLite 数据库中,而原始图像保留在与Amazon S3 兼容的对象存储中。
字段解释
_id:架子捕获的唯一标识符。captured_at:后端收到捕获时生成的 UTC 时间戳。device_id:提交图像的客户端设备的标识符。operator_id:提交捕获的操作符的标识符。store_id:与捕获关联的存储的标识符。cv_model:用于生成清单结果的模型的名称。items:包含检测到的产品、计数和置信度值的嵌入式大量。status:捕获的生命周期状态。启用存储后,流程以PENDING_UPLOAD开始,并在原始图像上传后更改为ACTIVE。asset:可选的对象存储元数据。禁用原始图像存储时,此字段为null。
构建解决方案
使用 Retail-stock-take Github存储库来部署和探索解决方案。
先决条件
准备具有足够资源的本地Kubernetes环境来运行:
由MongoDB Ops Manager托管的MongoDB Enterprise Server
PowerSync
FastAPI后端
Next.js Web应用程序
与 Amazon S3 兼容的对象存储
Ollama 和配置的视觉语言模型
查看存储库中的本地设置指南,了解支持的运行时版本、内存要求、模型要求和预期设置时间。
关键要点
从图像中捕获货架库存:使用视觉语言模型将货架照片转换为MongoDB存储和应用程序程序处理的结构化JSON 。
将库存数据建模为MongoDB文档:将捕获的元数据和检测到的商品放在一起,以便每个文档代表一次上架检查。
跨客户端设备同步MongoDB支持的状态:使用MongoDB变更流和 PowerSync 分发选定的库存字段,而无需构建自定义轮询逻辑。
将操作数据与原始媒体分离:将库存数据和图像引用存储在MongoDB中,同时在启用媒体持久性时将原始帧存储在Amazon S3 兼容的对象存储中。
支持断开连接的零售工作流程:使客户端应用程序能够使用本地同步的数据,并在重新连接时协调其状态。
作者
Timothy Marland, MongoDB
Alberto Camarena Rodriguez, MongoDB
Daniel Jamir, MongoDB