Buy us Beer
Categories
Pages

Archive for the ‘work’ Category

Stream your favorite radio station to your workplace

I want to suggest a trick that worked for me. My work place blocks most of the popular radio stations stream sites in my country.
I can understand why they’re doing that, but hey – if you want to save bandwidth I suggest you block YouTube (not that I complain…)
Well, I thought of a way to listen to my favorite radio station from work, by re-streaming it from my home. And it worked!

It can also work for you, in case your IT does not block by protocol, only by address.

So here’s how to do it:

Read the rest of this entry »

  • Share/Bookmark

Extending Justin Talbot’s GrabCut Impl [w/ code]

Justin Talbot has done a tremendous job implementing the GrabCut algorithm in C [link to paper, link to code]. I was missing though, the option to load ANY kind of file, not just PPMs and PGMs.
So I tweaked the code a bit to receive a filename and determine how to load it: use the internal P[P|G]M loaders, or offload the work to the OpenCV image loaders that take in many more type. If the OpenCV method is used, the IplImage is converted to the internal GrabCut code representation.


Image<Color>* load( std::string file_name )
{
 if( file_name.find( ".pgm" ) != std::string::npos )
 {
 return loadFromPGM( file_name );
 }

 else if( file_name.find( ".ppm" ) != std::string::npos )
 {
 return loadFromPPM( file_name );
 }

 else
 {
 return loadOpenCV(file_name);
 }
}

void fromImageMaskToIplImage(const Image<Real>* image, IplImage* ipli) {
 for(int x=0;x<image->width();x++) {
 for(int y=0;y<image->height();y++) {
 //Color c = (*image)(x,y);
 Real r = (*image)(x,y);
 CvScalar s = cvScalarAll(0);
 if(r == 0.0) {
 s.val[0] = 255.0;
 }
 cvSet2D(ipli,ipli->height - y - 1,x,s);
 }
 }
}

Image<Color>* loadIplImage(IplImage* im) {
 Image<Color>* image = new Image<Color>(im->width, im->height);
 for(int x=0;x<im->width;x++) {
 for(int y=0;y<im->height;y++) {
 CvScalar v = cvGet2D(im,im->height-y-1,x);
 Real R, G, B;
 R = (Real)((unsigned char)v.val[2])/255.0f;
 G = (Real)((unsigned char)v.val[1])/255.0f;
 B = (Real)((unsigned char)v.val[0])/255.0f;
 (*image)(x,y) = Color(R,G,B);
 }
 }
 return image;
}

Image<Color>* loadOpenCV(std::string file_name) {
 IplImage* im = cvLoadImage(file_name.c_str(),1);
 Image<Color>* i = loadIplImage(im);
 cvReleaseImage(&im);
 return i;
}

Well, there’s nothing fancy here, but it does give you a fully working GrabCut implementation on top of OpenCV… so there’s the contribution.


GrabCutNS::Image<GrabCutNS::Color>* imageGC = GrabCutNS::loadIplImage(orig);
 GrabCutNS::Image<GrabCutNS::Color>* maskGC = GrabCutNS::loadIplImage(mask);

 GrabCutNS::GrabCut *grabCut = new GrabCutNS::GrabCut( imageGC );
 grabCut->initializeWithMask(maskGC);
 grabCut->fitGMMs();
 //grabCut->refineOnce();
 grabCut->refine();

 IplImage* __GCtmp = cvCreateImage(cvSize(orig->width,orig->height),8,1);
 GrabCutNS::fromImageMaskToIplImage(grabCut->getAlphaImage(),__GCtmp);
 //cvShowImage("result",image);
 cvShowImage("tmp",__GCtmp);
 cvWaitKey(30);

I also added the GrabCutNS namespace, to differentiate the Image class from the rest of the code (that probably has an Image already).

Code is as usual available online in the SVN repo.

Enjoy!

Roy.

  • Share/Bookmark

First steps in Android programming

Last week I finished my first Android application. All through the development stage I had to Google a lot for examples which some were really hard to find (even though you can find reference for everything in the SDK, for me, it’s easier to understand from a code sample).

My mobile company allows you to send 10 free daily SMS through their website, and after that each text message is still half priced, so I decided to take a challenge and create a UI that allows me to send my messages from the phone through the website automatically.

The core of my software was pure java, so even though it wasn’t straight forward to accomplish, I kinda know the material.

The main issues were after – when I got to the android implementation and UI

Here are the issues I needed, and will supply examples for in this post:
(Of course – for you that are more experienced than me with Android development, please forgive if I’m not doing everything ‘by the book’, it’s simply what I could find. So if you have any suggestions or improvement please send them to me or post a comment J )

  • How to find out if there is an active network on the device
  • How to create options menu
  • How to create and clear notification in the notification area
  • How to declare your program as “SMS Sender” (‘Complete action using…’)
  • Taking care of orientation (Landscape and Portrait mode for UI)

Here is the code I ended up using. Hope you find it helpful
Read the rest of this entry »

  • Share/Bookmark

Combining Java’s BufferedImage and OpenCV’s IplImage

java_opencv_imgHi

I recently did a small project combining a Java web service with a OpenCV processing. I tried to transfer the picture from Java environment (as BufferedImage) to OpenCV (IplImage) as seamlessly as possible. This proved a but tricky, especially the Java part where you need to create your own buffer for the image, but it worked out nicely.

Let me show you how I did it

Read the rest of this entry »

  • Share/Bookmark

iPhone camera frame grabbing and a real-time MeanShift tracker

i_can_has_meanshiftHi

Just wanted to report on a breakthrough in my iPhone-CV digging. I found a true realtime frame grabber for the iPhone preview frame (15fps of ~400×300 video), and successfully integrated this video feed with a pure C++ implementation of the MeanShift tracking algorithm. The whole setup runs at realtime, under a few constraints of course, and gives nice results.

Update: Apple officially supports camera video pixel buffers in iOS 4.x using AVFoundation, here’s sample code from Apple developer.

So lets dig in…

Read the rest of this entry »

  • Share/Bookmark

Beef up your presentations with word clouds

friendshipThere’s nothing like a good visualization to deliver your ideas over a presentation. Concise points and breakdowns can only go a certain distance before they become weary, and finally confuse your audience. It’s better to keep them on their toes by spicing up the boring slides every 5 or so page turns.

I found that Word Clouds, a kind-of new visualization concept, have a good trait of focusing the attention over a single word’s associative space. You bold your main word, center it, and scatter the associative words around it. This creates a powerful effect.

I found a nice tool to create these word coulds on-the-fly: Wordle.

The way I did was, get the Wikipedia value of my word, for example “Friendship“, and go to the Edit tab. Copy all the textarea’s contents, and paste it into Wordle’s word cloud creator. Press “GO” and the results are immediate.

You can eliminate the “outliers” – those unrelated words that appear too many times, and layout the cloud as you like to fit your slide.

The down-side with Wordle is that it has no export ability, so I had to take an Alt-PrintScreen screenshot to get my cloud as a picture.

Enjoy!

Roy.

  • Share/Bookmark

Life changing traffic tips

Hi

Morning traffic jams can really bum you out on some days, and most people try to avoid them. But actually doing it takes a bit of practice and a lot of time, so it took me just 3 years to perfect my morning route to work. I think I am now able to shave off between 5 and 20 minutes of traffic every day, depends on how crowded the roads are that day.

On a “light” day these tips aren’t worth much, but on a crowded day (like today) it can really save time and gas. Also, since this is my route to work, and I live in Israel and work in Ramat Ha’hayal Tel-Aviv, the example images are in Hebrew and they help people who need to get to Habarzel street. But the tips are genuine, and can help anyone optimize thier morning route.

OK, so on to the point.

Read the rest of this entry »

  • Share/Bookmark