Hi all,
Recently I’ve been experimenting with controlling Plex via an Xbox Kinect and am happy to present the first working prototype; codename HandyPlex.
See it in action here:
[media]
http://www.youtube.com/watch?v=wFM7pVMLIY4
[/media]
The source code is available at GitHub: https://github.com/jopdeklein/Handyplex
Currently the following gestures/actions are supported:
Global:
<br />
Wave Start Gesture Recognition<br />
*Navigation Mode:*
<br />
Swipe Left Navigate Left<br />
Swipe Right Navigate Right<br />
Swipe Up Navigate Up<br />
Swipe Down Navigate Down<br />
Push Action / Play<br />
Pull Back<br />
*Playback Mode:*
<br />
Swipe Left Rewind<br />
Swipe Right Fast Forward<br />
Swipe Up Volume Up<br />
Swipe Down Volume Down<br />
Push Play/Pause<br />
Pull Stop<br />
**Background**
I liked what Kinemote was doing but since they've recently closed down the source I feel there's room for an open source solution which also works on the Mac.
My initial goal was to get a working prototype and figure out whether the Kinect can be used as an efficient / fun way of controlling Plex, thus the current feature set is quite basic.
I am not yet convinced that this is the best way to control Plex, but feel it's a decent alternative at least (and it impresses the dinner guests :)).
**Technical Details**
The current solution is written in Python and works with the SensorKinect drivers and OpenNI/NITE framework/middleware.
Skeleton data is retrieved via the OSC protocol provided by OSCeleton and pyOsceleton, on top of which I wrote straightforward gesture recognition algorithms that recognizes simple gestures such as swipes, push/pull and a 'wave' gesture.
I currently use the Plex HTTP API to control Plex, but it should be easy to wrap it in a plug-in that sends key commands so it can be configured using a remote.xml.
I've only tested HandyPlex on Plex 9.3.4 and will have to investigate forward compatibility.
**Future Plans**
I am planning to extend HandyPlex to support multi-hand gestures and support a 'I am done' gesture to signal that you want it to stop recognizing gestures until you re-initialize the session with a 'wave' gesture.
The current OSCeleton-based implementation has quite some layers and dependencies, which I believe I could do without (and could be hampering performance/complicate the distribution process unnecessarily), I'll likely move to a OpenCV-based implementation in the future.
The current state is very much 'Proof of Concept', it works for my daily use but requires significant improvements before I would distribute this as a plug-in.
I would like to take this opportunity to gauge whether there is enough interest from the Plex community to warrant further development.
If so, I am planning to open source the code and provide it via a public repository, so if there's any tech savvy users willing to beta test it would be much appreciated!
