python: reading messages very slow
I'm new to using python - and have hit a giant speed bump trying to integrate a python library into ROS indigo. I created a node in c++ that processes a point cloud, and transmits segments using the following two messages:
Segmented BlobArray.msg
Header header
int16 full_image_rows
int16 full_image_cols
SegmentedBlob[] blobs
SegmentedBlob.msg
int64 id
int16[] bbox
std_msgs/Int16MultiArray pt_list
On the python side, I have to rebuild each segment within the image:
for pp in range(0,data.blobs[Bid].pt_list.layout.dim[0].size):
row = data.blobs[Bid].pt_list.data[3*pp+1]-ymin;
col = data.blobs[Bid].pt_list.data[3*pp]-xmin;
cv_image[row,col] = data.blobs[Bid].pt_list.data[3*pp+2]
The process works, but the transfer is extremely slow. The for loop itself is not the issue. Adding random numbers to cv_image for the same number of times is still quick. Only once I access the ROS message does it get slow ( 4 sec delay). The same process in C++ has a <10msec delay.
Are their python tricks for accessing these types of messages? Or maybe there are easy ways of transmitting multiple segments in an image?