{"id":17340413,"url":"https://github.com/nativesensors/eyegestures","last_synced_at":"2025-04-12T00:13:03.334Z","repository":{"id":229014847,"uuid":"708393007","full_name":"NativeSensors/EyeGestures","owner":"NativeSensors","description":"gaze tracking software","archived":false,"fork":false,"pushed_at":"2025-04-06T20:46:50.000Z","size":71598,"stargazers_count":310,"open_issues_count":4,"forks_count":32,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-12T00:12:54.253Z","etag":null,"topics":["eye-care","eye-tracking","eyetracking","gaze-estimation","gaze-tracking","gazetracking","healthcare","hmi"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NativeSensors.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":"Funding.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT","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},"funding":{"polar":"NativeSensors","github":"peterwaiiace"}},"created_at":"2023-10-22T12:40:48.000Z","updated_at":"2025-04-11T09:29:37.000Z","dependencies_parsed_at":"2024-04-03T23:32:40.826Z","dependency_job_id":"43223a0b-ec8e-41eb-aea2-b94d7c5e6abd","html_url":"https://github.com/NativeSensors/EyeGestures","commit_stats":{"total_commits":381,"total_committers":5,"mean_commits":76.2,"dds":0.6010498687664042,"last_synced_commit":"21961a4c22bd0740901dd58e34ab39f7d0207f6e"},"previous_names":["nativesensors/eyegestures"],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NativeSensors%2FEyeGestures","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NativeSensors%2FEyeGestures/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NativeSensors%2FEyeGestures/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NativeSensors%2FEyeGestures/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NativeSensors","download_url":"https://codeload.github.com/NativeSensors/EyeGestures/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248497820,"owners_count":21113984,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["eye-care","eye-tracking","eyetracking","gaze-estimation","gaze-tracking","gazetracking","healthcare","hmi"],"created_at":"2024-10-15T15:45:02.044Z","updated_at":"2025-04-12T00:13:03.324Z","avatar_url":"https://github.com/NativeSensors.png","language":"Python","funding_links":["https://polar.sh/NativeSensors","https://github.com/sponsors/peterwaiiace","https://buy.polar.sh/polar_cl_H2FqQHunwgXtU7i9mP7VJ95OZ10XVO3vm6MpSimoPPg","https://polar.sh/NativeSensors/products/5fce104c-46ec-4203-892b-a26e0e0ead18","https://polar.sh/NativeSensors/posts/eyepather-new-tool-in-eyegestures-ecosystem","https://polar.sh/NativeSensors/products/3756d557-134e-4e7e-ac50-d850126aa325?ref=producthunt"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource srcset=\"https://github.com/NativeSensors/EyeGestures/assets/40773550/ddfc8b96-5a7e-4487-9307-6fbd62e8915e\" media=\"(prefers-color-scheme: light)\"/\u003e   \n    \u003csource srcset=\"https://github.com/NativeSensors/EyeGestures/assets/40773550/6d42b8a2-24ea-4cbc-bdb0-ad688ee26c36\" media=\"(prefers-color-scheme: dark)\"/\u003e    \n   \u003cimg width=\"300px\" height=\"300px\"/\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n![PyPI - Downloads](https://img.shields.io/pypi/dm/eyeGestures)\n\u003ca href=\"https://polar.sh/NativeSensors\"\u003e\u003cimg src=\"https://polar.sh/embed/seeks-funding-shield.svg?org=NativeSensors\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/pedromxavier/flag-badges\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/pedromxavier/flag-badges/main/badges/PL.svg\" alt=\"made in PL\"\u003e\n\u003c/a\u003e\n\n## EYEGESTURES\n\nEyeGestures is open source eyetracking software/library using native webcams and phone camers for achieving its goal. The aim of library is to bring accessibility of eye-tracking and eye-driven interfaces without requirement of obtaining expensive hardware.\n\nOur [Mission](https://github.com/NativeSensors/EyeGestures/blob/main/MISSION.md)! \n### 💜 Sponsors: \n\n\u003e [!NOTE]\n\u003e Check JS port: [EyeGesturesLite](https://github.com/NativeSensors/EyeGesturesLite)!\n\n\n\u003e [!IMPORTANT]  \n\u003e EyeGestures is a fully volunteer-based project and exists thanks to your donations and support.\n\u003e\n\u003e \u003ca href=\"https://buy.polar.sh/polar_cl_H2FqQHunwgXtU7i9mP7VJ95OZ10XVO3vm6MpSimoPPg\"\u003eDonation\u003c/a\u003e\n\u003e\n\u003e 📢📢 **If you are bussiness and would like to collaborate, reach us: contact@eyegestures.com** 📢📢\n\u003e\n\u003e We can provide custom comercial license and invoices if needed.\n\u003e\n\u003e \u003c!-- POLAR type=ads id=203bbe subscription_benefit_id=bb272b6d-f698-44e3-a417-36a6fa203bbe width=240 height=100 --\u003e\n\u003e \n\u003e \u003c!-- POLAR-END id=eizdelw --\u003e\n\u003e\n---------\n### 🔨 Projects build with EyeGestures: \n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/3ce0130a-1daa-4710-ae8c-0ee76ee3d35b\" width=\"300\" height=\"150\"\u003e\n  \u003cimg src=\"https://github.com/NativeSensors/EyeGestures/assets/40773550/923e22a1-7fd7-4c06-9804-256aca22be21\" width=\"300\" height=\"150\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/PeterWaIIace/PeterWaIIace/assets/40773550/3b38d73d-bb6f-4f31-b67d-231ac4cd04cb\" width=\"300\" height=\"150\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/33e7782b-7977-4f88-ad54-c43d44c6dced\" width=\"300\" height=\"150\"\u003e\n\u003c/p\u003e\n\n- [EyePilot](https://polar.sh/NativeSensors/products/5fce104c-46ec-4203-892b-a26e0e0ead18) \n- [EyePather](https://polar.sh/NativeSensors/posts/eyepather-new-tool-in-eyegestures-ecosystem) - discontinued\n- [EyeFocus](https://polar.sh/NativeSensors/products/3756d557-134e-4e7e-ac50-d850126aa325?ref=producthunt) \u003c- 4th best product on PH!\n- Add your project! contact@eyegestures.com or PR\n\nSubscribe and get access to our software:\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"https://polar.sh/NativeSensors\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://polar.sh/embed/subscribe.svg?org=NativeSensors\u0026label=Subscribe\u0026darkmode\"\u003e\u003cimg alt=\"Subscribe on Polar\" src=\"https://polar.sh/embed/subscribe.svg?org=NativeSensors\u0026label=Subscribe\"\u003e\u003c/picture\u003e\u003c/a\u003e\n\n--------\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/0a5c5363-f389-4b99-a75a-8ebe9a8bd7f5\" width=\"500\" height=\"250\"\u003e\n\u003c/p\u003e\n\n### ⚓ Ports:\n- JavaScript version: [EyeGesturesLite](https://github.com/NativeSensors/EyeGesturesLite)!\n\n### 💻 Install\n```\npython3 -m pip install eyeGestures\n```\n\n\u003e[!WARNING]\n\u003esome users report that mediapipe, scikit-learn or opencv is not installing together with eyegestures. To fix it, just install it with pip.\n\n### ⚙️ Try\n\nTracker works best when your camera or laptop is at arm's length, similar to how you would typically use it. If you are further away, it may be less responsive for now - currently working on solving this issue.\n\n```\npython3 examples/simple_example_v2.py\n```\n\n```\npython3 examples/simple_example.py [legacy tracker, will become obsolete]\n```\n\n### 🔧 Build your own:\n\n#### Using EyeGesture Engine V3 - Faster smaller better:\n\n```python\nfrom eyeGestures.utils import VideoCapture\nfrom eyeGestures import EyeGestures_v3\n\n# Initialize gesture engine and video capture\ngestures = EyeGestures_v3()\ncap = VideoCapture(0)\ncalibrate = True\nscreen_width = 500\nscreen_height= 500\n\n# Process each frame\nwhile True:\n  ret, frame = cap.read()\n  event, cevent = gestures.step(frame,\n    calibrate,\n    screen_width,\n    screen_height,\n    context=\"my_context\")\n\n  if event:\n    cursor_x, cursor_y = event.point[0], event.point[1]\n    fixation = event.fixation\n    saccades = event.saccadess # saccadess movement detector\n    # calibration_radius: radius for data collection during calibration\n```\n\n\u003c!-- POLAR type=ads id=eizdelwu subscription_benefit_id=bb272b6d-f698-44e3-a417-36a6fa203bbe width=240 height=100 --\u003e\n\u003c!-- POLAR-END id=eizdelwu --\u003e\n\n#### Using EyeGesture Engine V2 - [Stable]:\n\n```python\nfrom eyeGestures.utils import VideoCapture\nfrom eyeGestures import EyeGestures_v2\n\n# Initialize gesture engine and video capture\ngestures = EyeGestures_v2()\ncap = VideoCapture(0)  \ncalibrate = True\nscreen_width = 500\nscreen_height= 500\n\n# Process each frame\nwhile True:\n  ret, frame = cap.read()\n  event, cevent = gestures.step(frame,\n    calibrate,\n    screen_width,\n    screen_height,\n    context=\"my_context\")\n\n  if event:\n    cursor_x, cursor_y = event.point[0], event.point[1]\n    fixation = event.fixation\n    # calibration_radius: radius for data collection during calibration\n```\n\n\u003c!-- POLAR type=ads id=eizdelwu subscription_benefit_id=bb272b6d-f698-44e3-a417-36a6fa203bbe width=240 height=100 --\u003e\n\u003c!-- POLAR-END id=eizdelwu --\u003e\n\n#### Customize [only V1/V2]:\n\nYou can customize your calibration points/map to fit your solutions. Simple copy snippet below, and place your calibration poitns on x,y planes from 0.0 to 1.0. It will be then automatically scaled to your display.\n\n```python\ngestures = EyeGestures_v2()\ngestures.uploadCalibrationMap([[0,0],[0,1],[1,0],[1,1]])\n```\n\nV2 is two stage tracker. It runs V1 under the hood but then uses it as feature extractor for V2 machine learning component, and combines both outputs to generate new gaze point. It is possible to control how much V1 affects V2 by:\n\n```python\ngestures.setClassicImpact(N) # setting N = 2 is working best for my testing \n```\nThis makes that sample obtained from V2 is averaged with N times sample from V1 (same sample copied that many times). In outcome having V2 impacting output in `1/N+1` and V1 `N/N+1`.\n\nIt is also worth to know that you can enable hidden calibration for V1 (same calibration when using only V1, but now it is invisible to user):\n```python\ngestures.enableCNCalib()\n```\n \n#### Using EyeGesture Engine V1 - Model-Based Approach [not recommended]:\n\n```python\nfrom eyeGestures.utils import VideoCapture\nfrom eyeGestures import EyeGestures_v1\n\n# Initialize gesture engine with RoI parameters\ngestures = EyeGestures_v1()\n\ncap = VideoCapture(0)  \nret, frame = cap.read()\ncalibrate = True\nscreen_width = 500\nscreen_height= 500\n\n# Obtain estimations from camera frames\nevent, cevent = gestures.estimate(\n    frame,\n    \"main\",\n    calibrate,  # set calibration - switch to False to stop calibration\n    screen_width,\n    screen_height,\n    0, 0, 0.8, 10\n)\n\nif event:\n  cursor_x, cursor_y = event.point[0], event.point[1]\n  fixation = event.fixation\n  # calibration_radius: radius for data collection during calibration\n```\n\nFeel free to copy and paste the relevant code snippets for your project.\n\n### 🔥 Web Demos:\n\n- [Main page](https://eyegestures.com/)\n- [EyeGesturesLite](https://eyegestures.com/tryLite)\n\n### rules of using\n\nIf you are building publicly available product, and have no commercial license, please mention us somewhere in your interface. \n\n### 📇 Find us:\n- [discord](https://discord.gg/FvagCX8T4h)\n- [twitter](https://twitter.com/PW4ltz)\n- [daily.dev](https://dly.to/JEe1Sz6vLey)\n- email: contact@eyegestures.com\n\n\n### Troubleshooting:\n\n1) some users report that `mediapipe`, `scikit-learn` or `opencv` is not installing together with `eyegestures`. To fix it, just install it with `pip`.\n\n### Missing feature or facing a bug?\n\nCreate new [issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/creating-an-issue) so we can tackle it!\n\n### 💻 Contributors\n\n\u003ca href=\"https://github.com/OWNER/REPO/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=NativeSensors/EyeGestures\" /\u003e\n\u003c/a\u003e\n\n### 💵 Support the project \n\nWe will be extremely grateful for your support: it helps to keep server running + fuels my brain with coffee. \n\nSupport project on Polar (in exchange we provide access to alphas versions!):\n\n\u003ca href=\"https://polar.sh/NativeSensors\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://polar.sh/embed/subscribe.svg?org=NativeSensors\u0026label=Subscribe\u0026darkmode\"\u003e\u003cimg alt=\"Subscribe on Polar\" src=\"https://polar.sh/embed/subscribe.svg?org=NativeSensors\u0026label=Subscribe\"\u003e\u003c/picture\u003e\u003c/a\u003e\n\n\u003cpicture\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: dark)\"\n    srcset=\"\n      https://api.star-history.com/svg?repos=NativeSensors/EyeGestures\u0026type=Date\u0026theme=dark\n    \"\n  /\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: light)\"\n    srcset=\"\n      https://api.star-history.com/svg?repos=NativeSensors/EyeGestures\u0026type=Date\n    \"\n  /\u003e\n  \u003cimg\n    alt=\"Star History Chart\"\n    src=\"https://api.star-history.com/svg?repos=NativeSensors/EyeGestures\u0026type=Date\"\n  /\u003e\n\u003c/picture\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnativesensors%2Feyegestures","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnativesensors%2Feyegestures","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnativesensors%2Feyegestures/lists"}