首页 > 解决方案 > 在一条消息中发送带有名称的图像 - RabbitMQ (Python 3.X)

问题描述

我目前正在尝试构建一个系统来将图像发送到多个远程服务器,以便对图片进行一些 Open_CV 和 tesseract。

在一台服务器上没关系,因为我在发送之前将图像重命名为文件夹(发送的第一张图像自动命名为 Image_0)

然后在接收时再次重命名它们,顺序相同,因此名称对应于同一图像(Image_0 首先发送和首先接收,因此在本地和远程都命名为 Image_0),以便在接收结果时更容易读取名称。

然后,在特征结束时,我在本地收到一个 .txt 文件,其中包含图像(机读区)的结果,例如“Image_0 结果 XXXXXXXX<<<

我的问题--->

我现在想使用多个远程服务器并将 WORKQUEUE 与 rabbitMQ 一起使用,以便进行基本的工作流程编排并减少图像样本的处理时间。

我如何发送带有 base64 中该图像的图像名称,以便在我的 .txt 结果文件的末尾具有相应的名称,因为我当前的方法不会(不适用于多个远程服务器?

谢谢你的帮助 !

这是我目前发送图像的方式:

for file in natsorted(os.listdir()):
    end_name=file[-4]+ file[-3]+ file[-2]+ file[-1]
    if (end_name != ".txt"):

        try:
            with open(file, "rb") as image:
                message = base64.b64encode(image.read())

            channel.basic_publish(exchange='topic_logs', 
            routing_key=routing_key, body=message)
            print(f"{file} || sended on topic %r \n" % (routing_key))

        except IndexError:
            print("No image given ! ")
            sys.exit(1)

        os.rename(file,"Image_"+str(ComptNames)+".png")
        ComptNames=ComptNames+1

标签: pythonpython-3.xrabbitmq

解决方案


使用 JSON 作为消息内容类型。这个 JSON 对象的一个​​元素是文件名,另一个是 Base64 编码的图像。

{
  "filename": "foo.jpg",
  "bytes": "..."
}

消费者必须解析这个 JSON 消息体。


推荐阅读