Log In Sign Up

Posture and sequence recognition for Bharatanatyam dance performances using machine learning approach

by   Tanwi Mallick, et al.
IIT Kharagpur

Understanding the underlying semantics of performing arts like dance is a challenging task. Dance is multimedia in nature and spans over time as well as space. Capturing and analyzing the multimedia content of the dance is useful for the preservation of cultural heritage, to build video recommendation systems, to assist learners to use tutoring systems. To develop an application for dance, three aspects of dance analysis need to be addressed: 1) Segmentation of the dance video to find the representative action elements, 2) Matching or recognition of the detected action elements, and 3) Recognition of the dance sequences formed by combining a number of action elements under certain rules. This paper attempts to solve three fundamental problems of dance analysis for understanding the underlying semantics of dance forms. Our focus is on an Indian Classical Dance (ICD) form known as Bharatanatyam. As dance is driven by music, we use the music as well as motion information for key posture extraction. Next, we recognize the key postures using machine learning as well as deep learning techniques. Finally, the dance sequence is recognized using the Hidden Markov Model (HMM). We capture the multi-modal data of Bharatanatyam dance using Kinect and build an annotated data set for research in ICD.


page 4

page 6

page 7

page 11

page 13

page 14


Beat Detection and Automatic Annotation of the Music of Bharatanatyam Dance using Speech Recognition Techniques

Bharatanatyam, an Indian Classical Dance form, represents the rich cultu...

Bharatanatyam Dance Transcription using Multimedia Ontology and Machine Learning

Indian Classical Dance is an over 5000 years' old multi-modal language f...

Music Genre Classification using Machine Learning Techniques

Categorizing music files according to their genre is a challenging task ...

Music Sequence Prediction with Mixture Hidden Markov Models

Recommendation systems that automatically generate personalized music pl...

CAMREP- Concordia Action and Motion Repository

Action recognition, motion classification, gait analysis and synthesis a...

Generation of Multimedia Artifacts: An Extractive Summarization-based Approach

We explore methods for content selection and address the issue of cohere...

Screen Correspondence: Mapping Interchangeable Elements between UIs

Understanding user interface (UI) functionality is a useful yet challeng...

1 Introduction

Dance is a specific form of human activity. Hence dance analysis is a special kind of human activity analysis [xu2017hierarchical, wang2017context, guo2016tensor]. While a human activity can be something like making tea, shaking hands, cleaning windows, doing shopping etc., mere combination of a few movements does not make a dance. Dance is a language of communication driven by music and follows a set of rules that depends on its specific form. In dance, a series of unique and elementary activity units (action elements) combines with music to embody an idea or to express emotions. With the rapid advances in technologies, we are now able to capture, analyze, and interpret the complex movements of dance.

Sparse yet varied research has been carried out on dance analysis to develop applications such as video recommendation [han2017dancelets] based on dance styles and performances, dance tutoring system [alexiadis2014quaternionic], dance video annotation [mallik2011nrityakosha] for heritage preservation, and music-driven dance synthesis [ofli2012learn2dance]. In these applications, the authors attempt to solve a combination of the three fundamental problems of dance analysis: 1) Segmentation of the dance video in terms of the representative action elements, 2) Matching or recognition of the detected action elements, and 3) Recognition of the dance sequences formed by combination of a number of action elements under certain rules. Han et al. [han2017dancelets]

build a dance video recommendation system. They find the most discriminating action elements between the different dance forms using Normalized Cut Clustering and Linear Discriminant Analysis. Further, random forest is used for fast matching of action elements to generate recommendations. Alexiadis 

[alexiadis2014quaternionic] proposes a system for evaluating dance performances of novice against a expert dancer. The temporal synchronization of the motion data of two dancers is achieved using Dynamic Time Warping (DTW). Finally, they use a set of quaternionic correlation-based measures (scores) for matching and comparing the action elements of two dancers. Mallik et al. [mallik2011nrityakosha] use Multimedia Web Ontology Language (MOWL) to represent the domain knowledge of Indian Classical Dance (ICD). They construct the ontology with a labeled set of training data. Given a new dance video, the system recognizes the spatio-temporal action elements and music primitives, and label them using the ontological concepts. They use clustering to find the primitive action elements. Ofli et al. [ofli2012learn2dance] propose a framework for music-driven dance analysis to synthesize choreography. Dance has been intimately associated with music for generations. Given a dance video, the proposed model learns the mapping between the music primitives and the dance action elements. The mapping thus learned, is later used for synthesizing new choreography. The authors segment the music signal into music primitives and consider the corresponding motion trajectory as a single action element. To find the mapping they extract the features of the music primitives as well as the action elements and, based on a Hidden Markov Model (HMM), establish the final mapping for choreography synthesis.

Given the state of the art, our paper attempts to investigate the three fundamental problems related to modeling and capture of the underlying semantics of dance. While the existing research attempts to solve a subset of these problems to support specific applications such as video recommendation [han2017dancelets] based on dance styles and performances, dance tutoring system [alexiadis2014quaternionic], dance video annotation [mallik2011nrityakosha] for heritage preservation, or music-driven dance synthesis [ofli2012learn2dance]; here we try to solve all the three problems in unison to get a good grasp on the formation of a dance sequence and its underlying semantics. This is particularly important since ICD involves complex combinations of music, movements and gestures that needs the solution to all the three problems for a comprehensive analysis.

We develop our system based on a form of ICD known as Bharatanatyam. Analysis of complete Bharatanatyam performances with all its generic features and idiosyncrasies is an extremely complex task. Hence, to keep the complexity of the problem manageable, we work only with Adavus of Bharatanatyam in this paper. An Adavu is a basic unit of Bharatanatyam performance comprising well-defined sets of postures, gestures, movements and their transitions. It is traditionally used to train the dancers.

We address the fundamental problems mentioned above in multiple steps. As a dance video comprises of long sequence of frames (many of which are quite similar), the first challenge is to find a set of most representative and discriminating action elements that can be used to construct a best summary of the associated frame sequence. Hence our first task is to segment the dance videos and to extract key action elements. Such segmentation, however, would usually be subjective and may vary depending on the style of dance, or the dancer, or both. Current literature on posture and gesture recognition research [mohanty2016nrityabodha, samanta2012indian, guo2006dance] often does not consider this issue of segmentation and assumes that pre-segmented sequences are available for analysis. In contrast, Kahol et al. propose a methodology in [kahol2004automated] for automated segmentation of action elements from dance sequences. They use velocity, acceleration and mass of the various segments of the whole body to represent an activity. Using the measures of activities the dance motion is parsed into discrete units. The authors claim 93.3% accuracy for  the detected gesture boundaries. Sharma [apratimrecog] and Han et al. [han2017dancelets] extract the action elements by clustering. In [shiratori2003rhythmic, shiratori2004detecting], the authors propose methods to use musical information for motion structure analysis and segmentation. They detect the onset from the music signal, track the beats, and refine the motion based gesture segmentation using the musical beats.

The next challenge is to recognize the extracted action elements. In some dance forms the action elements are small signature movements or gesture such as plie or releve in Ballet [campbell1995recognition]. However, in a Bharatanatyam Adavu the key action elements of a dance sequence are momentarily stationary postures. We refer to them as Key Postures (KPs). Contrary to intuition, Key Posture recognition is rather non-trivial due to several factors. First, the input has high dimensionality and huge variability in acceptable postures. Second, the dancers often wear long dresses hiding major body parts. Finally, many postures are quite complex and few body parts can get occluded in the frontal view. In [guo2006dance] and [peng2008binocular] orthogonal stereo cameras are used to capture the postures of a contemporary dance. Two views have been represented and used as features for recognition.

Relevance Vector Machine

(RVM) and Support Vector Machine (SVM) are deployed for posture recognition. Recognition of ICD postures has been explored by [mohanty2016nrityabodha] using Kinect data as well as RGB images. The authors show that deep learning using Convolutional Neural Network (CNN) performs better than the conventional approach of using Histogram of Oriented Gradient

(HOG) features with SVM classifier. They use two data sets (one recorded at the laboratory and the other collected from YouTube) of 12 and 14 postures with 720 and 1008 training images, and 144 and 252 test images respectively. The recognition accuracy using HOG + SVM on background-eliminated binary images is reported as 86.11% and 88.89% respectively on the two sets. In contrast, CNN achieves 98.60% and 98.40% accuracy on the same data sets. While little work exist on the posture recognition in ICD, there is sizeable literature on pose recognition in general including 

[andriluka2009pictorial, ning2008discriminative, johnson2011learning, tian2012exploring], and [dantone2013human]. However, most of these are not directly applicable in our context.

The final challenge is to recognize the dance sequence. A dance sequence is like a sentence comprising a set of action elements (or KPs in our case) in a specific order. In Bharatanatyam each Adavu represents a different dance sequence. The rules for composing an Adavu using KPs are defined in Bharatanatyam. The challenge, here, is to capture the rule set in the classifier and recognize an unknown Adavu using the trained classifier. Sharma in [apratimrecog] presents a method to recognize 12 Adavus of Bharatanatyam using Kinect RGB-D data. Every Adavu is represented as a sequence of postures and characterized by the postures present in the Adavu and their order. A posture is represented by skeleton angles. The data set of skeleton angles is clustered to create a dictionary of postures using Gaussian Mixture Model (GMM). The postures are described in terms of histogram of postures and then the histogram is learnt using an SVM classifier. But this does not take into account the temporal information or the audio, and just relies on the occurrence of a posture. However, the order of occurrence of any posture is important for the representation of any Adavu. Hence,  [apratimrecog] uses HMM to preserve the temporal information of an action sequence. The method achieves 80.55% cross validation accuracy for Adavu recognition. This work does not consider the inherent structural information of ICD as the authors do not consider the music. They extract the key postures by clustering which lead to huge number of posture classes. However, this is the only work on classification of ICD sequences. Ofli et al. [ofli2012learn2dance] capture the intrinsic dependencies of dance postures of Turkish folk dance using -gram model. They did not work on sequence recognition as they use the model for choreography synthesis. In general, activity recognition, in terms of sequence of atomic actions, has been explored widely. HMMs and

Dynamic Bayesian Networks

(DBNs) have been widely used for state model-based approaches ( [park2004hierarchical, wu2016deep, natarajan2007coupled]), that represent a human activity as a model composed of a set of states. But, in the context of dance, multimodal analysis and recognition of dance sequence in terms of representative action elements are still open problems.

Given the challenges and the state-of-the-art solutions, we first extract the Key Postures from a video using audio beats and no-motion information of the video. Next, we extract features from skeleton as well as RGB images of Kinect and use these features in three different classifiers for posture recognition. Finally, we design a recognizer for Adavus using HMM. We also capture a rich data set for training and test, and annotate these with the help of Bharatanatyam experts. In this paper we address the basic three challenges of automatic analysis of dance using a multimodal framework. In this respect, our primary contributions are a multimodal framework for automatic extraction of key posture from a collection of dance sequences, recognizers of the key postures, and the capture of the formation rules of a Bharatanayam Adavu comprising of sequence of key postures.

The paper is organized as follows. We model the events for Adavus and Sollukattus in Section 2. Section 3 presents the data set and annotation. Extraction of Key Frames is discussed in Section 4. Section 5 presents three recognizers for Key Postures. Adavus are recognized in Section 6. Finally, we conclude in Section 7.

2 Event Models of Bharatanatyams

Like in most dance forms, a Bharatanatyam dancer performs in sync with a specific form of structured rhythmic music, called Sollukattu. Therefore, a Bharatanatyam Adavu consists of:

  1. Audio Stream or Sollakattu is generated by instrumental strikes along with vocal utterance. It is characterized by:

    1. Beats: A Full Beat or -beat defines the basic unit of time –- an instance on the timescale generated by instrumental strikes. Elapsed time between two -beats is called the tempo period. At times, in a Sollukattu, when the strike occurs at half the time or at one fourth of the time of tempo period, we call it the -beat or -beat respectively.

    2. Bols: A Bol or vocal utterance may accompany a -beat, -beat or -beat.

  2. Video Stream comprises frames of one of the following types:

    1. K-frames or Key Frames: These frames contain Key Postures where the dancer holds (remains momentarily stationary) the Posture.

    2. T-frames of Transition Frame: These are transition frames between two K-frames while the dancer is rapidly changing posture to assume the next Key Posture from the previous one.

  3. Synchronization: Postures of an Adavu are performed in sync among themselves and in sync with the rhythm of the music. A Bharatanatyam dancer typically assumes a (momentarily stationary) Key Posture at a beat and makes a transition of posture between Key Postures of two consecutive beats. In Figure 1, we show the Key Postures for Kuditta Mettu Adavu using Kuditta Mettu Sollukattu.

Figure 1: Occurrence of Key Postures in sync with the beat positions in Kuditta Mettu Adavu

To formally characterize a Sollukattu and an Adavu, we define a set of audio, video and sync events for the above streams of information. The events play a critical role in maintaining the temporal consistency of dance.

2.1 Events of Adavus

An Event denotes the occurrence of a Causal Activity in the audio or the video stream of an Adavu. Further, sync events are defined between multiple events based on temporal constraints. An event is described by:

  1. Category: Source of event – Audio, Video or Sync.

  2. Type: Nature of the causal activity of an event.

  3. Time-stamp / range: The time of occurrence of the causal activity of the event. This is the elapsed time from the beginning of the stream and is marked by a function . Often a causal activity may spread over an interval which will be associated with the event. For video events, we use range of video frame numbers as the temporal interval. With a fixed frame rate of 30 fps in the video, we interchangeably use or for an event.

  4. Label: One or more optional labels may be attached to an event annotating details for the causal activity.

  5. ID: Every instance of an event in a stream is distinguishable. These are sequentially numbered in the temporal order of their occurrence.

The events are list in Table 1 with their characteristics. We locate and extract these events from the Kinect video to identify and segment various auditory (beats and bols) and visual (postures) items for analysis and to reconstruct sequence information for in-depth structural understanding.

Event Event Event Event
Category Type Description Label
Audio Full- / -beat with bol bol
Audio Half- / -beat with bol bol
Audio -beat with bol bol
Audio -beat having no bol stick-beat ()
Audio -beat having no bol stick-beat ()
Audio -beat having no bol stick-beat ()
Audio bol is vocalized bol
Video No-motion Frame-Range, Key Posture
Video Transition Motion Frame-Range
Sync No-motion @ -beat Key Posture
Sync No-motion @ -beat Key Posture
1: A beat, often referred to as full-beat or -beat, is the basic unit of time – an instance on the timescale
2: bols accompany some beats (-, - or -)
3: A -beat is a soft strike at the middle of a -beat to -beat gap or tempo period
4: A -beat is a soft strike at the middle of a -beat to -beat or a -beat to -beat gap
5: A stick-beat () has only beating and no bol
6: Frames over which the dancer does not move (Key Posture)
7: Sequence of consecutive frames over which the events spreads
8: A Key Posture is a well-defined and stationery posture
9: Transition motion to change from one Key Posture to the next
10: and in sync. That is,
11: and in sync. That is,
Table 1: List of Events of Adavus

3 Data Set and Annotation

No data set for Bharatanatyam Adavus is available for research. Hence, we start by recording a data set and then annotate them with the help of Bharatanatyam experts. A part of the data set has been published as Annotated Bharatanatyam Data Set [mallick2017annotatedData] for reference and use by researchers.

3.1 Data Set

In an acoustic studio, we first record 6 sets (marked as SR1 through SR6) of 23 Sollukattus using a Zoom H2N Portable Handy Recorder. At the time of recording the Adavus, SR1 set is played back to the dancer. Next we record 10 sets (marked as AR1 through AR10) of 58 Adavus with Kinect XBox 360 (Kinect 1.0) using nuiCapture software. These have been performed by 9 qualified dancers for one or more cycles and for one or more times.

In this paper, we use on 8 variants of Natta Adavus (named Natta 1 through Natta 8) for posture and Adavu recognition. For this we choose AR1–AR3 and AR6–AR7 data sets (Table 2) based on the availability of completed annotation and mix of the female (AR1–AR3) and male (AR6–AR7) dancers.

Recording Dancer # of Performances # of
Set # ID Cycles per Adavu Recordings
AR1 D1 1 1 8 * 1 = 8
AR2 D2 1 1 8 * 1 = 8
AR3 D3 1 1 8 * 1 = 8
AR6 D6 4 3 8 * 3 = 24
AR7 D7 4 3 8 * 3 = 24
Each set has performances for 8 variants of Natta Adavus
Total Recordings 72
Table 2: Natta Adavu Data Set

3.2 Annotation

With the help of Bharatanatyam experts, we have annotated the data set of Natta Adavus (Table 2). The steps of annotation are:

  1. Segment the video in alternating sequences of K-frames and T-frames. In a sequence of K-frames the dancer is almost stationery. Intervening frames with motion form sequence of T-frames. For every sequence the range of RGB frame numbers is noted. The clues from the audio (beats and bols) are also used in the segmentation process because every K-frame must have been triggered by a beat having an optional bol.

  2. Select one representative K-frame each from every sequence of K-frames. Every K-frame has a Key Posture.

  3. Annotate the Key Posture in every K-frame.

  4. Record the annotations in a file.

For example, in Natta 1 Adavu, the dancer cycles through 4 Key Postures (Figure 2) using Natta Sollukattu. This is annotated in Table 3. The range of K-frames for every Key Posture is noted with the beats and bols while T-frames occur in-between K-frames.

(a) Natta1P1
(b) Natta1P2
(c) Natta1P1
(d) Natta1P3
Figure 2: Cyclic occurrences of Key Postures in Natta 1 Adavu
Posture Start End Beat Bols
Name Frame Frame Number
(a) (b) (c) (d) (e)
Natta1P1 (C01) 70 89 0 No Bol
Natta1P2 (C02) 101 134 1 tei yum
Natta1P1 (C01) 144 174 2 tat tat
Natta1P3 (C03) 189 218 3 tei yum
Natta1P1 (C01) 231 261 4 ta
Class names / Posture IDs are also marked from Figure 3
Table 3: Annotations of a video of Natta 1 Adavu

Using the annotation we collect all K-frames from the 72 videos (Table 2) to form our posture data set. We identify 23 unique Key Postures (Figure 3) that occur in 8 Natta Adavus. Complete annotation helps us to link every K-frame to one of the 23 classes. The number of samples for every class is shown in Table 4

. The data is skewed across classes due to the skew in the occurrence of the postures in the


C01 C02 C03 C04 C05 C06
C07 C08 C09 C10 C11 C12
C13 C14 C15 C16 C17 C18
C19 C20 C21 C22 C23
Figure 3: 23 Key Postures of Natta Adavus with Class / Posture IDs
Posture Training Test Posture Training Test
ID data data ID data data
C01 6154 1457 C13 235 80
C02 3337 873 C14 393 117
C03 3279 561 C15 404 121
C04 1214 219 C16 150 48
C05 1192 268 C17 161 51
C06 1419 541 C18 323 81
C07 1250 475 C19 175 46
C08 284 112 C20 168 43
C09 306 133 C21 19 6
C10 397 162 C22 21 6
C11 408 117 C23 118 61
C12 229 84
Numbers indicate the number of K-frames in each class. Each K-frame is denoted by the frame number of the RGB frame in the video. The associated depth and skeleton frames are used as needed. Various position and formation information on body parts are available for every K-frame from annotation
Table 4: Data Set for Posture Recognition

4 Extraction of Key Frames

The K-frames are synchronized with music beats. Hence, we first work on beat marking and automatic annotation of Sollukattu [mallick2017Sollukattu]. We get the time-stamps of full- and half-beats ( and events) with the corresponding bols. Here, we intend to segment the video into K-frames and T-frames in an audio-guided segmentation using these events. However, while synchronizing audio and video events it should be noted that a Key Posture occurs only at or positions, but every or does not necessarily associate with a key posture. For example, Figure 1 shows that there is no Key Posture at the position for this particular Adavu. Hence, after the audio-guided segmentation we get a set of candidate K-frames only.

Seq. of Frames from Audio Events : (1)
: where : {, }, ,
: and
Seq. of Frames from Video Events : (2)
: where :
Seq. of K-Frames : (3)
No-Motion Predicate : (4)
Overlap Predicate : (5)
K-Frames Annotation : (6)
Validation Predicate : (7)
Table 5: Predicates over events

In Table 5, we summarize the set of predicates that hold over various events and explain these here. First, using the audio events, the video is represented by predicates (5). We next perform a motion-guided segmentation, to classify every frame as no-motion or motion, to determine and events that alternate as in predicates (5). Finally, we combine the audio-guided and motion-guided segmentation results to determine the final set of K-frames. This is represented as in predicates (5), where is an or event and satisfy the predicates as in (5) and (5) respectively. So we compute the set of ranges of K-frames (predicates (5)) from the set of ranges of frames having audio events (as in predicates (5)) and the set of range of frames having video events (predicates (5)). The range of a selected K-frame equals a range of frames having no motion (predicate in (5)) and has overlap (full or partial) with the range of frames for an audio event (predicate in (5)). Finally, the data is annotated for K-frames as in predicates (5), where denotes annotation. One can now validate a frame as K-frame if it satisfies the validation predicate as in (5). Otherwise, the validation fails.

4.1 Motion-Guided Extraction of Key Frames

We try to detect no-motion111Actually, slow or low motion in the video as cutoff by a threshold ( events) in the video. Given that and must alternate in the video, we then deduce the events. A no-motion

event can be detected from Frame Differences in the RGB stream. This is achieved by converting RGB frame data to gray-scale and then computing the frame difference (pixel-wise absolute difference of intensity values) between consecutive frames. Every pixel of the difference frames is binarized into

motion (marked as 1) and no-motion (marked as 0) based on a threshold (higher the value, more is the likelihood of motion). We sum the motion values (number of 1s in a frame) in every binarized frame and use another threshold to mark the frame as a motion frame or a no-motion frame and generate a sequence as in predicates (5).

1:Inputs: = Grayscale Image of frame of the video (reference frame), = Grayscale Image of frame of the video (target frame), ,
2:Output: for no-motion otherwise
3:for   do
4:     for   do
5:         if  then
6:              ;
7:         else
8:              ;
9:         end if
10:     end for
11:end for
13:if  then
14:     return 1;
16:     return 0;
17:end if
Algorithm 1 : No-motion detection

The threshold is set at slightly high value of 50 (that is, about 20% of the maximum intensity 255) to avoid random variations of intensity values and noise being falsely detected as motion at a pixel. To decide on the threshold

, we note that motion in a dance frame can be caused only by the movement of the dancer (background and all other objects in the field of view are stationary). Given the setup for imaging, we estimate (over 1000 images) that the dancer typically occupies less than 10% of the whole frame. Further, the dancer usually moves only the major body parts (legs and hands) which comprises less than 50% of her body. To mandate a strict stationary position (as is required for a

Key Posture), we limit spurious motion to about 1% only. Hence for a whole frame, we expect that not more than 10% * 50% * 1% = 0.05% of the pixels to have motion in a K-frame. Given a frame size of 640 480 pixels, this translates to 150 pixels. After some experiments with the recorded data around this threshold, we finally set pixels.

Line Audio Beats Mapped to No Motion Overlap of Beat Annotation of
# Video Frames from Video & No Motion Key Postures
Start End Bol Beat Start End Start End Start End
Frame Frame Info Frame Frame Frame Frame Frame Frame
(a) (b) (c) (d) (e) (f) (g) (h) (i) (j)
1 3 94
2 98 109 tei yum B-HB 108 132 108 132 104 135
3 143 173 tat tat B-HB 142 161 142 161 147 173
4 163 186 163 186
5 186 220 tei yum B-HB 188 217 188 217 190 216
6 230 242 ta B 223 256 223 256 232 259
7 273 306 tei yum B-HB 279 305 279 305 274 303
8 314 344 tat tat B-HB 322 344 322 344 318 341
9 357 390 tei yum B-HB 363 391 363 391 363 390
10 399 410 ta B 396 419 396 419 401 430
11 441 473 tei yum B-HB 441 473 441 473 443 471
12 481 510 tat tat B-HB 479 498 479 498 484 512
13 502 513 502 513
14 522 555 tei yum B-HB 522 556 522 556 526 556
15 564 574 ta B 562 585 562 585 567 586
16 605 638 tei yum B-HB 607 639 607 639 608 638
17 645 674 tat tat B-HB 650 667 650 667 648 668
18 686 719 tei yum B-HB 688 717 688 717 689 716
19 728 739 ta B 724 773 724 773 730 760
Table 6: Results of Extraction of Key Frames in Natta 3 Adavu
Line Audio Beats Mapped to No Motion Overlap of Beat Annotation of
# Video Frames from Video & No Motion Key Postures
Start End Bol Beat Start End Start End Start End
Frame Frame Info Frame Frame Frame Frame Frame Frame
1 1 50
2 63 74 tei yum B-HB
3 89 99 85 104
4 108 138 tat tat B-HB 116 125
5 151 185 tei yum B-HB
6 195 207 ta B 195 222 195 222 202 224
7 238 271 tei yum B-HB 246 285 246 285 246 270
8 279 309 tat tat B-HB 308 320 308 320 306 317
9 322 355 tei yum B-HB
10 363 375 ta B 373 389 373 389 371 389
11 406 438 tei yum B-HB 432 446
12 446 475 tat tat B-HB 461 471 461 471 453 466
13 487 520 tei yum B-HB
14 528 539 ta B 529 549 529 549 537 552
15 570 603 tei yum B-HB 576 609 576 609 574 604
16 610 639 tat tat B-HB 619 631 619 631 636 646
17 651 684 tei yum B-HB
18 693 704 ta B 697 737 697 737 702 732
Table 7: Results of Extraction of Key Frames in Natta 8 Adavu

4.2 Results of Extraction of Key Frames

We present the results of extraction of K-frames for Natta 3 Adavu (Table 6) and Natta 8 Adavu (Table 7). In the tables the columns (a)–(b) present the sequence of audio event as in predicates (5) (with annotations in columns (c)–(d)), columns (e)–(f) present the sequence of associated video events as in predicates (5), and columns (g)–(h) present the sequence from predicates (5). Finally, columns (i)–(j) present the ground truth from K-frame annotation (as in predicates (5)) to be used for validation (predicates (5)).

In Table 6 (Natta 3 Adavu), no audio event exists for Line #1 while there is a long range of no motion (about 3 sec. over 90 frames). This is when the dancer is in a stance and is just getting ready to start. In Line #s 3 and 4, a single audio event has overlap with two separate no motion events that have very little gap (only one frame # 162, which is due to noise, separates them). Consequently, both of these are detected as ranges of K-frames. These should have got merged. Similar behavior can be observed in Line #s 12 and 13 where 3 frames separate the ranges. Barring these two aberrations, the results match the annotations accurately.

On the other hand, we find a quite few mismatches in Table 7 (Natta 8 Adavu). This is a tricky case because this Adavu indeed does not have K-frames to go with the 3 beat (Line #5), 7 beat (Line #9), 11 beat (Line #13) and 15 beat (Line #17) (as can be seen from the annotations). There is trajectorial motion at these beats. Further, in Line #3 Key Posture occurs quite some time after the audio beat. On recheck, we find this to be an artifact in the data itself. The no motion detection algorithm also fails to detect Key Postures in two cases in Lines #4 and #11. Again, on scrutiny we find that the dancer actually is not momentarily stationary during this period; rather she is slowly moving over the entire range (possibly building up for or recovering from the motions mentioned above). Hence, no motion is not detected.

In a similar manner, we validate the K-frames as detected for the remaining Adavus against the annotation. We achieve 83.49% accuracy overall.

5 Recognition of Key Postures

Our next target is to recognize the Key Postures in the extracted K-frames. During the vocab generation process, we identify 23 unique Key Postures (Figure 3) that occur in 8 Natta Adavus.

During extraction of K-frame one can identify a range of RGB (and corresponding depth and skeleton) frames, all having no motion. Hence, these can be treated as equivalent and we can use any one of them for recognizing the Key Posture in them. This observation is utilized as follows:

  • Additional data sets may be generated by dividing a range of K-frames in multiple parts (Section 6.1).

  • While RGB frames are almost identical, the corresponding depth and skeleton frames, however, may not be identical due to IR noise and estimation error. Hence a sub-range of depth and / or skeleton frames may be used for better estimation of features (Section 5.1.1).

5.1 Features of Postures

We use both skeleton and RGB streams for posture recognition. Angle features from skeleton and HOG features from RGB are extracted for this purpose.

5.1.1 Skeleton Features

Each skeleton frame (corresponding to an RGB frame) in a skeleton stream has 20 joint points (Figure 4) given in terms of their 3D coordinates. Hence typical features of a skeleton frame include – (1) the 3D coordinates of the joint points, (2) instantaneous velocity of the joint points, (3) instantaneous acceleration of the joint points, (4) lengths of the segments (bones) joining the joint points, (5) orientation of the segments joining the joint points, and so on. Most of these features, with the exception of the angular orientation of the bones, are not invariant to the scale, physical dimensions of the dancer, and minor variations in the postures. Hence we choose to use the angular orientation of the bones as descriptors of postures.

Figure 4: Kinect Skeleton Joints

The postures in a dance sequence are dominated by the positions of the legs and the arms. Hence, we choose to restrict our focus only to the 8 bones – 4 each from the left and right sides of the body (Figure 4):

  • Bone joining Shoulder-Center (SPINE_SHOULDER) and Shoulder:



  • Bone joining Shoulder and Elbow:



  • Bone joining Hip-Center (SPINE_BASE) and Hip:



  • Bone joining Hip and Knee:



The angular orientation of every bone comprises 3 angles with X–, Y–, and Z–axes. Hence with 8 bones the feature vector would be 8 3 = 24 dimensional.

In some frames, the skeletons are ill-formed due to IR noise and error in the skeleton estimation algorithm of Kinect. To work around this, we consider 5 consecutive skeleton frames from the range of K-frames and take the average of the coordinates of the joint points. The angular orientation values are computed based on these average values. Also, we do not use the hand information as fingers are often not clear in the skeleton.

5.1.2 RGB Features

Kinect skeletons suffer from variety of noise and may be ill-formed for a frame. Hence, we also use RGB features for posture recognition. First, we extract the human figure from the image using Kinect depth mask. Kinect processes the depth data to locate human body. It detects human body present in the imaging space and provides a binary mask of the human in the depth frame (in terms of markers for players). Using the mask we can extract the human from the depth image. But the depth and RGB images of Kinect are not aligned (because these are captured by two separate cameras on the device). Hence, we perform an affine transformation to bring the depth mask to the RGB space. We get the transformation matrix as a part of the data captured through nuiCapture. After getting the binary mask, we multiply the mask with the RGB image and convert the image into gray-scale.

Results of Human Extraction
Visualization of HOG features
Figure 5: RGB Features

We next compute the Histograms of Oriented Gradient (HOG) [dalal2005histograms] descriptors for each posture frame. HOG is widely used for human detection in an image. This technique counts occurrences of gradient orientation in localized portions of an image. We use the HOG descriptor for recognition of the postures. HOG is calculated by dividing the input image into small spatial regions called cells. 1-D histogram of gradient directions or edge orientations is calculated over each pixel of the cells. The energy of the local histograms are then normalized over a large spatial regions called blocks to get the intended HOG feature descriptor. HOG feature length, , depend upon on the size of the input image and the function parameter values such as cell size, block size, number of orientation bins used for the histogram and the number of overlapping cells between adjacent blocks. is equal to element wise product of , and , where

is the size of the input image, is the size of the cell, is the number of cells in block, is the number of orientation histogram bins, and is the number of overlapping cells between adjacent blocks. Considering 9-bin histogram of gradients over pixels sized cells, and blocks of cells, we extract 9576 dimensional HOG feature vector for each image of size 120 * 160. Sample postures and the plot of the corresponding HOG features are shown in Figure 5.

5.2 Recognition of Key Postures – Multiple Strategies

Every dance is a sequence of different postures (not necessarily distinct) where each posture spans over a time range (sequence of K-frames identified earlier). We get the various frames from Kinect corresponding to the time range of a posture.

Recognizing the posture represented by these frames is a challenging task. Identifying the posture can help in many applications. For instance, once the posture has been identified, we can provide feedback to the dancer whether she / he is doing that posture correctly or not.

To classify the postures, we use three classifiers (Table 12): GMM, SVM, and CNN.

5.2.1 Posture Recognition using GMM

We choose GMM [reynolds2015gaussian] as a classifier for posture recognition for the following reasons:

  • We expect the structures of the classes to follow normal distribution with different mean and variance. Hence a mixture model is a first choice.

  • GMM is the fastest algorithm for learning mixture models.

  • As GMM algorithm maximizes only the likelihood, it does not bias the means towards zero, or bias the cluster sizes to have specific structures that may or may not hold.

  • GMM comes with different options to constrain the covariance of the difference classes estimated: spherical, diagonal, tied or full covariance.

However, there are challenges too in using GMM:

  • In GMM, each posture (K-frame

    ) needs to be represented in the form of a feature vector. So feature selection is an important step. We decide to use skeleton features (Section 

    5.1.1) for this.

  • The skeletal data from Kinect is noisy at times. It can affect the training phase of our classifier.

  • When there are inadequate observations per mixture, estimating the covariance matrices gets difficult, and the algorithm is known to diverge.

Parameter selection

We use the scikit-learn library222 for implementation of GMM because it allows to learn the parameters of Gaussian Mixture Models (spherical, diagonal, tied or full covariance matrices are supported) from data. It also facilitates to determine the appropriate number of components. We initially performed a few trials to understand the nature of the data and came up with the following parameters:

  • Covariance matrix type: With our experimental trials we achieve 84.7%, 83.9%, 98.4%, and 97.7% accuracy for spherical, diagonal, full, and tied covariance matrix types respectively. Hence, we choose ‘full’ covariance matrix type for our model.

  • Number of iterations: We need to decide on a value that neither under-fits nor over-fits our model on the training data set. Using the ‘full’ covariance matrix – we train our model multiple times using different number of iterations (, , , , , ). We get the peak at and decide to use it for training our model.

Results and Analysis

We train and test our model using the data set in Table 4. We achieve 83.04% accuracy for posture recognition using GMM

. The confusion matrix is shown in Table 

8 with major mis-classifications. The primary reasons of mis-classifications are:

Actual Class Predicted Class
Class Self Error Total Class Self Error Total
C01 96.0 1457 C13 68.7 (10.0, C15), (6.2, C08), (6.2, C11) 80
C02 87.2 (5.7, C01) 873 C14 67.5 (31.6, C01) 117
C03 85.9 561 C15 66.9 (9.0, C01) 121
C04 62.5 (7.3, C10), (6.8, C02), (5.9, C01) 219 C16 33.3 (20.8, C07), (18.7, C03), (16.6, C02) 48
C05 75.3 (5.2, C01) 268 C17 19.6 (15.6, C01), (15.6, C03), (13.7, C06), (9.8, C09), (5.8, C02), (5.8, C12) 51
C06 85.0 (5.1, C01) 541 C18 61.7 (14.8, C01), (8.6, C02), (6.1, C03), (6.1, C05) 81
C07 86.1 475 C19 76.0 (10.8, C06), (8.6, C04) 46
C08 63.3 (18.7, C01) 112 C20 67.4 (6.9, C05), (6.9, C07), (6.9, C12) 43
C09 75.1 (14.2, C15) 133 C21 50.0 (16.6, C09, (16.6, C11, (16.6, C13 6
C10 74.6 (7.4, C02), (6.7, C01) 162 C22 33.3 (16.6, C05), (16.6, C08), (16.6, C11), (16.6, C15) 6
C11 95.7 117 C23 45.9 (13.1, C03), (11.4, C08) 61
C12 70.2 (23.8, C02), (5.9, C01) 84
For test data (Tab. 4), the diagonal entries (in %) of the confusion matrix are shown as ‘Self’. Entries with 5%+ error are shown under ‘Error’. For example, for Class = C14, the diagonal entry is 67.5% and it is mis-classified as C01 in 31.6% cases. ‘Total’ shows the number of symbols in the class
Table 8: Confusion matrix for Posture Recognition by GMM
  • Similarity of Postures: In Table 8 we find that posture C13 is classified as posture C15 in 10% of the cases. If we look at the posture C13 and C15 in Figure 3, we observe that they are quite similar in the way the hands and legs are stretched. Hence strong posture similarity causes mis-classification.

  • Skeleton Noise: At times two postures that are quite different from each other may still have quite similar skeletons. This is due to IR noise and error in the skeleton estimation algorithm of Kinect. The error may span several consecutive frames so that our strategy of averaging over 5 consecutive skeletal frames fail. For example, in Figure 6 the right leg of posture C14 is not stretched at all in the skeleton image. Hence, the skeleton of C14 looks like the skeleton of C01. On the other hand, the noise is very high in the skeletons of C16 and C17 (Figure 7). Hence C16 and C17 are mis-classified with several other classes.

    C14 C01 Skeleton of C14 Skeleton of C01
    Figure 6: Skeleton noise leading to confusion between C14 and C01
    C16 C17 Skeleton of C16 Skeleton of C17
    Figure 7: Skeleton noise and Symmetry in C16 and C17

5.2.2 Posture Recognition using SVM

Skeleton noise adversely impacts the accuracy of posture recognition by GMM using the angular orientation features from skeleton images. Hence, we next explore recognition by Support Vector Machine (SVM) using HOG features from RGB images. SVM ([vapnik2013nature, scholkopf1997comparing, suykens1999least]

) is one of the most widely used supervised learning algorithms. The advantages of SVM as a classifier include:

  • SVM is effective where the number of dimensions is greater than the number of samples.

  • The support vectors use subset of the training points. Hence the classifier is often efficient.

  • Different Kernel functions can be used as the decision function based on the training data set.

The challenges in using SVM include:

  • The classifier may give poor performance if the number of features is much greater than the number of samples.

  • The classifier does not provide probability estimates.

SVM is a binary classifier, that is, it separates only between 2 classes. However multiple classes can be classified by using multiple SVMs. SVM is a maximal margin classifier, which finds a hyper-plane (decision boundary) which separates the 2 classes by maximizing the distance of the margin from the 2 classes.

Parameter Selection

Optimal choice of kernel functions for an SVM is an open problem in the literature. There is no known method to guarantee that a particular kernel function will consistently perform better than others. Hence the choice of kernel functions varies on a case to case basis. Two of the commonly used kernels are Linear Kernel and Gaussian Kernel. If the data is non-linear, Gaussian kernel is usually the best for many applications. This kernel is also known as Radial Basis Function (RBF) kernel and is defined as:

where AND are two samples represented as feature vectors in some input space, is the squared Euclidean distance between the two feature vectors, and is a free parameter.

5.2.3 Results and Analysis

To classify the postures into 23 posture classes (Figure 3), we use One vs. Rest type of multi-class SVM. Hence, only 23 models is trained as opposed to = 253 models that would have been necessary for One vs. One type. The data set from Table 4 is used for training and testing the SVM. For testing we use the trained SVM models to predict the class labels. We achieve 97.95% accuracy for posture recognition using SVM.

The confusion matrix is shown in Table 9. The table shows that the major mis-classifications occur between C16C17 and C19C20. The posture classes C16C17 (Figure 7) and C19C20 (Figure 3) are actually symmetric and strongly similar. Therefore, one class gets mis-classified to other symmetric class.

Actual Class Predicted Class
Class Self Error Total Class Self Error Total
C01 100.0 1457 C12 100.0 84
C02 99.8 (0.2, C01) 873 C13 100.0 80
C03 100.0 561 C14 100.0 117
C04 100.0 219 C15 100.0 121
C05 100.0 268 C16 100.0 48
C06 100.0 541 C17 49.0 (51.0, C16) 51
C07 100.0 475 C18 100.0 81
C08 100.0 112 C19 39.1 (23.9, C01), (17.4, C04), (19.6, C20) 46
C09 100.0 133 C20 55.8 (44.2, C19) 43
C10 100.0 162 C21 100.0 6
C11 65.0 (15.4, C01), (19.6, C05) 117 C22 100.0 6
C23 100.0 61
For test data (Tab. 4), the diagonal entries (in %) of the confusion matrix are shown as ‘Self’. Entries with non-zero error are shown under ‘Error’. For example, for Class = C17, the diagonal entry is 49.0% and it is mis-classified as C16 in 51.0% cases. ‘Total’ shows the number of symbols in the class
Table 9: Confusion matrix for Posture Recognition by SVM

5.2.4 Posture Recognition using CNN

We observe that GMM and SVM classifiers for posture recognition are able to perform well on crafted features like skeleton angle and HOG. But the traditional feature engineering has a few challenges:

  • There are limitations in abstracting various higher levels of body features.

  • It is highly challenging to model natural variations that exists in the posture structures.

With recent advancement in GPU technology, the deep learning technique is able to achieve state-of-the-art recognition in many image classification problems if fairly large training data set is available (as in our case). Moreover, with deep learning, we do not need to manually select the features. Hence we explore Convolutional Neural Network (CNN) to deal with the posture recognition problem.The challenges in using CNN include:

  • The data set size for each dance posture is uneven. Few postures are more likely to occur and are more in number. But few postures which do not occur so frequently are less in number. For example (Table 4), posture C01 (Figure 3) occurs frequently while a difficult posture like C22 occurs in hardly few Adavus, leading to small data size.

  • We need to decide on a proper architecture, that is, how many layers should be there and how many nodes should exist in each layer. This decision may require several trials.

5.2.5 Dataset

Using the data set of Table 4 we get a test accuracy of 61.30% for 23 classes. The poor accuracy is due to very less data in some classes and symmetric postures between a number of classes.

The classes C21 and C22 (Table 4) have hardly any data compared to class C01. To handle this disparity we discard a few classes which have insufficient data. Hence, we ignore classes C12, C13, C18, C21, C22, and C23. And we merge classes C16C17 (Figure 7) and C19C20 (Figure 3) that corresponded to symmetric postures. Finally we have 15 classes (Table 10). Note that we renumber the classes after elimination and merging.

Posture Training Test Posture Training Test
ID data data ID data data
C01 6154 1457 C09 306 133
C02 3337 873 C10 397 162
C03 3279 561 C11 408 117
C04 1214 219 C12 393 117
C05 1192 268 C13 484 121
C06 1419 541 C14 394 99
C07 1250 475 C15 356 89
C08 284 112
Table 10: Restricted data set for CNN

5.2.6 Design of CNN

First we design each sub-layers of our network. The selected sub-layers are convolution, reLU, Max-Pooling, Local Response Normalization (LRN), Dropout layer and Inner product. We consider the standard way of organizing the layers, that is, convolution, relu and pooling few times and then finally ending with fully connected layers. We start with an initial architecture having a single convolution hidden layer and gradually increase it to obtain a better validation accuracy. With a number of trials, we obtain the best results with 3 hidden layers. These convolution layers are then followed by two fully connected layers so that the final obtained result has dimension same as that of the number of classes. We also include a final loss layer which includes a Softmax followed by cross entropy. Figure 

8 shows the architecture.

Figure 8: CNN architecture for Posture Recognition

5.2.7 Results and Analysis

We use the tensorflow library

333 in Python language to implement the CNN. We train the CNN model on the training data set (Table 10) and then test the model on a different unseen data set. We achieve accuracy of 99.12% for posture recognition using CNN. The confusion matrix (Tab. 11) shows little significant error in classification.

Actual Class Predicted Class
Class Self Error Total Class Self Error Total
C01 100.0 1457 C08 97.3 (1.8, C01), (0.9, C02) 112
C02 99.7 (0.2, C03), (0.1, C01) 873 C09 97.0 (2.3, C01), (0.8, C05) 133
C03 99.3 (0.7, C01) 561 C10 99.4 (0.6, C01) 162
C04 98.6 (1.4, C01) 219 C11 97.4 (1.7, C05), (0.9, C01) 117
C05 98.9 (1.1, C01) 268 C12 95.7 (4.3, C01) 117
C06 97.8 (1.7, C01), (0.4, C04), (0.2, C02) 541 C13 98.3 (1.7, C01) 121
C07 99.8 (0.2, C06) 475 C14 100.0 99
C15 96.6 (3.4, C01) 89
Results for test data as in Table 4. For test data (Tab. 4), the diagonal entries (in %) of the confusion matrix are shown as ‘Self’. Entries with non-zero error are shown under ‘Error’. For example, for Class = C15, the diagonal entry is 96.6% and it is mis-classified as C01 in 3.4% cases. ‘Total’ shows the number of symbols in the class
Table 11: Confusion matrix for Posture Recognition by CNN

5.3 Summary Results of Key Posture Recognition

Three different classifiers have been designed with different input features to recognize Key Postures. The accuracy results are summarized in Tab. 12. We get the best recognition rate with CNN but using only 15 classes while SVM does commendably well for 23 classes. We observe that the traditional features give better results when the data set is skewed across classes – specifically when some classes have very few number of samples.

Recognizer Input Data Features
No. of
Rate (%)
GMM Skeleton Angle 23 83.04
SVM RGB HOG 23 97.95
CNN RGB - 15 99.12
Table 12: Results of Posture Recognition

6 Adavu Recognition

Using the extracted K-frames and the Key Postures as recognized above, we attempt to recognize 8 Natta Adavus. That is, to recognize the Adavu from a sequence of Key Postures corresponding to its performance. Identifying the dance as a particular Adavu is an interesting and challenging task. It can help in many applications. For instance, once the Adavu is identified, we can offer feedback to the dancer regarding his / her performance. The feedback can vary from being at a macro level like proper sequencing of steps to micro level like proper formation of a posture. Thus it can help build a dance tutoring system.

We have tried to recognize Adavus or the posture sequences using HMM. To recognize the sequences we create one HMM for each Adavu class. Given a classifier of 8 Adavus, we choose the model which best matches the observation from 8 HMMs, . For an unknown sequence, we calculate for each HMM and select where . In the learning phase, each HMM is trained so that it is most likely to generate the symbol pattern of its category. Leaning of HMM means optimizing the model parameters () to maximize the probability of the observation sequence .

6.1 Data Set

The data set for training and testing the HMMs is shown in Table 13. The natural pattern of posture transition in all 8 Adavus are shown in Table 14. Here, the indicate the followedBy relation between two posture classes.

Adavu Training Test Adavu Training Test
data data data data
Natta 1 35 7 Natta 5 71 7
Natta 2 35 7 Natta 6 71 7
Natta 3 71 7 Natta 7 71 7
Natta 4 68 7 Natta 8 71 7
Table 13: Sequence data set for Adavu Recognition

6.2 Training the HMM

We build one HMM for each Adavu. The number of hidden states of the HMMs is considered to be equal to the number Key Postures in an Adavu. A K-frame is represented in terms of the skeleton angles. Estimation Maximization (EM) [wilson1999parametric] algorithm is used for leaning the parameters of HMMs. The HMM with Gaussian emissions is employed. Diagonal covariance matrices are used for the Gaussian to exploit correlations between the elements of each observation. Additionally, the Viterbi algorithm [rabiner1989tutorial] is used for decoding. In total 8 HMMs are built to recognize 8 Adavu classes. To recognize a test Adavu, we compute the log probability under each model and select the model having maximum log probability to predict the Adavu.

6.3 Results of Adavu Recognition

Using 8 variants of Natta Adavu, we achieve 94.64% accuracy in recognition of Natta Adavus (Table 15). The data set for Adavu recognition is given in Table 13. Mis-classification occurs between Natta Adavu classes 1 and 2 due to the similarity between the natural patterns of these two sequences.

Adavu Sequence of Postures Classes
Beats (full) B01B02B03B04B05B06B07B08B09B10B11B12B13B14B15B16
Natta 1 C02C01C03C01C02C01C03C01C02C01C03C01C02C01C03C01
Natta 2 C02C01C02C01C03C01C03C01C02C01C02C01C03C01C03C01
Natta 3 C02C01C03C01C04C04C02C01C03C01C02C01C05C05C03C01
Natta 5 C07C07C06C06C02C01C02C01C07C07C06C06C03C01C03C01
Natta 6 C08C08C10C10C02C01C02C01C09C09C11C11C03C01C03C01
Natta 7 C12C12C14C14C07C07C06C06C13C13C15C15C07C07C06C06
Natta 8 C16C16T01C18C19C21T02C23C17C17T03C18C20C22T04C23
Beats (full) B01B02B03B04B05B06B07B08B09B10B11B12B13B14B15B16
Natta 4 C02C01C02C01C03C01C03C01C04C04C04C04C02C01C02C01
Sollukattu = Natta. Number of Beats in a bar = 8. Bols with beats are:
    B01 (tai yum)B02 (tat tat)B03 (tai yum)B04 (ta)B05 (tai yum)B06 (tat tat)B07 (tai yum)B08 (ta)
Bars of the Sollukattu are shown in alternating colors
A cycle of Natta Adavu has 16 or 32 postures and spans 2 or 4 bars of the Sollukattu
Natta 8 Adavu has transition postures at beats B03, B07, B11, and B15. These are ignored here
Table 14: Sequence of postures in Natta Adavus
Predicted Class
1 2 3 4 4 6 7 8 Total
Actual Class 1 4 3 0 0 0 0 0 0 7
2 0 7 0 0 0 0 0 0 7
3 0 0 7 0 0 0 0 0 7
4 0 0 0 7 0 0 0 0 7
5 0 0 0 0 7 0 0 0 7
6 0 0 0 0 0 7 0 0 7
7 0 0 0 0 0 0 7 0 7
8 0 0 0 0 0 0 0 7 7
4 10 7 7 7 7 7 7
Table 15: Confusion matrix for Adavu (sequence) Recognition

7 Conclusions

In this paper, we have addressed a few fundamental problems of dance analysis related to dance video segmentation and key posture extraction, key posture recognition and dance sequence recognition. Dance video segmentation is often subjective and critically depends on the style of dance. Here we have focused on Bharatanatyam and created a model for analyzing Adavus, an essential unit of Bharatanatyam, with the help of accompanying audio, video and sync events We use the audio events to first extract Key Frames. The Key Postures are then identified from the extracted K-frames. Finally, from the sequence of postures we recognize the Adavu. Posture recognition problem is addressed by using three types of classifiers – namely GMM, SVM, and CNN. Although these classifiers use different sets of features and have their respective strengths and limitations, overall more than 90% accuracy is achieved. We achieve 83.5% accuracy in extracting K-frames. For posture recognition we identify 23 posture classes that occur in Natta Adavus. We achieve 83% accuracy for posture recognition using GMM with angular features from skeletons and 98% accuracy using SVM with HOG features from RGB frames. Since some of posture classes are very similar or have very little data, we merge 23 classes into 15 for building a CNN classifier. We achieve an accuracy of 99% for posture recognition using CNN.

We have done the structural analysis of dance considering the underlying semantics. Hence, the algorithms developed in this paper can be used in many applications including:

  • Dance Transcription: Forms like Bharatanatyam in ICD is traditionally passed on from experts to their disciples through personal contact and face-to-face training. Consequently, preservation of the heritage of ICD is a major challenge as it is often threatened with the possibility of this trainer-trainee human-chain breaking down. The need of the hour, therefore, is to transcribe ICD in a notation (much in the way music in transcribed in a notation) that can transcend time. Labanotation, commonly used in the Western dance forms to graphically depict dance steps. Bharatanatyam Adavus are transcribed to Labanotation in [Sankhla2018] and represented in a parseable XML representation of the graphical notation.

  • Dance Tutoring: A dance trainee, as a user, will be able to use the tutoring system to check the correctness of her Adavu performances against pre-recorded performances by the experts. We have built a rudimentary version of this application [Aich2018] using Dynamic Time Warping (DTW) to associate posture frames from expert’s performance video with the corresponding ones from the trainee’s. This should be developed as a complete application to improve training.

  • Dance Animation: Once the sequencing information has been extracted (a subset of the Adavu recognition problem), ICD performances can be synthetically created through animation of avatars as well as actual 3D human models.


The work of the first author is supported by TCS Research Scholar Program of Tata Consultancy Services of India.