Playing with Kinect and ZeroMQ Part 2

In the previous post I briefly outlined writing a simple tool to pull data off of a kinect, and pass the buffers into zeromq frames for transmission.  In this post I’m going to go over the other side of the equation – a simple receiver that subscribes to the data stream and displays it. I’ll be using opencv for image creation and display:

#include <stdio.h>
#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <czmq.h>

So, first I create my zeromq SUB socket, subscribe (in this instance I’m not using a topic so I subscribe to “”), and connect to the broadcaster:

zctx_t *ctx = zctx_new ();
void *receive = zsocket_new ( ctx, ZMQ_SUB );
zsocket_set_subscribe ( receive, "" );
int rc = zsocket_connect ( receive, "tcp://" );

Next, I’ll create an image header using opencv’s cvCreateImageHeader call:

IplImage *image = cvCreateImageHeader ( cvSize (640, 480), 8, 3 );

Within my while loop, I will first do a blocking zmsg_recv call. I could instead use the zmq poller, or czmq’s zloop, but I kept it simple for this example. After I receive the message, I think pop off the rgb and depth frames, then copy the rgb frame to a buffer:

/* receive message */
zmsg_t *msg = zmg_recv ( receive );

/* pop frames and then copy rgb data */
zframe_t *depth_frame = zmsg_pop ( msg );
zframe_t *rgb_frame = zmsg_pop ( msg );

char *rgb_buffer = zframe_strdup ( rgb_frame );

Note that I could use zero copy techniques instead of duplicating the frame, but once again for this example I kept things simple.

Next is the code do display the image:

cvSetData ( image, rgb_buffer, 640*3 );
cvCvtColor ( image, image, CV_RGB2BGR );
cvShowImage ( "RGB", image );

Then all that’s left is cleanup:

zframe_destroy ( &depth_frame );
zframe_destroy ( &rgb_frame );
zmsg_destroy ( &msg );

Here’s a little video showing 6 receivers running, all pulling from the same broadcaster. Oh, the music in the background is a track that happened to be up on spotify when I shot the video – it’s Marley Carroll’s “Meaning Leaving”, and you might want to check him out, he’s fantastic!

Have Fun!

About taotetek

Sometimes stereotypical but never ironic. You can't stop the signal, Mal. All my opinions are my own, unless I stole them from you.
This entry was posted in 0mq, kinect, video, zeromq and tagged . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s