在一条消息中发送带有图像名称的图像 - RabbitMQ (Python 3.X)

问题描述 投票:0回答:2

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

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

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

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

我的问题 --->

我现在想使用多个远程服务器并将 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
python python-3.x rabbitmq
2个回答
3
投票

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

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

消费者必须解析此 JSON 消息正文。


1
投票

您可以使用 AMQP 消息头来发送带有消息数据的文件名。您可以使用

pika.spec.BasicProperties
类来发送标头,如 此示例 中所示。当然,标头将在接收方可用。

© www.soinside.com 2019 - 2024. All rights reserved.