In sending a message (Numpy int array) using RabbitMQ, this is how it is setup and sent
Thanks...
testImage = np.random.randint(0, 255, 10*1000) # grey scale images strImage = np.array_str(testImage) message = <string of meta data> + strImage channel.basic_publish(exchange='', routing_key='task_queue', body=message, properties=pika.BasicProperties(delivery_mode=2, # make message persistent ))This is the output of the message sent:
Output:[x] Message params '0,1617801844,1617801844400951300,10000,[113 75 36 ... 167 157 131]'
In modifying the received message (from rabbitMQ) to get a Numpy int array I've tried:message = body.decode() parts = message.split(',') print("[x] message %r" % message) print("[x] message type %s" % type(message)) print("[x] parts %s" % parts) print("[x] parts len %s" % len(parts))This is the output for the above code:
Output:[x] message '0,1617801844,1617801844400951300,10000,[113 75 36 ... 167 157 131]'
[x] message type <class 'str'>
[x] parts ['0', '1617801844', '1617801844400951300', '10000', '[113 75 36 ... 167 157 131]']
[x] parts len 5
I then start working of the message part that is the Numpy array:imagePart = parts[4] print() print("[x] imagePart ", imagePart) print(repr(imagePart)) print(re.sub("\s+", ",", imagePart.strip())) print(type(re.sub("\s+", ",", imagePart.strip()))) print(np.array(re.sub("\s+", ",", imagePart.strip()))) print(np.array(re.sub("\s+", ",", imagePart.strip())).size) print(type(np.array(re.sub("\s+", ",", imagePart.strip())))) print(repr(np.array(re.sub("\s+", ",", imagePart.strip())))) print()The output for the above code block is (I'm not sure why it thinks it's of dtype 'U27'):
Output:[x] imagePart [113 75 36 ... 167 157 131]
'[113 75 36 ... 167 157 131]'
[113,75,36,...,167,157,131]
<class 'str'>
[113,75,36,...,167,157,131]
1
<class 'numpy.ndarray'>
array('[113,75,36,...,167,157,131]', dtype='<U27')
I then try a different approach:npPart = np.asarray(imagePart, dtype=np.str) npSplit = np.char.split(npPart) npSplitPart = np.array(npSplit, dtype=object) print(npSplitPart) print(npSplitPart.dtype) print("[x] npSplitPart type ", type(npSplitPart)) print("[x] npSplitPart shape ", npSplitPart.shape) print("[x] npSplitPart size ", npSplitPart.size) print(repr(npSplitPart)) print(np.array(npSplitPart))This is the output for the above code block:
Output:['[113', '75', '36', '...', '167', '157', '131]']
object
[x] npSplitPart type <class 'numpy.ndarray'>
[x] npSplitPart shape ()
[x] npSplitPart size 1
array(list(['[113', '75', '36', '...', '167', '157', '131]']),
dtype=object)
['[113', '75', '36', '...', '167', '157', '131]']
What I would like is to get back to the original Numpy int array. Any idea what I am doing wrong or missing?Thanks...