Saturday, March 17, 2012

Dreams, Aspriations, and the Sweat of my Brow

Looking down from my precarious perch on my chair, it's evident I could probably use some more sweat of my brow and lose a couple extra pounds.

Regardless, I haven't updated this thing in a very long time.  That's in my coming "new quarter" resolutions. I'm doing a lot, and I want some place where I can, at least personally, see the progress that I am making.  Speaking of progress, an update on Capstone!
Screenshot of our current build
It's looking really good, especially considering where we came from.

Kinect is at almost 100% functionality, a few tweaks remain to be implemented before I'm completely happy with the result, but for now all of our base functionality is in. (Throwing, smashing, swiping and hitting)

The next steps would be to implement a combo system, and special moves such as the earthquake and tornado, the team also discussed some interesting ideas as to changing our background to be more interesting/interactive, I will keep you all posted on that.

Unfortunately (for some...?) I won't be nearly as content-heavy with my descriptions of what has been done, honestly the game has come a long, long way from where it started, and since my last update there is simply too much to cover.  I will say, however, that my current method of determining Kinect hands open/closed is about as straight up as a hack as it is going to get.  I'm currently using what I assume to be a "point cloud" system, which simply generates the points around a given model, image, or in this case "body part"

I have no problem in isolating the hands from the rest of the body, that's the easy part.  The tough part is quickly and cheaply reading all of this constantly updating data and determining: Hey, this is an open hand, this is a closed hand.  I also have to do all of this processing alongside whatever my game is trying to run.  Simply put, this isn't a very fun problem.

The Kinect, as I have previously mentioned, is event-based, or rather that is how we choose to use the Kinect.  As many headaches as this can create, it eventually saves on processing because we are only doing these operations when the Kinect is good and ready, and we don't have to keep asking it "Hey, are you ready yet?" Over and over.

Anyway, every time the Kinect shoots me a depth image I go into the quasi-lengthy process of running through segments of the depth map, checking for the relative depth locations from the hands.  This is opposed to my original system, where I built and entire group of "depth objects" based on the Kinect's depth image and then manually determine which segments are hands, feet, etc... Every. Single. Frame.

Good lord, what was I thinking?  While the Kinect's skeleton may not be entirely accurate, it has it's own processor and using the data it gives me is certainly much more efficient than trying to build my own skeleton, and while I may have been proud of my skeleton for being "mo' accurate" it didn't have any efficient means of determining joints and the like, and in the end it just wasn't practical.

Luckily I'm still using a little bit of that logic to get the hand point cloud I'm working with.  I don't know if it's really a point cloud or not, because at this point I'm simply tracking the max hand width/height and the number of points per line.

Points per line?  Yes, well, this is a cheap way of checking and seeing if "Hey, this line has 4 points" which registers as having a "gap"  If enough of these gaps are registered then the hands are considered to be "open"

Of course, that's not the extent of it, especially because the Kinect won't see fingers as being spread apart unless you really make an effort to spread 'em good and wide.  I do some checking with the depth values and if a depth drops a certain per-defined amount, then another point is added, this time classified as an "inside point"  These factor into the points-per-line which means if fingers are curled inwards, even though the outline may look like a closed fist, the inner finger-outlines are still (somewhat) registered.  However this only works on a horizontal axis, the lines read from left to right like a line of text, going vertically through the depth pixels add more passes and can be bad for the cache, not that what I'm doing is terribly cache-efficient in the first place, though.

The issue here is that the Kinect's depth values degrade over distance from the Kinect.
What?
Well, the distance from the tip of my index finger to my palm if I'm pointing at the Kinect is read differently if I'm standing right in front of the Kinect compared to me being 10 feet away from the machine.  My finger is not physically shrinking or growing with the depth (duh) but the Kinect's perspective is saying so, at least on the depth map.  I haven't found a precise and simple way to convert from depth-map values to physical values such as meters.  Granted, there are equations that MSDN provides to do the conversion, but I have not had good results from using those functions.  In other words, the problem persists after the conversions, possibly because I'm looking for very small distances and the equation is a distance approximation.
(The Kinect works in meters for skeleton frames)

Well, it's 2:30 and I have Judo tomorrow, so I should get some rest so I can get my butt whupped (...into shape?!)

But yes, the original meaning of the post?  I'm applying for internships and jobs, which is a nerve-racking and anxious project for someone who is not entirely confident in themselves.  It's the same story as asking a girl out for a date, or coffee or whatever you kids do these days.  It requires confidence and assertiveness.  Insecure and unassertive people know this, but there are severe mental blocks when it comes to changing their personalities, even if temporarily, to just drop the insecure and unassertive parts of themselves off at daycare and go have fun with the adults.  So I feel as if I am lying when trying to make myself appear hire-able material.  I'm not unintelligent, I'm not a sloth, when I work, I work hard, I give it my best efforts and I always strive to improve, but I know I'm not the best at anything, and that knowledge in itself has hindered me far more times than I care to count.  Just because I'm not the best doesn't mean I'm not good, but try telling that to my psyche.  I am, everyday, but it's an uphill battle.  I'll get there someday.  In the meantime I feel very awkward crafting a Resume and cover letter to make me stand out as "The best"

I feel as if job-hunting is a competition, and I don't enjoy competition, I am much more comfortable being friends with all, not trying to beat somebody out for something.

Okay, but for srs now, bedtime.

Have a good night (morning?) everybody,

-Kev

Stress test.  Yes, we have elephants.
Oh yeah, doodles.  Early morning roommate ambush!

5 comments:

  1. haha this is great! I think everyone feels this same same if they admit it or not!

    ReplyDelete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Regarding the last bit about looking for jobs; I've been on both sides, having worked for a marketing startup. People are crazy. They will show up to work and bitch out their superiors on the first day. This is after acing the interview. That's why "who you know" works better as a hiring mechanism, because then employers are almost sure you're not crazy. As long as you're not crazy and you have a degree, you're very hire-able.

    Well...let me rephrase. You probably already blow most standards out of the water. Most employers are looking for someone with a degree. In anything. I have a friend in the video game industry and he says he had nothing to his portfolio when he got a job in the industry. You're a step ahead.

    You don't need to be the best. In my experience, people are far more interested in knowing who you really are - company culture trumps technical skills. Interest and passion trump technical skills. Being interesting trumps technical skills. BUT you have technical skills (and a degree), passion, and you're damn interesting. You can blow everyone's expectations out of the water just by being you.

    Your cover letter should show off who you are without attempting to be "the best." Companies are groups of people, right? That means they're teams. That means they are looking for people who fit into their team. They're looking for real, actual people, not "the best," because "the best" is probably going to be an egomaniac troublemaker.

    And as a last point, this is a competition. Whether employers know it or not, they are competing for you. So make sure you apply to as many good places as possible to give them all a fair shot. If they don't choose you, someone else will, and they'll be better off for it.

    If you want any help looking over your cover letter/resume, you can ask me. I'm pretty at getting words to mean what you feel.

    ReplyDelete
    Replies
    1. Thanks Brian!

      You bring up some really good points and/or things I haven't thought about before. And I may take you up on that, I am trying to apply to a lot of different places right now, the art of the cover letter is something I'm very inexperienced with.

      And I'm very surprised someone would put so much effort into getting an internship than complain about it. At this point I would be happy being a part of any team that will take me!

      Delete
  4. It's actually even more insane than complaining about an internship. It was a full-time sales position.

    Anyway, I'm glad my rant gave you another perspective. Feel free to email your application materials to me at brian@callmekung.com and I'll get you feedback as soon as possible

    ReplyDelete