{"id":51261614,"url":"https://github.com/europanite/pose_estimation","last_synced_at":"2026-06-29T12:32:11.414Z","repository":{"id":356862405,"uuid":"1234345885","full_name":"europanite/pose_estimation","owner":"europanite","description":"A container for pose estimation from 2D images.","archived":false,"fork":false,"pushed_at":"2026-05-29T15:37:43.000Z","size":65911,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T17:17:06.624Z","etag":null,"topics":["docker","docker-compose","expo","jest","mmd","open-ports-detection","open-pose","openpose","pose-detection","pose-estimation","pytest","python","react","react-native","typescript","vrm"],"latest_commit_sha":null,"homepage":"https://europanite.github.io/pose_estimation/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/europanite.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-10T04:06:28.000Z","updated_at":"2026-05-29T15:37:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/europanite/pose_estimation","commit_stats":null,"previous_names":["europanite/pose_estimation"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/europanite/pose_estimation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/europanite%2Fpose_estimation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/europanite%2Fpose_estimation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/europanite%2Fpose_estimation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/europanite%2Fpose_estimation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/europanite","download_url":"https://codeload.github.com/europanite/pose_estimation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/europanite%2Fpose_estimation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34927675,"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-29T02:00:05.398Z","response_time":58,"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":["docker","docker-compose","expo","jest","mmd","open-ports-detection","open-pose","openpose","pose-detection","pose-estimation","pytest","python","react","react-native","typescript","vrm"],"created_at":"2026-06-29T12:32:10.356Z","updated_at":"2026-06-29T12:32:11.399Z","avatar_url":"https://github.com/europanite.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\nlayout: page\ntitle: \"🇺🇸 English\"\npermalink: /\nlang: en\n---\n\n# [pose_estimation](https://github.com/europanite/pose_estimation \"A container for pose estimation from 2D images.\")\n\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n![OS](https://img.shields.io/badge/OS-Linux%20%7C%20macOS%20%7C%20Windows-blue)\n[![Python](https://img.shields.io/badge/python-3.9|%203.10%20|%203.11|%203.12|%203.13-blue)](https://www.python.org/)\n\n[![CodeQL Advanced](https://github.com/europanite/pose_estimation/actions/workflows/codeql.yml/badge.svg)](https://github.com/europanite/pose_estimation/actions/workflows/codeql.yml)\n[![CI](https://github.com/europanite/pose_estimation/actions/workflows/ci.yml/badge.svg)](https://github.com/europanite/pose_estimation/actions/workflows/ci.yml)\n[![Python Lint](https://github.com/europanite/pose_estimation/actions/workflows/lint.yml/badge.svg)](https://github.com/europanite/pose_estimation/actions/workflows/lint.yml)\n\n\u003cp align=\"right\"\u003e\n  \u003ca href=\"https://europanite.github.io/pose_estimation/\"\u003e🇺🇸 English\u003c/a\u003e |\n  \u003ca href=\"https://europanite.github.io/pose_estimation/hi/\"\u003e🇮🇳 हिंदी\u003c/a\u003e |\n  \u003ca href=\"https://europanite.github.io/pose_estimation/ja/\"\u003e🇯🇵 日本語\u003c/a\u003e |\n  \u003ca href=\"https://europanite.github.io/pose_estimation/zh-CN/\"\u003e🇨🇳 简体中文\u003c/a\u003e |\n  \u003ca href=\"https://europanite.github.io/pose_estimation/es/\"\u003e🇪🇸 Español\u003c/a\u003e |\n  \u003ca href=\"https://europanite.github.io/pose_estimation/pt-BR/\"\u003e🇧🇷 Português (Brasil)\u003c/a\u003e |\n  \u003ca href=\"https://europanite.github.io/pose_estimation/ko/\"\u003e🇰🇷 한국어\u003c/a\u003e |\n  \u003ca href=\"https://europanite.github.io/pose_estimation/de/\"\u003e🇩🇪 Deutsch\u003c/a\u003e |\n  \u003ca href=\"https://europanite.github.io/pose_estimation/fr/\"\u003e🇫🇷 Français\u003c/a\u003e\n\u003c/p\u003e\n\n![\"web_ui\"](./assets/images/web_ui.png)\n\nA container for pose estimation from 2D images.\n\n---\n\n## Pose-to-VRM bone mapping\n\nThe backend returns BODY_25-style pose keypoints and bone pairs. In MediaPipe mode, `Neck` is synthesized from `LShoulder` and `RShoulder`, and `MidHip` is synthesized from `LHip` and `RHip`. Use the table below when transferring the estimated pose to a VRM humanoid skeleton.\n\n| Estimated pose vector | Input keypoints | VRM humanoid bone | Priority | Notes |\n|---|---|---|---|---|\n| Body root | `MidHip`, `LHip`, `RHip` | `hips` | Required | Use mainly for root rotation. Avoid trusting root translation from a single image. |\n| Spine | `MidHip -\u003e Neck` | `spine` | Required | Main upper-body direction. |\n| Chest | `MidHip -\u003e Neck` | `chest` | Recommended | Apply with a weaker weight than `spine` to avoid exaggerated bending. |\n| Upper chest | `MidHip -\u003e Neck` | `upperChest` | Optional | Use only when the loaded VRM model has this bone. |\n| Neck | `Neck -\u003e Nose` | `neck` | Recommended | Apply gently because head and neck landmarks are noisy in single-image pose estimation. |\n| Head | `Neck -\u003e Nose`, `Nose -\u003e LEye`, `Nose -\u003e REye`, `LEye -\u003e LEar`, `REye -\u003e REar` | `head` | Recommended | A simple fallback can use only `Neck -\u003e Nose`; eye and ear points can improve the facing direction. |\n| Left shoulder | `Neck -\u003e LShoulder` | `leftShoulder` | Optional | Use only when the VRM has shoulder bones. The arm can still be driven without this bone. |\n| Left upper arm | `LShoulder -\u003e LElbow` | `leftUpperArm` | Required | Primary left upper-arm rotation. |\n| Left lower arm | `LElbow -\u003e LWrist` | `leftLowerArm` | Required | Primary left forearm rotation. |\n| Left hand | `LElbow -\u003e LWrist` or hand landmarks | `leftHand` | Optional | BODY_25 does not provide enough wrist orientation. Use a weak fallback unless hand landmarks are available. |\n| Right shoulder | `Neck -\u003e RShoulder` | `rightShoulder` | Optional | Use only when the VRM has shoulder bones. |\n| Right upper arm | `RShoulder -\u003e RElbow` | `rightUpperArm` | Required | Primary right upper-arm rotation. |\n| Right lower arm | `RElbow -\u003e RWrist` | `rightLowerArm` | Required | Primary right forearm rotation. |\n| Right hand | `RElbow -\u003e RWrist` or hand landmarks | `rightHand` | Optional | BODY_25 does not provide enough wrist orientation. Use a weak fallback unless hand landmarks are available. |\n| Left upper leg | `LHip -\u003e LKnee` | `leftUpperLeg` | Required | Primary left thigh rotation. |\n| Left lower leg | `LKnee -\u003e LAnkle` | `leftLowerLeg` | Required | Primary left shin rotation. |\n| Left foot | `LAnkle -\u003e LBigToe`, `LAnkle -\u003e LHeel` | `leftFoot` | Recommended | Use toe and heel points when they are visible. |\n| Left toes | `LHeel -\u003e LBigToe` | `leftToes` | Optional | Use only when the VRM has toe bones and the toe landmarks are stable. |\n| Right upper leg | `RHip -\u003e RKnee` | `rightUpperLeg` | Required | Primary right thigh rotation. |\n| Right lower leg | `RKnee -\u003e RAnkle` | `rightLowerLeg` | Required | Primary right shin rotation. |\n| Right foot | `RAnkle -\u003e RBigToe`, `RAnkle -\u003e RHeel` | `rightFoot` | Recommended | Use toe and heel points when they are visible. |\n| Right toes | `RHeel -\u003e RBigToe` | `rightToes` | Optional | Use only when the VRM has toe bones and the toe landmarks are stable. |\n| Left eye | `Nose -\u003e LEye` | `leftEye` | Optional | Only needed for gaze or expression features. |\n| Right eye | `Nose -\u003e REye` | `rightEye` | Optional | Only needed for gaze or expression features. |\n\nMinimum useful VRM bones are `spine`, `leftUpperArm`, `leftLowerArm`, `rightUpperArm`, `rightLowerArm`, `leftUpperLeg`, `leftLowerLeg`, `rightUpperLeg`, and `rightLowerLeg`. After these are stable, add `hips`, `chest`, `neck`, `head`, `leftFoot`, and `rightFoot` for a more readable avatar pose.\n\n---\n\n## Start the project\n\n```bash\ncp .env.example .env\ndocker compose up --build\n```\n\nOpen the browser:\n\n```text\nhttp://localhost:8081\n```\n\nCheck the API:\n\n```bash\ncurl http://localhost:8000/api/v1/health\n```\n\n---\n\n## How to use\n\n1. Press \"Select image\".\n2. Select an image.\n3. Check the 2D keypoints overlaid on the image.\n4. Check the pose direction in the lower \"3D skeleton check\" view.\n\n## Tests\n\nRun the backend tests:\n\n```bash\ndocker compose -f docker-compose.test.yml run --rm backend_test\n```\n\nRun the frontend smoke test:\n\n```bash\ndocker compose -f docker-compose.yml -f docker-compose.test.yml run --rm frontend_test\n```\n\n---\n\n## License\n- Apache License 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feuropanite%2Fpose_estimation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feuropanite%2Fpose_estimation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feuropanite%2Fpose_estimation/lists"}