{"id":50906912,"url":"https://github.com/toyonix/hand-landmarks-capture-system","last_synced_at":"2026-06-16T06:02:41.547Z","repository":{"id":355679109,"uuid":"1227755247","full_name":"ToYoNiX/hand-landmarks-capture-system","owner":"ToYoNiX","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-04T19:27:56.000Z","size":94,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-04T20:25:31.682Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://hand-landmarks-capture-system.vercel.app","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ToYoNiX.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-05-03T05:50:38.000Z","updated_at":"2026-05-04T19:28:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ToYoNiX/hand-landmarks-capture-system","commit_stats":null,"previous_names":["toyonix/hand-landmarks-capture-system"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ToYoNiX/hand-landmarks-capture-system","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ToYoNiX%2Fhand-landmarks-capture-system","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ToYoNiX%2Fhand-landmarks-capture-system/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ToYoNiX%2Fhand-landmarks-capture-system/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ToYoNiX%2Fhand-landmarks-capture-system/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ToYoNiX","download_url":"https://codeload.github.com/ToYoNiX/hand-landmarks-capture-system/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ToYoNiX%2Fhand-landmarks-capture-system/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34393302,"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-06-16T02:00:06.860Z","response_time":126,"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":[],"created_at":"2026-06-16T06:02:39.917Z","updated_at":"2026-06-16T06:02:41.527Z","avatar_url":"https://github.com/ToYoNiX.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ARSL Hand Landmarks Capture System\n\nA browser-based data collection tool for building an Arabic Sign Language (ARSL) dataset. It uses your webcam and Google MediaPipe to detect hand landmarks in real time, then uploads labelled gesture recordings to Supabase Storage.\n\n## Features\n\n- Real-time hand landmark detection via MediaPipe Tasks Vision (GPU-accelerated)\n- Static signs — single averaged frame; dynamic signs — full frame sequences\n- Per-label progress tracking (50 samples required per sign)\n- 30 labels across 4 categories: Numbers, Greetings, Basic Words, Colors\n- Recordings are wrist-normalised before upload\n\n## Tech Stack\n\n- [React 19](https://react.dev) + [Vite](https://vite.dev)\n- [@mediapipe/tasks-vision](https://ai.google.dev/edge/mediapipe/solutions/vision/hand_landmarker)\n- [@supabase/supabase-js](https://supabase.com/docs/reference/javascript)\n\n## Prerequisites\n\n- Node.js 18+\n- A webcam\n- A [Supabase](https://supabase.com) project\n\n## Setup\n\n### 1. Clone and install\n\n```bash\ngit clone https://github.com/your-username/hand-landmarks-capture-system.git\ncd hand-landmarks-capture-system\nnpm install\n```\n\n### 2. Configure environment variables\n\n```bash\ncp .env.example .env\n```\n\nOpen `.env` and fill in your values:\n\n| Variable | Description |\n|---|---|\n| `VITE_SUPABASE_URL` | Your Supabase project URL — e.g. `https://xxxx.supabase.co` |\n| `VITE_SUPABASE_ANON_KEY` | Your Supabase anon/public key |\n\nBoth are found in your Supabase dashboard under **Settings → API**.\n\n\u003e The app works without Supabase — landmark detection still runs — but recording will fail to upload.\n\n### 3. Create the Supabase storage bucket\n\nIn your Supabase dashboard:\n\n1. Go to **Storage** and create a bucket named `arsl-dataset`\n2. Make it **public**, or configure an RLS policy that allows anonymous uploads to the `raw/` prefix\n\n### 4. Run the dev server\n\n```bash\nnpm run dev\n```\n\n## Usage\n\n1. Open the app in your browser and grant camera access when prompted\n2. Wait for the **Detecting** status indicator (green) — MediaPipe downloads the model on first load\n3. Select a sign from the dropdown\n4. Click **Start Recording**, perform the sign, then click **Stop**\n5. The recording is trimmed to the hand-visible frames, normalised, and uploaded automatically\n\n## Dataset format\n\nEach sample is saved as a JSON file at `arsl-dataset/raw/{base64label}-{timestamp}.json`:\n\n```json\n{\n  \"label\": \"مرحبا\",\n  \"type\": \"dynamic\",\n  \"mirrorable\": false,\n  \"captured_at\": \"2024-01-01T00:00:00.000Z\",\n  \"frame_count\": 42,\n  \"frames\": [\n    {\n      \"landmarks\": [\n        { \"x\": 0.0, \"y\": 0.0, \"z\": 0.0 },\n        { \"x\": 0.12, \"y\": -0.08, \"z\": 0.01 }\n      ]\n    }\n  ]\n}\n```\n\nLandmark coordinates are normalised relative to the wrist (landmark 0) and scaled by the wrist-to-middle-finger-base distance, making them invariant to hand size and position.\n\n## Available scripts\n\n| Command | Description |\n|---|---|\n| `npm run dev` | Start the Vite dev server |\n| `npm run build` | Production build to `dist/` |\n| `npm run preview` | Locally preview the production build |\n| `npm run lint` | Run ESLint |\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoyonix%2Fhand-landmarks-capture-system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftoyonix%2Fhand-landmarks-capture-system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoyonix%2Fhand-landmarks-capture-system/lists"}