Professional Table Tennis AI Serve Classifier using Edge Impulse

Team,

I made a video demo on my “Professional Table Tennis AI Serve Classifier using Edge Impulse” project. The idea is to use this classifier to practice the serves and potentially to teach table tennis players how to receive them properly.

Here is it: https://www.youtube.com/watch?v=WZ0YieleoII&feature=youtu.be

@janjongboom

Amazing project, great work and thanks for sharing! How many samples did you need for each serve to get this level of accuracy?

Dan,

Thanks! I actually did very small but controlled datasets. I used about 7.15 minutes worth of serve datasets divided by 4 type of serves. Technically, it’s just 10 datasets of 10 seconds each per serve.

The evolution of this project is to include a gyroscope sensor to measure angular velocity so that it can distinguish what type of spin a serve imparts depending on the angle of the racket. Right now this is simply using the 3 axes accelerometer to distinguish the strokes and classify the serve.

I’m continually amazed by how little data is required to get a TinyML model that works in the lab. Keep us updated on your progress!

p.s. I hope you don’t mind but we shared your link on Twitter:

Dan,

I don’t mind it at all. I have another project based on your tutorial on the faucet sound classification. I did a basic classification of “Environmental Noise”, “Motor Vehicle Sound”, and “Alert” from a buzzer. I want to deploy it on an STM32 Sensortile with a cradle my use case. I’ll put together a video once I’m done and share it later.

Kudos to EI team!

Great work, I’m looking forward to seeing it! And let us know if you have any feedback on Edge Impulse while you’re building stuff :slight_smile:

@rsiquijor That is awesome! And this is coming from the summer 1999 youth campsite table tennis champion. I’ll be adding it to the developer newsletter that’ll go out today!

One thing that’ll easily be added is some idle class to determine when you’re between serves.

:rocket: :ping_pong:

@janjongboom Wow! Great! Maybe I can challenge you for a friendly match next time I’m in California (whenever that will be possible) hehehe!

In adding the “idle class”, do I just add a label as “idle” when I’m not doing a stroke?

Do you think adding “angular velocity” using the gyroscope information can help improve the model, to determine a difference in between a pendulum side spin vs a back-spin stroke?

@rsiquijor Yeah, just add a label idle while you’re not doing a stroke. Make sure to add some variation, e.g. walking with the paddle, etc.

Do you think adding “angular velocity” using the gyroscope information can help improve the model, to determine a difference in between a pendulum side spin vs a back-spin stroke?

Yeah, definitely. You can just stick the gyro data in the same data format so you’ll have some additional axes, but that would probably help.