{"id":51457173,"url":"https://github.com/cho3sang/futbol-flow-counter","last_synced_at":"2026-07-06T01:30:28.269Z","repository":{"id":368765836,"uuid":"1199921371","full_name":"cho3sang/futbol-flow-counter","owner":"cho3sang","description":"OpenCV-powered desktop app for tracking soccer juggles, visualizing ball motion, and saving training sessions.","archived":false,"fork":false,"pushed_at":"2026-07-02T04:12:01.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T06:13:24.917Z","etag":null,"topics":["computer-vision","kalman-filter","opencv","python","soccer","sqlite","tkinter"],"latest_commit_sha":null,"homepage":null,"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/cho3sang.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-02T21:09:52.000Z","updated_at":"2026-07-02T04:12:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cho3sang/futbol-flow-counter","commit_stats":null,"previous_names":["cho3sang/futbol-flow-counter"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/cho3sang/futbol-flow-counter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cho3sang%2Ffutbol-flow-counter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cho3sang%2Ffutbol-flow-counter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cho3sang%2Ffutbol-flow-counter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cho3sang%2Ffutbol-flow-counter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cho3sang","download_url":"https://codeload.github.com/cho3sang/futbol-flow-counter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cho3sang%2Ffutbol-flow-counter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35175118,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"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","kalman-filter","opencv","python","soccer","sqlite","tkinter"],"created_at":"2026-07-06T01:30:22.624Z","updated_at":"2026-07-06T01:30:28.148Z","avatar_url":"https://github.com/cho3sang.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Futbol Flow Counter\n\nFutbol Flow is a desktop Python app that uses OpenCV to track a soccer ball and count juggling touches when the ball reverses from falling to rising inside the kick zone.\n\n![Futbol Flow dashboard preview](docs/screenshots/dashboard-preview.svg)\n\n## What It Demonstrates\n\n- Real-time computer vision with OpenCV\n- State-based event detection for counting juggle touches\n- Kalman-assisted tracking through short occlusions\n- Desktop UI design with live metrics and tuning controls\n- Local session persistence with SQLite\n\n## Features\n\n- Live webcam mode and local video-file mode\n- OpenCV ball detection using motion filtering, contour analysis, and Hough circle fallback\n- Kalman-assisted prediction that keeps the track alive through short occlusions\n- Rebound-based juggle counting instead of raw motion counting\n- Desktop dashboard with live count, timer, velocity, streaks, saved-session history, and tuning sliders\n- Local SQLite session logging with personal bests, best streaks, and recent-session summaries\n- Adjustable kick zone, rebound sensitivity, and motion area thresholds\n\n## Setup\n\n1. Create a local virtual environment:\n\n```bash\npython3 -m venv .venv\n```\n\n2. Activate it:\n\n```bash\nsource .venv/bin/activate\n```\n\n3. Install the dependencies:\n\n```bash\npython3 -m pip install -r requirements.txt\n```\n\n4. Launch the app:\n\n```bash\npython3 app.py\n```\n\n5. Run the tracker logic tests:\n\n```bash\npython3 -m unittest discover -s tests -v\n```\n\n## How It Counts\n\nThe tracker looks for a moving circular object, stores a short trail of ball positions, and counts a touch when:\n\n- the ball drops into the lower kick zone\n- recent motion is clearly downward\n- that motion reverses upward quickly enough\n- short occlusions are bridged with a Kalman filter so the track can recover smoothly\n\nThis works best with:\n\n- one ball in frame\n- a steady camera angle\n- enough distance to keep your feet and the full ball visible\n- a background that contrasts with the ball and your clothing\n\n## Tuning Tips\n\n- If the app misses touches, lower the kick zone or reduce rebound speed slightly.\n- If the app counts noise, raise rebound speed or increase motion area.\n- Mirror mode only affects webcam input, which usually feels better during training.\n\n## Notes\n\nThis is a lightweight OpenCV tracker, not a trained sports model, so the cleanest results come from good lighting and a clear practice space.\n\nSession history is stored locally in `futbol_flow.db`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcho3sang%2Ffutbol-flow-counter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcho3sang%2Ffutbol-flow-counter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcho3sang%2Ffutbol-flow-counter/lists"}