{"id":29763533,"url":"https://github.com/eduardopach/skateai","last_synced_at":"2026-05-18T02:36:01.038Z","repository":{"id":59035046,"uuid":"469205305","full_name":"EduardoPach/SkateAI","owner":"EduardoPach","description":"Skateboard Tricks Classifier","archived":false,"fork":false,"pushed_at":"2023-05-28T18:52:19.000Z","size":57472,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-27T00:09:04.684Z","etag":null,"topics":["computer-vision","deep-learning","pytorch"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EduardoPach.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-12T21:34:23.000Z","updated_at":"2025-06-22T10:55:07.000Z","dependencies_parsed_at":"2023-02-04T08:45:25.422Z","dependency_job_id":null,"html_url":"https://github.com/EduardoPach/SkateAI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/EduardoPach/SkateAI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EduardoPach%2FSkateAI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EduardoPach%2FSkateAI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EduardoPach%2FSkateAI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EduardoPach%2FSkateAI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EduardoPach","download_url":"https://codeload.github.com/EduardoPach/SkateAI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EduardoPach%2FSkateAI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33162687,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T22:39:12.733Z","status":"online","status_checked_at":"2026-05-18T02:00:06.436Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-vision","deep-learning","pytorch"],"created_at":"2025-07-26T21:41:11.461Z","updated_at":"2026-05-18T02:36:01.030Z","avatar_url":"https://github.com/EduardoPach.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SkateAI\n\n![treflip](./assets/00001.gif)\n\n\nWelcome to SkateAI, an in-progress project that aims to predict skateboard flatground tricks based on videos taken from the famous Battle at the Berrics (BATB).\n\n\u003e This README file was generate with the help of [ChatGPT](https://chat.openai.com/chat)\n## Next steps\n- [x] Create a Labelling tool\n- [x] Have a working training loop\n- [ ] Add video avg brightness and other things to metadata\n- [x] Add Dropout to the Heads module\n- [ ] Label 1k clips\n- [x] Create a check performance for Dataloaders\n- [x] Create split script for train-validation\n- [x] Integrate training loop with Weights \u0026 Biases (not sure what to log)\n- [ ] Do a sweep with W\u0026B\n\n\n## Overview\n\nSkateAI is a deep learning based model trained on a dataset of BATB videos that allows users to input a video of a skateboarder attempting a flatground trick, and the model will output a prediction of which trick the skateboarder is attempting. The model has been trained to recognize a variety of flatground tricks, such as kickflips, shuvit variations, and more.\n\n## Reproducibility\n\nIf you want to give it a try feel free to star, clone or fork the repo. To clone do:\n\n```bash\ngit clone https://github.com/EduardoPach/SkateAI.git\n```\n\nYou can install the dependencies with pip or pipenv depending on how you're managing your venv with one of the following:\n\n```bash\npip install -r requirements.txt # if you are managing your own venv\npipenv install . # To install only the necessary dependencies\npipenv install --dev # To install all dependencies including dev ones\n```\n\nFor this project I created my own humble labelling tool with the `dash` library. To use the tool run:\n\n```bash\npython ./labeling_tool/index.py\n\n\u003e\u003e\u003e Dash is running on http://127.0.0.1:8050/\n```\n![labelling_tool](./assets/labeling_tool_gif.gif)\n\n\nIt's configured in the `./labelling_tool/const.py` (yeah, I'm lazy for using a .py) and uses as sources some playlists from [the Berrics youtube channel](https://www.youtube.com/@berrics/featured). In the tool cuts are created and stored in the `./data/tricks_cut.json` like: \n\n```json\n{\n    \"https://www.youtube.com/watch?v=sDLIf7JVNnM\": {\n        \"regular treflip landed 1\": {\n            \"interval\": [\n                149.6,\n                151.9\n            ],\n            \"video_source\": \"BATB 11\",\n            \"trick_info\": {\n                \"body_rotation_type\": \"none\",\n                \"body_rotation_number\": 0,\n                \"board_rotation_type\": \"backside\",\n                \"board_rotation_number\": 2,\n                \"flip_type\": \"kickflip\",\n                \"flip_number\": 1,\n                \"landed\": true,\n                \"stance\": \"regular\",\n                \"trick_name\": \"treflip\"\n            }\n        }\n}\n\n```\n\nWhere the keys are the main video links and the values are cuts associated with the video. The main fields are:\n\n- interval: Start and end time in seconds in the main video of the clip that was created\n- trick_info: A dictionary contaning the trick information breaking it down to its main constituents\n  - body_rotation_type: Backside, frontside or None\n  - body_rotation_number: Arbitrary integer that represents the number of times the body rotate 180 degrees\n  - board_rotation_type: Backside, frontside or None\n  - board_rotation_number: Arbitrary integer that represents the number of times the board rotate 180 degrees\n  - flip_type: Kickflip, heelflip or None\n  - flip_number: Arbitrary integer that represents a full flipping rotation\n  - stance: Feet positioning of the skateboarder. Regular, fakie, nollie, switch\n  - landed: Whether or not the trick was landed\n  - trick_name: How the combination of these constituents are called in the Skate jargon\n\n\nTo download the video clips present in the `./data/tricks_cut.json` run:\n\n```bash\npython ./labelling_tool/generate_data.py --download-all\n```\n\nThe `--download-all` flag will download all cuts in the `.json` file, regardless if the video was previously downloaded, and recreate the metadata `.csv` (If you just want to download new cuts don't use this flag).\n\nDuring download two new directories are generated in the `data` directory:\n- videos: Where the `.mp4` files are stored.\n- metadata: Where a `.csv` file with metadata about each clip downloaded.\n\nIn the `dataset` directory you'll find the implementation of a custom `torch` Dataset called `TricksDataset` and in the `models` directory you may find some usefull implementations in case you want to try your own models! \n\n## Usage (IN-PROGRESS)\n\nTo use SkateAI, you will need to provide a video of a skateboarder attempting a flatground trick. The video should be in a format that can be read by the model (e.g. MP4). Simply input the video into the model, and it will output a prediction of which trick the skateboarder is attempting.\n\n## Limitations\n\nSkateAI is designed to recognize flatground tricks only. It may not be able to accurately predict tricks that involve more complex movements or transitions, such as grinds or ramp tricks. Additionally, the model's predictions may not be 100% accurate, as there may be variations in how different skateboarders perform the same trick and the recording conditions.\n\n## Future Work\n\nI'm continuously working to improve the performance of SkateAI and expand its capabilities. In the future, we hope to add the ability to recognize a wider range of tricks and improve the model's accuracy. We also plan to expand the dataset to include a greater diversity of skateboarders and tricks.\n\n## Credits\n\nSkateAI was developed by Eduardo Pacheco. I would like to thank the skateboarding community, the creators of the BATB series, **Steve Berra** and **Eric Koston**, and the people that recorded the battles (one that I can name is **Chase Gabor**) for their contributions to this project.\n\nI might add a list in here to thank everyone directly or indirectly related to the BATB videos.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feduardopach%2Fskateai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feduardopach%2Fskateai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feduardopach%2Fskateai/lists"}