You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Kinect-Project/Sujets/exo2_1_subject.md

8.6 KiB

Home | Exercise 1 - Kinect Streams | Exercise 2 - Introduction | Exercise 2 part 1 - Postures | Exercise 2 part 2 - Gestures | Exercise 2 part 3 - Mapping | Exercise 3 - Free App

Exercise 2: Gesture Recognition part1 (Postures)

Prerequisites

  • the KinectManager from exercise 1
  • inheritance in C# and abstract classes and methods
  • polymorphism
  • static methods and classes
  • event in C# and Event Standard Pattern

Resources

  • 🔜 event and Event Standard Pattern
  • 🔜 inheritance in C#

Requested Work

As indicating in the introduction, the goal is to prepare the base classes of the gesture recognition system, and to develop and test postures.

classDiagram
class BaseGesture {
    +TestGesture(Body body)*
    +GestureRecognized : EventHandler~GestureRecognizedEventArgs~
    #OnGestureRecognized()
    +GestureName : string
}
class Posture {
    +TestGesture(Body body)*
    #TestPosture(Body body)* bool
}
class GestureManager {
    <<static>>
    +EventHandler~GestureRecognizedEventArgs~ GestureRecognized$ 
    +AddGestures(IGestureFactory: factory)$
    +AddGestures(params BaseGesture[])$
    +RemoveGesture(BaseGesture)$
    +StartAcquiringFrames(KinectManager)$
    +StopAcquiringFrame()$
}
BaseGesture <|-- Posture
Posture <|-- PostureRightHandUp
Posture <|-- PostureTwoHandsDragon
BaseGesture "*" <-- GestureManager : +KnownGestures
GestureManager --> "1" KinectManager : KinectManager

Steps to reproduce

This part is given as a set of advises to realize your application.
I use some symbols in it:

symbol signification
💡 be smart: this can obviously be done before practical works and without the kinect sensor!
🎬 evaluated at the end of all the practical works
🚨 mandatory if you want at least 10/20
🟢 difficulty: low
🟡 difficulty: medium
🔴 difficulty: high
🔖 quality (it's always better when it's beautiful 🥹)

Note about difficulty:
It's obviously completely subjective...

🚨🟢🔖 KinectUtils class library

  • Create a .NET Framework class library
  • Add your KinectManager
  • Create all the base classes (BaseGesture and Posture)

🚨🟡🔖 MyGesturesBank class library

  • Create a .NET Framework class library
  • Add 2 concrete postures to it

Suggestions:
Hand up, Hand on the head, Join hands, hands on hips...

  • Test your postures in a Console App (.NET Framework)

🚨🟡🔖 GestureManager

  • add the GestureManager class to your KinectUtils class library
  • manage the collection of gestures
  • manage the acquisition of frames
  • manage the GestureRecognized event so that the user subscribe only once to an event (this one) in order to be subscribed to all events of GestureManager gestures
  • (not mandatory) find a way (or make your teacher talk) to allow automatic subscriptions to all gestures event, without event bouncing. In other words, GestureManager should not be subscribed to all gestures event, and re-fire an event if one occurs.
  • (not mandatory) find a way (or...) to allow late subscriptions to gestures event. In other words, if the user has already subscribed to GestureRecognized of GestureManager, if she adds a new gesture to the collection, she should be also subscribed without having to reset the subscription.
  • Test your GestureManager in a Console App

🟡🔖 Posture specific events

As your posture is tested at every frame, it should send the event everytime it is recognized, so a dozen of times if you keep the pose.
Modify your Posture class so that it sends to more events:

  • PostureRecognized if it is recognized although it wasn't at the previous frame
  • PostureUnrecognized if it is not recognized although it was at the previous frame
  • Test it in a Console App

Evaluation criteria

To earned points, remember that you must validate your knowledge with your teacher, during the practical work.

Signification

symbol signification
☢️ if not respected => 0/20
🎬 evaluated at the end of all the practical works
🚨 mandatory
🟢 difficulty: low
🟡 difficulty: medium
🔴 difficulty: high
🔖 quality

Criteria

@ category description coeff
☢️ the repositories must be accessible by the teacher ☢️
☢️ a .gitignore file must be use at the creation of the repository or at the first push ☢️
🎬 all class libraries and applications build 4
🎬 applications run without any bug 4
🚨🟢🔖 KinectUtils class library with KinectManager 1
🚨🟢🔖 KinectUtils class library BaseGesture with event 4
🚨🟢🔖 KinectUtils class library Posture 1
🚨🟢 KinectUtils class library Posture.TestPosture 1
🚨🟡🔖 MyGesturesBank class library 1st posture 6
🟡 MyGesturesBank class library 2nd posture 2
🚨🟡 Test Console test 4
🚨🟢🔖 GestureManager collection of gestures 1
🚨🟡🔖 GestureManager acquiring frames 6
🚨🟡 GestureManager event (dirty but working) 6
🔴🔖 GestureManager event automatic subscriptions to collection of gestures 6
🔴🔖 GestureManager event late subscriptions 6
🚨🟡 Test Console test 4
🟡🔖 Posture specific events PostureRecognized and PostureUnrecognized 6
🟡🔖 Posture specific events Update GestureManager 6
🟡 Test Console test 4
🎬🟢 Documentation ReadMe, comments, wiki... 4

Some samples if you wonder...

  • if you do only the 🚨 criteria and your application is building and running, you get => 11,05/20
  • for the Bases of KinectUtils class library (BaseGesture and Posture) => 1,84 pt
  • for two concrete postures => 2,1 pts
  • for GestureManager => 6,6 pts
  • for the management of the two specific events on Posture and GestureManager => 3,2 pts
  • for all your tests (the three ones) => 3,2 pts
  • quality (building, running and documentation) => 3,2 pts

Note :
Coefficients may change and are here only indicative


Home | Exercise 1 - Kinect Streams | Exercise 2 - Introduction | Exercise 2 part 1 - Postures | Exercise 2 part 2 - Gestures | Exercise 2 part 3 - Mapping | Exercise 3 - Free App


Copyright © 2023-2024 Marc Chevaldonné


While preparing these practical works, I was listening to...

After The Gold Rush

Neil Young (1970)

Monk's Music

Thelonious Monk Septet (1957)

Special Identity

Joanne Brackeen (1982)

Where Have I Known You Before

Return To Forever (1974)

Live

Bozilo (2009)

Look Out!

Stanley Turrentine (1960)

Moanin'

Art Blakey and The Jazz Messengers (1958)