leap
Python package for the Lifetime Exposures and Asthma outcomes Projection (LEAP) Model
카메라로 관절 움직임을 측정해 가동범위를 기록하고 비교하는 프로토타입
Translation pending
AI summary · website and README
HealthJavaScript · HTMLGitHub @tone7718-droidOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
카메라 영상의 2D 관절 좌표로 움직임 범위를 측정하는 브라우저 프로토타입 v0.7입니다. 임상 정확도는 검증되지 않았습니다. 정적 파일을 HTTPS로 호스팅하거나 로컬 서버에서 실행합니다. file://로 열면 ES 모듈과 카메라 접근이 제한될 수 있습니다. 브라우저에서 http://localhost:8000을 열고 카메라 권한을 허용하세요. MediaPipe 코드·WASM·모델은 vendor/mediapipe/에서 같은 사이트로 불러오므로 외부 CDN이나 글꼴 서버에 접속하지 않습니다(배포본 약 28MB). GPU 초기화에 실패하면 CPU로 다시 시도하며, 상단 HUD에 fps와 GPU/CPU 사용 여부를 표시합니다. 처리 속도가 6fps 미만이면 끝범위를 기록할 수 없으므로 화면에 경고를 표시합니다.Read the full README ↗
휴대폰 카메라 영상의 2D 관절 좌표로 관절 가동범위를 측정하는 브라우저 각도계 프로토타입 v0.9입니다. 임상 정확도는 아직 검증되지 않았습니다(아래 "검증 방법" 참고).
| 영역 | v0.7 | v0.8 |
|---|---|---|
| 측정 항목 | 무릎·팔꿈치 굴곡, 어깨 외전, 고관절 굴곡 (8개) | + 어깨 굴곡/신전, 고관절 외전/내전, 발목 배측/저측굴곡 (14개) |
| 방향 | 절댓값만 표시해서 과신전·신전 구분 불가 | 얼굴(귀→코)과 발(종아리 기준 뒤꿈치→발끝)로 몸 방향을 판별해 부호 있는 각도 표시: 굴곡 +, 과신전·신전 − |
| 가이드 라인 | 세 관절점을 잇는 선 | 각도계 표준 정렬: 축(●), 고정팔(파랑), 0° 기준선(점선, 고정팔 연장), 이동팔(초록), 각도 호, 값 라벨 |
| 지레팔 | 없음 | 이동 분절 무게중심에서 내린 수직선과 축까지의 수평 거리(중력 지레팔)를 표시. 분절이 수평일 때 100% |
| 수동 보정 | 없음 | 화면 고정·보정: 정지 화면에서 관절점을 손가락으로 끌어 실제 뼈 기준점에 맞추면 각도를 다시 계산하고 끝범위로 반영. PNG로 저장 가능 |
| 떨림 처리 | 각도 지수평활 | 관절점에 One Euro 필터 적용: 정지 시 떨림은 줄이고 움직일 때 지연은 줄임. 화면 숫자와 가이드 선이 같은 점에서 계산됨 |
| 품질 확인 | 가시성, 측면/정면 판정 | + 운동면 이탈 각도(MediaPipe 3D 좌표, 25° 경고 / 45° 측정 중단), 분절 크기, 화면 가장자리, 측정 쪽이 카메라 반대편인지, 휴대폰 기울기(가속도계) |
| 회전 버그 | 측정 중 휴대폰을 돌리면 화면 비율이 바뀌어 각도가 왜곡됨 | 매 프레임 영상 크기를 확인해 캔버스를 다시 맞추고 추적 초기화 |
| 거울 화면 | 후면 카메라에서도 기본 켜짐 | 전면은 거울, 후면은 실제 방향으로 자동 전환 |
| 보안 | meta CSP만 사용 (unsafe-inline 스타일) | vercel.json 보안 헤더(CSP frame-ancestors 'none', X-Frame-Options, Permissions-Policy, nosniff, Referrer-Policy, HSTS). 인라인 스타일을 제거해 style-src 'self'로 강화. 복원 파일의 알 수 없는 필드 제거, 모든 기록 삭제 기능 추가 |
| 기능 | Kinovea | Hudl Technique · OnForm 등 영상 분석 앱 | ROM Vision v0.8 |
|---|---|---|---|
| 자동 관절 인식 | ✗ (수동 각도 도구) | 주로 수동 도구 (일부 앱은 AI 스켈레톤 제공) | ✓ (MediaPipe, 기기 내 처리) |
| 각도계식 고정팔·이동팔·0° 기준선 | 수동으로 그림 | 수동으로 그림 | ✓ 자동 + 수동 보정 |
| 정지 화면에서 기준점 보정 | ✓ | ✓ | ✓ |
| 과신전·신전 부호 구분 | 사용자가 판단 | 사용자가 판단 | ✓ 자동 (방향 미확인 시 기록 차단 또는 경고) |
| 운동면 이탈·촬영 품질 경고 | ✗ | ✗ | ✓ |
| 중력 지레팔 표시 | ✗ | ✗ | ✓ |
| 슬로모션·프레임 단위 재생 | ✓ | ✓ | ✗ |
| 설치 | PC 프로그램 | 앱 | 웹 주소만 열면 됨 |
경쟁 제품 열은 공개 자료에서 확인되는 일반적인 기능이며, 버전·요금제에 따라 다를 수 있습니다.
아직 없는 기능: 슬로모션·프레임 단위 재생, 녹화 영상 불러오기, 여러 카메라를 이용한 3D 측정, 손목·경추·회전 운동 측정.
정적 파일을 HTTPS로 호스팅하거나 로컬 서버에서 실행합니다. file://로 열면 ES 모듈과 카메라 접근이 제한될 수 있습니다.
python -m http.server 8000
브라우저에서 http://localhost:8000을 열고 카메라 권한을 허용하세요. MediaPipe 코드·WASM·모델은 vendor/mediapipe/에서 같은 사이트로 불러오므로 외부 CDN에 접속하지 않습니다. GPU 초기화에 실패하면 CPU로 다시 시도합니다. 처리 속도가 6fps 미만이면 끝범위를 기록할 수 없다고 경고합니다.
| 항목 | 축 | 고정팔 | 이동팔 | 0° |
|---|---|---|---|---|
| 무릎 굴곡/신전 | 무릎 | 엉덩이(대전자) 방향 | 발목(외측복사뼈) 방향 | 허벅지 연장선 (과신전 −) |
| 팔꿈치 굴곡/신전 | 팔꿈치 | 어깨(견봉) 방향 | 손목 방향 | 위팔 연장선 (과신전 −) |
| 고관절 굴곡/신전 | 고관절 | 몸통 외측 중앙선 | 무릎 방향 | 몸통 연장선 (신전 −) |
| 어깨 굴곡/신전 | 어깨 | 몸통 외측 중앙선 | 팔꿈치 방향 | 팔을 내린 위치 (신전 −) |
| 어깨 외전 | 어깨 | 몸통 중앙선과 평행 | 팔꿈치 방향 | 팔을 내린 위치 (내전 −) |
| 고관절 외전/내전 | 고관절 | 양쪽 골반(ASIS)을 잇는 선 | 무릎 방향 | 골반선의 수직선 (내전 −) |
| 발목 배측/저측굴곡 | 발목 | 종아리(비골두) 방향 | 발바닥(뒤꿈치→발끝)과 평행 | 종아리와 발이 90° (저측굴곡 −) |
화면의 "검증 모드 · 고니오미터 비교" 카드에서 앱 값과 고니오미터 값을 짝지어 기록합니다. 임상 기록과 따로 저장됩니다(romvision_validation_v1).
이 저장소의 테스트는 계산식이 정확한지 확인합니다(알려진 각도로 만든 합성 자세에서 오차 0). 모델이 관절점을 얼마나 정확히 찾는지는 실제 사람과 휴대폰으로만 확인할 수 있습니다.
localStorage에 저장됩니다. 다른 기기나 브라우저와는 공유되지 않습니다. 브라우저 데이터 삭제·사생활 보호 모드 종료 시 사라질 수 있으므로 JSON 백업을 별도로 보관하세요.clinical-v3 형식(음수 각도, 수동 보정 여부, 방향 미확인 비율 포함)입니다. v0.7 이하 기록은 각도 정의가 달라 백업·CSV에만 보존하고 추세 비교에서는 제외합니다.connect-src 'self')로 외부 연결을 막습니다.vercel.json이 보안 헤더를 보냅니다: CSP(frame-ancestors 'none' 포함), X-Frame-Options: DENY(다른 사이트가 이 페이지를 숨겨 넣고 카메라를 쓰게 하는 클릭재킹 차단), Permissions-Policy(카메라·모션 센서만 이 사이트에 허용, 마이크·위치 차단), nosniff, Referrer-Policy: no-referrer, HSTS.unsafe-inline이 필요 없습니다. 화면 문자열은 모두 textContent로 넣습니다.index.html, styles.css: 화면과 스타일app.js: 카메라 제어, 각도계 오버레이, 화면 고정·보정, 기록·내보내기·복원, 규칙 기반 요약core.js: 관절 정의, 각도·방향·지레팔 계산, 품질 판정, One Euro 필터, 끝범위 판정, 기록 검증vendor/mediapipe/: MediaPipe Tasks Vision 0.10.14 / Pose Landmarker Full (수정 없이 포함, SHA-256 검증)vercel.json: 배포 보안 헤더Node.js 22 이상에서 외부 패키지 없이 실행합니다.
npm run check
npm test
tests/geometry.test.js: 7개 관절 유형을 알려진 각도의 합성 자세로 만들어 양방향 촬영, 좌우, 누운 자세, 거울 영상, 카메라 기울기, 화면 비율에서 계산값이 정확히 일치하는지 확인합니다. 방향 판별, 평면 이탈, 지레팔, 필터 동작도 확인합니다.tests/core.test.js, tests/app.test.js: 끝범위 판정, 저장 실패 시 값 보존, 기록 검증·병합·복원, CSV, 화면 동작tests/security.test.js: 보안 헤더, 인라인 코드 없음, HTML 삽입 API 미사용, 관절 메뉴와 정의 일치tests/vendor.test.js: vendor 파일 체크섬, 외부 출처 미사용v0.8 개발 중에는 실제 MediaPipe 모델과 가짜 카메라 영상을 써서 헤드리스 Chromium(휴대폰 화면 크기)에서 카메라 시작, 각도 표시, 화면 고정·보정·반영·재개, CSP 위반 없음까지 확인했습니다. 실제 iOS/Android 기기에서의 카메라 동작과 측정 정확도는 별도로 확인해야 합니다.